mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-18 21:41:16 +00:00
add SCO handle to HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE
This commit is contained in:
parent
c4f23c26de
commit
1aba866f2c
@ -172,19 +172,16 @@ static void packet_handler(uint8_t * event, uint16_t event_size){
|
|||||||
// printf("DAEMON_EVENT_HCI_PACKET_SENT\n");
|
// printf("DAEMON_EVENT_HCI_PACKET_SENT\n");
|
||||||
// try_send_sco();
|
// try_send_sco();
|
||||||
break;
|
break;
|
||||||
case HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE:
|
|
||||||
// printf("HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE status %u, %x\n", event[2], READ_BT_16(event, 3));
|
|
||||||
if (event[2]) break;
|
|
||||||
sco_handle = READ_BT_16(event, 3);
|
|
||||||
break;
|
|
||||||
case HCI_EVENT_HSP_META:
|
case HCI_EVENT_HSP_META:
|
||||||
switch (event[2]) {
|
switch (event[2]) {
|
||||||
case HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE:
|
case HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE:
|
||||||
if (event[3] == 0){
|
if (event[3] == 0){
|
||||||
|
sco_handle = READ_BT_16(event, 4);
|
||||||
printf("Audio connection established with SCO handle 0x%04x.\n", sco_handle);
|
printf("Audio connection established with SCO handle 0x%04x.\n", sco_handle);
|
||||||
// try_send_sco();
|
// try_send_sco();
|
||||||
} else {
|
} else {
|
||||||
printf("Audio connection establishment failed with status %u\n", event[3]);
|
printf("Audio connection establishment failed with status %u\n", event[3]);
|
||||||
|
sco_handle = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HSP_SUBEVENT_AUDIO_DISCONNECTION_COMPLETE:
|
case HSP_SUBEVENT_AUDIO_DISCONNECTION_COMPLETE:
|
||||||
|
16
src/hsp_ag.c
16
src/hsp_ag.c
@ -139,6 +139,17 @@ static void emit_event(uint8_t event_subtype, uint8_t value){
|
|||||||
(*hsp_ag_callback)(event, sizeof(event));
|
(*hsp_ag_callback)(event, sizeof(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void emit_event_audio_connected(uint8_t status, uint16_t handle){
|
||||||
|
if (!hsp_hs_callback) return;
|
||||||
|
uint8_t event[6];
|
||||||
|
event[0] = HCI_EVENT_HSP_META;
|
||||||
|
event[1] = sizeof(event) - 2;
|
||||||
|
event[2] = HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE;
|
||||||
|
event[3] = status;
|
||||||
|
bt_store_16(event, 4, handle);
|
||||||
|
(*hsp_hs_callback)(event, sizeof(event));
|
||||||
|
}
|
||||||
|
|
||||||
void hsp_ag_create_service(uint8_t * service, int rfcomm_channel_nr, const char * name){
|
void hsp_ag_create_service(uint8_t * service, int rfcomm_channel_nr, const char * name){
|
||||||
uint8_t* attribute;
|
uint8_t* attribute;
|
||||||
de_create_sequence(service);
|
de_create_sequence(service);
|
||||||
@ -510,7 +521,8 @@ static void packet_handler (void * connection, uint8_t packet_type, uint16_t cha
|
|||||||
uint8_t air_mode = packet[index];
|
uint8_t air_mode = packet[index];
|
||||||
|
|
||||||
if (status != 0){
|
if (status != 0){
|
||||||
log_error("(e)SCO Connection is not established, status %u", status);
|
log_error("(e)SCO Connection failed, status %u", status);
|
||||||
|
emit_event_audio_connected(status, sco_handle);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (link_type){
|
switch (link_type){
|
||||||
@ -538,7 +550,7 @@ static void packet_handler (void * connection, uint8_t packet_type, uint16_t cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
hsp_state = HSP_ACTIVE;
|
hsp_state = HSP_ACTIVE;
|
||||||
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, 0);
|
emit_event_audio_connected(status, sco_handle);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
src/hsp_hs.c
17
src/hsp_hs.c
@ -131,6 +131,18 @@ static void emit_event(uint8_t event_subtype, uint8_t value){
|
|||||||
event[3] = value; // status 0 == OK
|
event[3] = value; // status 0 == OK
|
||||||
(*hsp_hs_callback)(event, sizeof(event));
|
(*hsp_hs_callback)(event, sizeof(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void emit_event_audio_connected(uint8_t status, uint16_t handle){
|
||||||
|
if (!hsp_hs_callback) return;
|
||||||
|
uint8_t event[6];
|
||||||
|
event[0] = HCI_EVENT_HSP_META;
|
||||||
|
event[1] = sizeof(event) - 2;
|
||||||
|
event[2] = HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE;
|
||||||
|
event[3] = status;
|
||||||
|
bt_store_16(event, 4, handle);
|
||||||
|
(*hsp_hs_callback)(event, sizeof(event));
|
||||||
|
}
|
||||||
|
|
||||||
// remote audio volume control
|
// remote audio volume control
|
||||||
// AG +VGM=13 [0..15] ; HS AT+VGM=6 | AG OK
|
// AG +VGM=13 [0..15] ; HS AT+VGM=6 | AG OK
|
||||||
|
|
||||||
@ -448,7 +460,8 @@ static void packet_handler (void * connection, uint8_t packet_type, uint16_t cha
|
|||||||
uint8_t air_mode = packet[index];
|
uint8_t air_mode = packet[index];
|
||||||
|
|
||||||
if (status != 0){
|
if (status != 0){
|
||||||
log_error("(e)SCO Connection is not established, status %u", status);
|
log_error("(e)SCO Connection failed, status %u", status);
|
||||||
|
emit_event_audio_connected(status, sco_handle);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (link_type){
|
switch (link_type){
|
||||||
@ -479,7 +492,7 @@ static void packet_handler (void * connection, uint8_t packet_type, uint16_t cha
|
|||||||
hsp_hs_callback(packet, size);
|
hsp_hs_callback(packet, size);
|
||||||
|
|
||||||
hsp_state = HSP_ACTIVE;
|
hsp_state = HSP_ACTIVE;
|
||||||
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, 0);
|
emit_event_audio_connected(0, sco_handle);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user