58 lines
2.1 KiB
Dart
58 lines
2.1 KiB
Dart
import 'dart:convert';
|
||
import 'dart:typed_data';
|
||
|
||
import 'package:flutter_test/flutter_test.dart';
|
||
import 'package:maibu_satabot_v2/core/bluetooth/ble_protocol_decoder.dart';
|
||
import 'package:maibu_satabot_v2/core/protocol/machine_protocol_constants.dart';
|
||
|
||
void main() {
|
||
// 协议表示例:24 个逗号字段,控制模式=2(蓝牙),障碍物=1(有障碍)
|
||
const sheet =
|
||
'52.2,2000,2000,190,190,45.2,46.6,40.5,40.5,40,50,5,5,32,5,1,'
|
||
'120.772,32.078,2026-09-10 12:34:56,2000,2,98,12.65,1';
|
||
|
||
Uint8List payloadWith(String body, List<int> tail) =>
|
||
Uint8List.fromList([...utf8.encode(body), ...tail]);
|
||
|
||
String valueOf(BleDecodedResult r, String label) =>
|
||
r.fields.firstWhere((f) => f.label == label).value;
|
||
|
||
test('0x02 带2字节CRC:控制模式/障碍物解析正确', () {
|
||
final r = BleProtocolDecoder.decode(
|
||
MachineProtocolConstants.cmdStatusInfo,
|
||
payloadWith(sheet, [0x12, 0x34]), // 尾部 CRC16 小端
|
||
);
|
||
expect(valueOf(r, '控制模式'), '蓝牙');
|
||
expect(valueOf(r, '障碍物'), '有障碍');
|
||
expect(valueOf(r, '电压'), '52.20 V'); // _tryParseDouble 保留两位小数
|
||
expect(valueOf(r, '电量'), '98%');
|
||
});
|
||
|
||
test('0x02 串尾带\\0再加CRC:仍解析正确(不乱码)', () {
|
||
final r = BleProtocolDecoder.decode(
|
||
MachineProtocolConstants.cmdStatusInfo,
|
||
payloadWith('$sheet\x00', [0x12, 0x34]),
|
||
);
|
||
expect(valueOf(r, '控制模式'), '蓝牙');
|
||
expect(valueOf(r, '障碍物'), '有障碍');
|
||
});
|
||
|
||
test('0x02 控制模式带空格(如" 3"):仍映射为文字 TCP', () {
|
||
final spaced = sheet.replaceFirst(',2000,2,98', ',2000, 3,98');
|
||
final r = BleProtocolDecoder.decode(
|
||
MachineProtocolConstants.cmdStatusInfo,
|
||
payloadWith(spaced, [0x12, 0x34]),
|
||
);
|
||
expect(valueOf(r, '控制模式'), 'TCP');
|
||
});
|
||
|
||
test('0x02 控制模式为协议外码6:显示 未知(6) 而非裸6', () {
|
||
final bad = sheet.replaceFirst(',2000,2,98', ',2000,6,98');
|
||
final r = BleProtocolDecoder.decode(
|
||
MachineProtocolConstants.cmdStatusInfo,
|
||
payloadWith(bad, [0x12, 0x34]),
|
||
);
|
||
expect(valueOf(r, '控制模式'), '未知(6)');
|
||
});
|
||
}
|