1 #include "CppUTest/TestHarness.h" 2 #include "CppUTest/CommandLineTestRunner.h" 3 4 #include "btstack_debug.h" 5 #include "classic/hfp.h" 6 7 // Test 8 static uint8_t test_data[HFP_H2_SYNC_FRAME_SIZE]; 9 static uint8_t test_valid_sbc_frame[HFP_H2_SYNC_FRAME_SIZE]; 10 static uint8_t test_invalid_sbc_frame[HFP_H2_SYNC_FRAME_SIZE]; 11 static uint8_t test_invalid_frame[HFP_H2_SYNC_FRAME_SIZE]; 12 static hfp_h2_sync_t test_hfp_h2_sync; 13 static uint8_t test_num_good_frames; 14 static uint8_t test_num_bad_frames; 15 16 static bool test_hfp_h2_sync_callback(bool bad_frame, const uint8_t * frame_data, uint16_t frame_len){ 17 btstack_assert(frame_len == HFP_H2_SYNC_FRAME_SIZE); 18 if (bad_frame){ 19 test_num_bad_frames++; 20 return false; 21 } else { 22 // mSBC frame ok <=> sync word = 0xAD 23 if (frame_data[2] == 0xAD) { 24 test_num_good_frames++; 25 return true; 26 } 27 } 28 return false; 29 } 30 31 TEST_GROUP(HFP_H2_SYNC){ 32 void setup(void){ 33 test_num_good_frames = 0; 34 test_num_bad_frames = 0; 35 test_valid_sbc_frame[0] = 0x01; 36 test_valid_sbc_frame[1] = 0x08; 37 test_valid_sbc_frame[2] = 0xAD; 38 test_invalid_sbc_frame[0] = 0x01; 39 test_invalid_sbc_frame[1] = 0x08; 40 test_invalid_sbc_frame[2] = 0xFF; 41 hfp_h2_sync_init(&test_hfp_h2_sync, &test_hfp_h2_sync_callback); 42 } 43 void teardown(void){ 44 } 45 }; 46 47 // initial setting 48 TEST(HFP_H2_SYNC, ValidSBCFrame){ 49 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame)); 50 CHECK_EQUAL(1, test_num_good_frames); 51 } 52 53 TEST(HFP_H2_SYNC, ValidSBCFramefter59){ 54 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, sizeof(test_invalid_frame)-1); 55 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame)); 56 CHECK_EQUAL(1, test_num_good_frames); 57 } 58 59 TEST(HFP_H2_SYNC, ValidSBCFrameAfter2){ 60 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, 2); 61 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame)); 62 CHECK_EQUAL(1, test_num_good_frames); 63 CHECK_EQUAL(2, test_hfp_h2_sync.dropped_bytes); 64 } 65 66 TEST(HFP_H2_SYNC, BadAndGoodFrame){ 67 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, sizeof(test_invalid_frame)); 68 CHECK_EQUAL(0, test_num_good_frames); 69 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame)); 70 CHECK_EQUAL(1, test_num_bad_frames); 71 CHECK_EQUAL(1, test_num_good_frames); 72 } 73 74 TEST(HFP_H2_SYNC, BadFrameFlagA){ 75 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_data) - 1); 76 hfp_h2_sync_process(&test_hfp_h2_sync, true, test_valid_sbc_frame, 1); 77 CHECK_EQUAL(1, test_num_bad_frames); 78 } 79 80 TEST(HFP_H2_SYNC, BadFrameFlagB){ 81 hfp_h2_sync_process(&test_hfp_h2_sync, true, test_valid_sbc_frame, sizeof(test_valid_sbc_frame)); 82 CHECK_EQUAL(1, test_num_bad_frames); 83 } 84 85 TEST(HFP_H2_SYNC, InvalidSBCFrame){ 86 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_sbc_frame, sizeof(test_invalid_sbc_frame)); 87 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, 2); 88 CHECK_EQUAL(1, test_num_bad_frames); 89 CHECK_EQUAL(0, test_num_good_frames); 90 } 91 92 int main (int argc, const char * argv[]){ 93 return CommandLineTestRunner::RunAllTests(argc, argv); 94 } 95