-
Notifications
You must be signed in to change notification settings - Fork 12
Formula zh
deng_ran edited this page Jul 8, 2021
·
1 revision
English | 中文
FastProto支持自定义数据变换公式,通过任意数据类型注解的afterDecode
字段指定解码公式,FastProto会先按照数据类型解码,然后将解码得到的数值送入变换公式,
最后把变换公式的结果赋给被注解修饰的字段。同理,通过任意数据类型注解的beforeEncode
字段指定编码公式,FastProto会先获取被修饰字段的数值,然后送入编码公式,
最后把编码公式的结果按照数据类型写入二进制报文。
例如压力信号对应一个换算公式,需要将解码后的数值乘以0.1,这种变换在物联网很常见。
Byte Offset | Bit Offset | Data Type(C/C++) | Signal Name | Unit | Formula |
---|---|---|---|---|---|
14-17 | unsigned int | pressure | Pa | p * 0.1 |
解码公式必须实现java.lang.function.Function
接口, 且保证公式的输入类型与注解数据类型一致,输出类型与字段类型一致,否则会抛出DecodeFormulaException
异常。
public class PressureDecodeFormula implements Function<Long, Double> {
@Override
public Double apply(Long value) {
return value * 0.1;
}
}
@UInteger32Type(value = 14, afterDecode = PressureDecodeFormula.class)
double pressure;
编码公式必须实现java.lang.function.Function
接口,且保证输入类型与字段类型一致,输出类型与注解类型一致,否则会抛出EncodeFormulaException
异常。
public class PressureEncodeFormula implements Function<Double, Long> {
@Override
public Long apply(Double value) {
return (long) (value * 10);
}
}
@UInteger32Type(value = 14, afterDecode = PressureDecodeFormula.class, beforeEncode = PressureEncodeFormula.class)
double pressure;