hsp_hs.c (99a1006758b1c3699c20f18ef38ff35741fe6eb2) | hsp_hs.c (fffdd288575b1b4b1bf0e7fec3011e209f5de43f) |
---|---|
1/* 2 * Copyright (C) 2014 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright --- 98 unchanged lines hidden (view full) --- 107 HSP_W4_SCO_CONNECTED, 108 109 HSP_AUDIO_CONNECTION_ESTABLISHED, 110 111 HSP_W2_DISCONNECT_SCO, 112 HSP_W4_SCO_DISCONNECTED, 113 114 HSP_W2_DISCONNECT_RFCOMM, | 1/* 2 * Copyright (C) 2014 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright --- 98 unchanged lines hidden (view full) --- 107 HSP_W4_SCO_CONNECTED, 108 109 HSP_AUDIO_CONNECTION_ESTABLISHED, 110 111 HSP_W2_DISCONNECT_SCO, 112 HSP_W4_SCO_DISCONNECTED, 113 114 HSP_W2_DISCONNECT_RFCOMM, |
115 HSP_W4_RFCOMM_DISCONNECTED, 116 HSP_W4_RFCOMM_DISCONNECTED_AND_RESTART, | 115 HSP_W4_RFCOMM_DISCONNECTED, |
117 HSP_W4_CONNECTION_ESTABLISHED_TO_SHUTDOWN 118} hsp_state_t; 119 120static hsp_state_t hsp_state = HSP_IDLE; 121 122static void hsp_run(void); 123static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); 124static void handle_query_rfcomm_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); --- 135 unchanged lines hidden (view full) --- 260static void hsp_hs_reset_state(void){ 261 hsp_state = HSP_IDLE; 262 hs_microphone_gain = -1; 263 hs_speaker_gain = -1; 264 265 hs_send_button_press = 0; 266 wait_ok = 0; 267 hs_support_custom_indications = 0; | 116 HSP_W4_CONNECTION_ESTABLISHED_TO_SHUTDOWN 117} hsp_state_t; 118 119static hsp_state_t hsp_state = HSP_IDLE; 120 121static void hsp_run(void); 122static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); 123static void handle_query_rfcomm_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); --- 135 unchanged lines hidden (view full) --- 259static void hsp_hs_reset_state(void){ 260 hsp_state = HSP_IDLE; 261 hs_microphone_gain = -1; 262 hs_speaker_gain = -1; 263 264 hs_send_button_press = 0; 265 wait_ok = 0; 266 hs_support_custom_indications = 0; |
267 268 hsp_disconnect_rfcomm = 0; 269 hsp_establish_audio_connection = 0; 270 hsp_release_audio_connection = 0; |
|
268} 269 270void hsp_hs_init(uint8_t rfcomm_channel_nr){ 271 // register for HCI events 272 hci_event_callback_registration.callback = &packet_handler; 273 hci_add_event_handler(&hci_event_callback_registration); 274 275 // init L2CAP --- 26 unchanged lines hidden (view full) --- 302 return; 303 } 304 305 if (hsp_state < HSP_W4_SCO_CONNECTED){ 306 hsp_state = HSP_W2_DISCONNECT_RFCOMM; 307 return; 308 } 309 | 271} 272 273void hsp_hs_init(uint8_t rfcomm_channel_nr){ 274 // register for HCI events 275 hci_event_callback_registration.callback = &packet_handler; 276 hci_add_event_handler(&hci_event_callback_registration); 277 278 // init L2CAP --- 26 unchanged lines hidden (view full) --- 305 return; 306 } 307 308 if (hsp_state < HSP_W4_SCO_CONNECTED){ 309 hsp_state = HSP_W2_DISCONNECT_RFCOMM; 310 return; 311 } 312 |
310 if (hsp_state < HSP_W4_SCO_DISCONNECTED){ 311 hsp_state = HSP_W2_DISCONNECT_SCO; 312 return; 313 } | |
314 hsp_disconnect_rfcomm = 1; 315 hsp_run(); 316} 317 318 319void hsp_hs_establish_audio_connection(void){ 320 switch (hsp_state){ 321 case HSP_RFCOMM_CONNECTION_ESTABLISHED: --- 70 unchanged lines hidden (view full) --- 392 393 switch (hsp_state){ 394 case HSP_SDP_QUERY_RFCOMM_CHANNEL: 395 hsp_state = HSP_W4_SDP_QUERY_COMPLETE; 396 sdp_client_query_rfcomm_channel_and_name_for_uuid(&handle_query_rfcomm_event, remote, SDP_Headset_AG); 397 break; 398 399 case HSP_AUDIO_CONNECTION_ESTABLISHED: | 313 hsp_disconnect_rfcomm = 1; 314 hsp_run(); 315} 316 317 318void hsp_hs_establish_audio_connection(void){ 319 switch (hsp_state){ 320 case HSP_RFCOMM_CONNECTION_ESTABLISHED: --- 70 unchanged lines hidden (view full) --- 391 392 switch (hsp_state){ 393 case HSP_SDP_QUERY_RFCOMM_CHANNEL: 394 hsp_state = HSP_W4_SDP_QUERY_COMPLETE; 395 sdp_client_query_rfcomm_channel_and_name_for_uuid(&handle_query_rfcomm_event, remote, SDP_Headset_AG); 396 break; 397 398 case HSP_AUDIO_CONNECTION_ESTABLISHED: |
400 case HSP_RFCOMM_CONNECTION_ESTABLISHED : | 399 case HSP_RFCOMM_CONNECTION_ESTABLISHED: |
401 402 if (hs_microphone_gain >= 0){ 403 char buffer[20]; 404 sprintf(buffer, "%s=%d\r\n", HSP_HS_MICROPHONE_GAIN, hs_microphone_gain); 405 hsp_hs_send_str_over_rfcomm(rfcomm_cid, buffer); 406 hs_microphone_gain = -1; 407 break; 408 } --- 145 unchanged lines hidden (view full) --- 554 case RFCOMM_EVENT_CAN_SEND_NOW: 555 hsp_hs_callback(packet, size); 556 break; 557 558 case HCI_EVENT_DISCONNECTION_COMPLETE: 559 handle = little_endian_read_16(packet,3); 560 if (handle == sco_handle){ 561 sco_handle = 0; | 400 401 if (hs_microphone_gain >= 0){ 402 char buffer[20]; 403 sprintf(buffer, "%s=%d\r\n", HSP_HS_MICROPHONE_GAIN, hs_microphone_gain); 404 hsp_hs_send_str_over_rfcomm(rfcomm_cid, buffer); 405 hs_microphone_gain = -1; 406 break; 407 } --- 145 unchanged lines hidden (view full) --- 553 case RFCOMM_EVENT_CAN_SEND_NOW: 554 hsp_hs_callback(packet, size); 555 break; 556 557 case HCI_EVENT_DISCONNECTION_COMPLETE: 558 handle = little_endian_read_16(packet,3); 559 if (handle == sco_handle){ 560 sco_handle = 0; |
562 hsp_state = HSP_RFCOMM_CONNECTION_ESTABLISHED ; 563 hsp_hs_reset_state(); | 561 hsp_state = HSP_RFCOMM_CONNECTION_ESTABLISHED; |
564 emit_event(HSP_SUBEVENT_AUDIO_DISCONNECTION_COMPLETE,0); 565 break; 566 } 567 if (handle == rfcomm_handle) { 568 rfcomm_handle = 0; 569 hsp_state = HSP_IDLE; | 562 emit_event(HSP_SUBEVENT_AUDIO_DISCONNECTION_COMPLETE,0); 563 break; 564 } 565 if (handle == rfcomm_handle) { 566 rfcomm_handle = 0; 567 hsp_state = HSP_IDLE; |
570 hsp_hs_callback(packet, size); | 568 emit_event(HSP_SUBEVENT_RFCOMM_DISCONNECTION_COMPLETE,0); |
571 hsp_hs_reset_state(); 572 } 573 break; 574 case RFCOMM_EVENT_CHANNEL_CLOSED: 575 hsp_hs_reset_state(); 576 hsp_hs_callback(packet, size); 577 break; 578 default: --- 29 unchanged lines hidden --- | 569 hsp_hs_reset_state(); 570 } 571 break; 572 case RFCOMM_EVENT_CHANNEL_CLOSED: 573 hsp_hs_reset_state(); 574 hsp_hs_callback(packet, size); 575 break; 576 default: --- 29 unchanged lines hidden --- |