蓝牙增强+个更换绑定逻辑接口
This commit is contained in:
57
test/ble_protocol_decoder_test.dart
Normal file
57
test/ble_protocol_decoder_test.dart
Normal file
@@ -0,0 +1,57 @@
|
||||
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)');
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user