You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

79 lines
2.8 KiB

import 'package:flutter_test/flutter_test.dart';
import 'package:eaimar/devices/bes/bes_f2f_protocol.dart';
import 'package:eaimar/devices/bes/bes_protocol.dart';
void main() {
const token = [0x11, 0x22, 0x33, 0x44];
test('AA 6B / AA 6C 与探测区间', () {
expect(BesF2f.enterFrame(token),
[0xAA, 0x6B, 0x06, 0x02, 0x01, 0x11, 0x22, 0x33, 0x44]);
expect(BesF2f.exitFrame(), [0xAA, 0x6C]);
expect(BesCmd.switchesMode(0x6B), isTrue);
expect(BesCmd.switchesMode(0x6C), isTrue);
expect(BesCmd.switchesMode(0x6D), isFalse);
expect(BesCmd.frame(BesCmd.faceToFaceStart), [0xAA, 0x66]);
});
test('BB EB 双耳可用且经典链路保持', () {
final ack = BesF2f.parseEnterAck(
[0xBB, 0xEB, 0x07, 0x00, 0x03, 0x02, 0x01, 40, 0x03, 0x01]);
expect(ack, isNotNull);
expect(ack!.result, 0);
expect(ack.bothEars, isTrue);
expect(ack.frameMs, 40);
expect(ack.classicKeep, isTrue);
expect(ack.fwMinor, 3);
});
test('广播 token 对不上就不是这副耳机', () {
final ad = BesF2f.parseAdvertPayload(
[0xF2, 0xF2, 0x02, 0x01, 0x11, 0x22, 0x33, 0x44, 0x80 | 70]);
expect(ad, isNotNull);
expect(ad!.ear, BesF2f.earLeft);
expect(ad.battery, 70);
expect(ad.charging, isTrue);
expect(ad.tokenEquals(token), isTrue);
expect(ad.tokenEquals(const [0x11, 0x22, 0x33, 0x45]), isFalse);
expect(
BesF2f.parseAdvertPayload(
[0xF2, 0xF2, 0x02, 0x09, 0x11, 0x22, 0x33, 0x44, 0x10]),
isNull);
});
test('握手帧与下行音频耳位', () {
expect(BesF2f.hello(token),
[0xAA, 0x01, 0x06, 0x02, 0x11, 0x22, 0x33, 0x44, 0x01]);
expect(BesF2f.sessionCfg(), [0xAA, 0x02, 0x03, 0x00, 80, 0x00]);
expect(BesF2f.startStream(), [0xAA, 0x03, 0x00]);
expect(BesF2f.exitEar(), [0xAA, 0x06, 0x00]);
final down = BesF2f.audioDown(
ear: BesF2f.earRight,
flags: BesF2f.flagPlayBegin | BesF2f.flagFlush,
seq: 0x0102,
g722: const [0xAB, 0xCD],
);
expect(down.sublist(0, 6), [0xAA, 0x91, 0x05, 0x52, 0x02, 0x01]);
expect(down.sublist(6), [0xAB, 0xCD]);
});
test('上行音频 OWN_VOICE 与序号', () {
final frame = BesF2f.parseBle(
[0xBB, 0x90, 0x05, 0x91, 0x02, 0x01, 0x10, 0x20]);
final audio = BesF2f.parseAudioUp(frame!);
expect(audio!.ear, BesF2f.earLeft);
expect(audio.ownVoice, isTrue);
expect(audio.seq, 0x0102);
expect(audio.g722, [0x10, 0x20]);
});
test('来电退出事件', () {
final frame = BesF2f.parseBle([0xBB, 0x87, 0x02, 0x06, 0x03]);
expect(frame!.op, BesF2f.opEvent);
expect(frame.payload[0], BesF2f.evtExitRequest);
expect(frame.payload[1], BesF2f.exitIncomingCall);
expect(BesF2f.messageKey(BesF2f.errBusy), 'f2fEndOtherFeature');
expect(BesF2f.isExitAckOk([0xBB, 0xEC, 0x01, 0x00]), isTrue);
});
}