I have found a small problem in the original code, posted by Mike.
It took me a while to figure it out but eventually I did, Mike mixed up the channels when he reverse engineered the app, it's funny that it still works but that explains why we cannot get past the 6 taps limit even when the car is stopped. Here is what needs changing, I'm not submitting a commit because you might have changed things and I don't have the time to check the full code.
This means a few changes here and there mainly in hu_aap.c.
The aa_type_array should look like this:
aa_type_ptr_t aa_type_array [AA_CH_MAX + 1] [3] [32] = { // 0 - 31, 32768-32799, 65504-65535
// Sync with hu_tra.java, hu_aap.h and hu_aap.c:aa_type_array[]
// Channel 0 Ctr Control:
aa_pro_ctr_a00, aa_pro_ctr_a01, aa_pro_ctr_a02, aa_pro_ctr_a03, aa_pro_ctr_a04, aa_pro_ctr_a05, aa_pro_ctr_a06, aa_pro_all_a07, aa_pro_ctr_a08, aa_pro_ctr_a09, aa_pro_ctr_a0a, aa_pro_ctr_a0b, aa_pro_ctr_a0c, aa_pro_ctr_a0d, aa_pro_ctr_a0e, aa_pro_ctr_a0f,
aa_pro_ctr_a10, aa_pro_ctr_a11, aa_pro_ctr_a12, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // a10, a11, a12, aa_pro_ctr_a13, aa_pro_ctr_a14, aa_pro_ctr_a15, aa_pro_ctr_a16, aa_pro_ctr_a17, aa_pro_ctr_a18, aa_pro_ctr_a19, aa_pro_ctr_a1a, aa_pro_ctr_a1b, aa_pro_ctr_a1c, aa_pro_ctr_a1d, aa_pro_ctr_a1e, aa_pro_ctr_a1f,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 3 Tou TouchScreen:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, aa_pro_tou_b02, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 1 Sen Sensor:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, aa_pro_sen_b01, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 2 Vid Video:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
aa_pro_snk_b00, aa_pro_vid_b01, NULL, NULL, NULL, NULL, NULL, aa_pro_vid_b07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 4 Output Audio:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
aa_pro_snk_b00, aa_pro_aud_b01, aa_pro_aud_b02, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 5 Output Audio1:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
aa_pro_snk_b00, aa_pro_aud_b01, aa_pro_aud_b02, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 6 Output Audio2:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
aa_pro_snk_b00, aa_pro_aud_b01, aa_pro_aud_b02, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
// Channel 7 Mic Audio:
NULL, NULL, NULL, NULL, NULL, NULL, NULL, aa_pro_all_a07, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, aa_pro_mic_b01, NULL, NULL, aa_pro_mic_b04, aa_pro_mic_b05, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
};
You will need to make sure you adjust the sd_buf array as well in the same file.
Beside that here is the exact string used by Desktop Headunit Emulator to initiate the setup (this is sd_buf array in our file)
//Channel 1
0x0A, 0x0F, 0x08, 0x01, 0x22, 0x0B, 0x0A, 0x01, 0x54, 0x12, 0x06, 0x08, 0xA0, 0x06, 0x10, 0xE0, 0x03,
//Channel 2
0x0A, 0x10, 0x08, 0x02, 0x12, 0x0C, 0x0A, 0x02, 0x08, 0x01, 0x0A, 0x02, 0x08, 0x0A, 0x0A, 0x02, 0x08, 0x0D,
//Channel 3
0x0A, 0x15, 0x08, 0x03, 0x1A, 0x11, 0x08, 0x03, 0x22, 0x0D, 0x08, 0x01, 0x10, 0x02, 0x18, 0x00, 0x20, 0x00, 0x28, 0xA0, 0x01, 0x30, 0x00,
//Channel 4
0x0A, 0x11, 0x08, 0x04, 0x1A, 0x0D, 0x08, 0x01, 0x10, 0x01, 0x1A, 0x07, 0x08, 0x80, 0x7D, 0x10, 0x10, 0x18, 0x01,
//Channel 5
0x0A, 0x11, 0x08, 0x05, 0x1A, 0x0D, 0x08, 0x01, 0x10, 0x02, 0x1A, 0x07, 0x08, 0x80, 0x7D, 0x10, 0x10, 0x18, 0x01,
//Channel 6
0x0A, 0x12, 0x08, 0x06, 0x1A, 0x0E, 0x08, 0x01, 0x10, 0x03, 0x1A, 0x08, 0x08, 0x80, 0xF7, 0x02, 0x10, 0x10, 0x18, 0x02,
//Channel 7
0x0A, 0x0F, 0x08, 0x07, 0x2A, 0x0B, 0x08, 0x01, 0x12, 0x07, 0x08, 0x80, 0x7D, 0x10, 0x10, 0x18, 0x01,
//Car data (name + version + driving position + etc)
0x12, 0x06, 0x47, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x1A, 0x11, 0x44, 0x65, 0x73, 0x6B, 0x74, 0x6F, 0x70, 0x20, 0x48, 0x65, 0x61, 0x64, 0x20, 0x55, 0x6E, 0x69, 0x74, 0x22, 0x04, 0x32, 0x30, 0x31, 0x35, 0x2A, 0x24, 0x30, 0x35, 0x38, 0x32, 0x35, 0x32, 0x31, 0x66, 0x2D, 0x38, 0x37, 0x61, 0x63, 0x2D, 0x34, 0x30, 0x65, 0x64, 0x2D, 0x38, 0x61, 0x39, 0x39, 0x2D, 0x39, 0x36, 0x35, 0x39, 0x62, 0x61, 0x32, 0x65, 0x62, 0x37, 0x66, 0x33, 0x30, 0x00, 0x3A, 0x06, 0x47, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x42, 0x11, 0x44, 0x65, 0x73, 0x6B, 0x74, 0x6F, 0x70, 0x20, 0x48, 0x65, 0x61, 0x64, 0x20, 0x55, 0x6E, 0x69, 0x74, 0x4A, 0x12, 0x32, 0x30, 0x31, 0x35, 0x2D, 0x30, 0x39, 0x2D, 0x31, 0x36, 0x2D, 0x32, 0x32, 0x35, 0x38, 0x37, 0x34, 0x35, 0x52, 0x09, 0x31, 0x2E, 0x30, 0x2D, 0x6C, 0x69, 0x6E, 0x75, 0x78, 0x60, 0x00,
Hope this helps.