mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-30 07:21:20 +00:00
test/hfp: fix hci parser
This commit is contained in:
parent
d5bcd37fce
commit
20834b7ab7
@ -109,42 +109,54 @@ static void process_file(const char * pklg_path, const char * wav_path, int pack
|
|||||||
|
|
||||||
uint8_t packet[256];
|
uint8_t packet[256];
|
||||||
uint32_t size = big_endian_read_32(header, 0) - 9;
|
uint32_t size = big_endian_read_32(header, 0) - 9;
|
||||||
bytes_read = __read(fd, packet, size);
|
|
||||||
|
|
||||||
uint8_t type = header[12];
|
uint8_t type = header[12];
|
||||||
|
|
||||||
if (type != packet_type) continue;
|
if (type != packet_type) {
|
||||||
|
// skip data
|
||||||
sco_packet_counter++;
|
while (size){
|
||||||
|
int bytes_to_read = btstack_min(sizeof(packet), size);
|
||||||
int16_t audio_frame_out[128]; //
|
__read(fd, packet, bytes_to_read);
|
||||||
|
size -= bytes_to_read;
|
||||||
if (size > sizeof(audio_frame_out)){
|
}
|
||||||
printf("sco_demo_receive_CVSD: SCO packet larger than local output buffer - dropping data.\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int audio_bytes_read = size - 3;
|
|
||||||
const int num_samples = audio_bytes_read / BYTES_PER_FRAME;
|
|
||||||
|
|
||||||
// check SCO handle -- quick hack, not correct if handle 0x0000 is actually used for SCO
|
|
||||||
uint16_t sco_handle = little_endian_read_16(packet, 0) & 0xfff;
|
|
||||||
if (sco_handle == 0) continue;
|
|
||||||
|
|
||||||
// convert into host endian
|
|
||||||
int16_t audio_frame_in[128];
|
|
||||||
int i;
|
|
||||||
for (i=0;i<num_samples;i++){
|
|
||||||
audio_frame_in[i] = little_endian_read_16(packet, 3 + i * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plc_enabled){
|
|
||||||
btstack_cvsd_plc_process_data(&plc_state, audio_frame_in, num_samples, audio_frame_out);
|
|
||||||
} else {
|
} else {
|
||||||
memcpy(audio_frame_out, audio_frame_in, audio_bytes_read);
|
if (size > sizeof(packet) ){
|
||||||
}
|
printf("Error: size %d, packet counter %d \n", size, sco_packet_counter);
|
||||||
|
exit(10);
|
||||||
|
}
|
||||||
|
bytes_read = __read(fd, packet, size);
|
||||||
|
|
||||||
wav_writer_write_int16(num_samples, audio_frame_out);
|
sco_packet_counter++;
|
||||||
|
|
||||||
|
int16_t audio_frame_out[128]; //
|
||||||
|
|
||||||
|
if (size > sizeof(audio_frame_out)){
|
||||||
|
printf("sco_demo_receive_CVSD: SCO packet larger than local output buffer - dropping data.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int audio_bytes_read = size - 3;
|
||||||
|
const int num_samples = audio_bytes_read / BYTES_PER_FRAME;
|
||||||
|
|
||||||
|
// check SCO handle -- quick hack, not correct if handle 0x0000 is actually used for SCO
|
||||||
|
uint16_t sco_handle = little_endian_read_16(packet, 0) & 0xfff;
|
||||||
|
if (sco_handle == 0) continue;
|
||||||
|
|
||||||
|
// convert into host endian
|
||||||
|
int16_t audio_frame_in[128];
|
||||||
|
int i;
|
||||||
|
for (i=0;i<num_samples;i++){
|
||||||
|
audio_frame_in[i] = little_endian_read_16(packet, 3 + i * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plc_enabled){
|
||||||
|
btstack_cvsd_plc_process_data(&plc_state, audio_frame_in, num_samples, audio_frame_out);
|
||||||
|
} else {
|
||||||
|
memcpy(audio_frame_out, audio_frame_in, audio_bytes_read);
|
||||||
|
}
|
||||||
|
|
||||||
|
wav_writer_write_int16(num_samples, audio_frame_out);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wav_writer_close();
|
wav_writer_close();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user