parseData method

void parseData(
  1. List<int> mac,
  2. List<int> data, {
  3. OnGetVersion? onGetVersion,
  4. VoidCallback? onRequestSyncTime,
  5. OnSetResult? onSetResult,
  6. OnSyncTimeResult? onSyncTimeResult,
  7. OnGetBattery? onGetBattery,
  8. OnGetProbeInfo? onGetProbeInfo,
  9. OnGetProbeInfoFailure? onGetProbeInfoFailure,
})

Implementation

void parseData(
  List<int> mac,
  List<int> data, {
  OnGetVersion? onGetVersion,
  VoidCallback? onRequestSyncTime,
  OnSetResult? onSetResult,
  OnSyncTimeResult? onSyncTimeResult,
  OnGetBattery? onGetBattery,
  OnGetProbeInfo? onGetProbeInfo,
  OnGetProbeInfoFailure? onGetProbeInfoFailure,
}) {
  final payload = ElinkCmdUtils.formatA6Data(data);
  switch (payload[0]) {
    case 0x28: //获取电量
      final state = ElinkChargingState.values[payload[1]];
      int battery = payload[2] & 0xFF;
      onGetBattery?.call(state, battery);
      break;
    case 0x35: //设置设备信息
      final result = ElinkSetResult.values[payload[1]];
      onSetResult?.call(result);
      break;
    case 0x37: //同步时间给mcu
      final result = ElinkSetResult.values[payload[1]];
      onSyncTimeResult?.call(result);
      break;
    case 0x36:
      if (payload[1] == 0x01) {
        if (payload.length >= 38) {
          int index = 2;
          final version = payload[index++] & 0xFF;
          final id = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 4)) * 1000;
          final foodType = payload[index++] & 0xFF;
          final foodRawness = payload[index++] & 0xFF;
          final targetTempCelsius = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 2));
          final targetTempFahrenheit = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 2));
          final lowerTempLimitCelsius = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 2));
          final lowerTempLimitFahrenheit = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 2));
          final upperTempLimitCelsius = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 2));
          final upperTempLimitFahrenheit = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 2));
          final alarmTempPercent = ElinkCmdUtils.bytesToDouble(payload.sublist(index, index += 8));
          final timerStart = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 4)) * 1000;
          final timerEnd = ElinkCmdUtils.bytesToInt(payload.sublist(index, index += 4)) * 1000;
          final currentUnit = payload[index++] & 0xFF;
          final probeInfo = ElinkProbeInfo(
            mac: mac,
            id: id,
            foodType: foodType,
            foodRawness: foodRawness,
            targetTempCelsius: targetTempCelsius,
            targetTempFahrenheit: targetTempFahrenheit,
            lowerTempLimitCelsius: lowerTempLimitCelsius,
            lowerTempLimitFahrenheit: lowerTempLimitFahrenheit,
            upperTempLimitCelsius: upperTempLimitCelsius,
            upperTempLimitFahrenheit: upperTempLimitFahrenheit,
            alarmTempPercent: alarmTempPercent,
            timerStart: timerStart,
            timerEnd: timerEnd,
            currentUnit: currentUnit,
          );
          onGetProbeInfo?.call(probeInfo);
        }
      } else if (payload[1] == 0x00) {
        onGetProbeInfoFailure?.call(mac);
      }
      break;
    case 0x38: //mcu请求同步时间
      if (payload[1] == 0x01) {
        onRequestSyncTime?.call();
      }
      break;
    case 0x46: //获取模块版本号
      final versionArr = payload.sublist(2);
      final version = String.fromCharCodes(versionArr);
      onGetVersion?.call(version);
      break;
  }
}