setBoxProbeInfo method

Future<List<int>> setBoxProbeInfo(
  1. ElinkProbeInfo probeInfo
)

盒子设置探针信息 使用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);
}