setBoxProbeInfo method
盒子设置探针信息 使用UUID(elinkWriteUuid: FFE1)的特征值写入 Write using the characteristic value of UUID(elinkWriteUuid: FFE1)
Implementation
Future<List<int>> setBoxProbeInfo(ElinkProbeInfo probeInfo) {
final payload = List.filled(136, 0x00);
int index = 0;
payload[index++] = 0x03;
payload[index++] = 0x01;
payload.setAll(index, probeInfo.mac);
index += probeInfo.mac.length;
payload[index++] = 0x02;
final id = ElinkCmdUtils.intToBytes(probeInfo.id ~/ 1000);
payload.setAll(index, id);
index += id.length;
payload[index++] = probeInfo.foodType;
payload[index++] = probeInfo.foodRawness;
final targetTempCelsius = ElinkCmdUtils.intToBytes(probeInfo.targetTempCelsius.abs(), length: 2);
if (probeInfo.targetTempCelsius >= 0) {
payload[index++] = targetTempCelsius[0];
} else {
payload[index++] = targetTempCelsius[0] | 0x80;
}
payload[index++] = targetTempCelsius[1];
final targetTempFahrenheit = ElinkCmdUtils.intToBytes(probeInfo.targetTempFahrenheit.abs(), length: 2);
if (probeInfo.targetTempFahrenheit >= 0) {
payload[index++] = targetTempFahrenheit[0];
} else {
payload[index++] = targetTempFahrenheit[0] | 0x80;
}
payload[index++] = targetTempFahrenheit[1];
final lowerTempLimitCelsius = ElinkCmdUtils.intToBytes(probeInfo.lowerTempLimitCelsius.abs(), length: 2);
if (probeInfo.lowerTempLimitCelsius >= 0) {
payload[index++] = lowerTempLimitCelsius[0];
} else {
payload[index++] = lowerTempLimitCelsius[0] | 0x80;
}
payload[index++] = lowerTempLimitCelsius[1];
final lowerTempLimitFahrenheit = ElinkCmdUtils.intToBytes(probeInfo.lowerTempLimitFahrenheit.abs(), length: 2);
if (probeInfo.lowerTempLimitFahrenheit >= 0) {
payload[index++] = lowerTempLimitFahrenheit[0];
} else {
payload[index++] = lowerTempLimitFahrenheit[0] | 0x80;
}
payload[index++] = lowerTempLimitFahrenheit[1];
final upperTempLimitCelsius = ElinkCmdUtils.intToBytes(probeInfo.upperTempLimitCelsius.abs(), length: 2);
if (probeInfo.upperTempLimitCelsius >= 0) {
payload[index++] = upperTempLimitCelsius[0];
} else {
payload[index++] = upperTempLimitCelsius[0] | 0x80;
}
payload[index++] = upperTempLimitCelsius[1];
final upperTempLimitFahrenheit = ElinkCmdUtils.intToBytes(probeInfo.upperTempLimitFahrenheit.abs(), length: 2);
if (probeInfo.upperTempLimitFahrenheit >= 0) {
payload[index++] = upperTempLimitFahrenheit[0];
} else {
payload[index++] = upperTempLimitFahrenheit[0] | 0x80;
}
payload[index++] = upperTempLimitFahrenheit[1];
final alarmTempPercent = ElinkCmdUtils.doubleToBytes(probeInfo.alarmTempPercent ?? 0.8);
payload.setAll(index, alarmTempPercent);
index += alarmTempPercent.length;
final timerStart = ElinkCmdUtils.intToBytes((probeInfo.timerStart ?? 0) ~/ 1000);
payload.setAll(index, timerStart);
index += timerStart.length;
final timerEnd = ElinkCmdUtils.intToBytes((probeInfo.timerEnd ?? 0) ~/ 1000);
payload.setAll(index, timerEnd);
index += timerEnd.length;
payload[index++] = probeInfo.currentUnit;
final alarmTempCelsius = ElinkCmdUtils.intToBytes(probeInfo.alarmTempC.abs(), length: 2);
if (probeInfo.alarmTempC >= 0) {
payload[index++] = alarmTempCelsius[0];
} else {
payload[index++] = alarmTempCelsius[0] | 0x80;
}
payload[index++] = alarmTempCelsius[1];
final alarmTempFahrenheit = ElinkCmdUtils.intToBytes(probeInfo.alarmTempF.abs(), length: 2);
if (probeInfo.alarmTempF >= 0) {
payload[index++] = alarmTempFahrenheit[0];
} else {
payload[index++] = alarmTempFahrenheit[0] | 0x80;
}
payload[index++] = alarmTempFahrenheit[1];
if (!probeInfo.remark.isNullOrEmpty) {
String remark = probeInfo.remark!;
List<int> remarkBytes = utf8.encode(remark);
if (remarkBytes.length > 32) {
while (remarkBytes.length > 29) {
remark = remark.substring(0, remark.length - 1);
remarkBytes = utf8.encode(remark);
}
remark = "$remark...";
remarkBytes = utf8.encode(remark);
}
payload.setAll(index, remarkBytes);
index += remarkBytes.length;
}
return getElinkA7Data(payload);
}