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
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);
|
|
});
|
|
}
|
|
|