xref: /btstack/src/classic/hfp_ag.h (revision 3deb3ec68039c68a16974dffc53343233662f909)
1*3deb3ec6SMatthias Ringwald /*
2*3deb3ec6SMatthias Ringwald  * Copyright (C) 2014 BlueKitchen GmbH
3*3deb3ec6SMatthias Ringwald  *
4*3deb3ec6SMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
5*3deb3ec6SMatthias Ringwald  * modification, are permitted provided that the following conditions
6*3deb3ec6SMatthias Ringwald  * are met:
7*3deb3ec6SMatthias Ringwald  *
8*3deb3ec6SMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
9*3deb3ec6SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
10*3deb3ec6SMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11*3deb3ec6SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
12*3deb3ec6SMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
13*3deb3ec6SMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
14*3deb3ec6SMatthias Ringwald  *    contributors may be used to endorse or promote products derived
15*3deb3ec6SMatthias Ringwald  *    from this software without specific prior written permission.
16*3deb3ec6SMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
17*3deb3ec6SMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
18*3deb3ec6SMatthias Ringwald  *    monetary gain.
19*3deb3ec6SMatthias Ringwald  *
20*3deb3ec6SMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21*3deb3ec6SMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*3deb3ec6SMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*3deb3ec6SMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24*3deb3ec6SMatthias Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25*3deb3ec6SMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26*3deb3ec6SMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27*3deb3ec6SMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28*3deb3ec6SMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29*3deb3ec6SMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30*3deb3ec6SMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*3deb3ec6SMatthias Ringwald  * SUCH DAMAGE.
32*3deb3ec6SMatthias Ringwald  *
33*3deb3ec6SMatthias Ringwald  * Please inquire about commercial licensing options at
34*3deb3ec6SMatthias Ringwald  * [email protected]
35*3deb3ec6SMatthias Ringwald  *
36*3deb3ec6SMatthias Ringwald  */
37*3deb3ec6SMatthias Ringwald 
38*3deb3ec6SMatthias Ringwald // *****************************************************************************
39*3deb3ec6SMatthias Ringwald //
40*3deb3ec6SMatthias Ringwald //  Minimal setup for HFP Audio Gateway (AG) unit (!! UNDER DEVELOPMENT !!)
41*3deb3ec6SMatthias Ringwald //
42*3deb3ec6SMatthias Ringwald // *****************************************************************************
43*3deb3ec6SMatthias Ringwald 
44*3deb3ec6SMatthias Ringwald 
45*3deb3ec6SMatthias Ringwald #ifndef btstack_hfp_ag_h
46*3deb3ec6SMatthias Ringwald #define btstack_hfp_ag_h
47*3deb3ec6SMatthias Ringwald 
48*3deb3ec6SMatthias Ringwald #include "hci.h"
49*3deb3ec6SMatthias Ringwald #include "sdp_query_rfcomm.h"
50*3deb3ec6SMatthias Ringwald #include "hfp.h"
51*3deb3ec6SMatthias Ringwald 
52*3deb3ec6SMatthias Ringwald #if defined __cplusplus
53*3deb3ec6SMatthias Ringwald extern "C" {
54*3deb3ec6SMatthias Ringwald #endif
55*3deb3ec6SMatthias Ringwald 
56*3deb3ec6SMatthias Ringwald /* API_START */
57*3deb3ec6SMatthias Ringwald 
58*3deb3ec6SMatthias Ringwald /**
59*3deb3ec6SMatthias Ringwald  * @brief Create HFP Audio Gateway (AG) SDP service record.
60*3deb3ec6SMatthias Ringwald  */
61*3deb3ec6SMatthias Ringwald void hfp_ag_create_sdp_record(uint8_t * service, int rfcomm_channel_nr, const char * name, uint8_t ability_to_reject_call, uint16_t supported_features);;
62*3deb3ec6SMatthias Ringwald 
63*3deb3ec6SMatthias Ringwald /**
64*3deb3ec6SMatthias Ringwald  * @brief Intialize HFP Audio Gateway (AG) device.
65*3deb3ec6SMatthias Ringwald  * TODO:  move optional params into setters
66*3deb3ec6SMatthias Ringwald  */
67*3deb3ec6SMatthias Ringwald void hfp_ag_init(uint16_t rfcomm_channel_nr, uint32_t supported_features,
68*3deb3ec6SMatthias Ringwald     uint8_t * codecs, int codecs_nr,
69*3deb3ec6SMatthias Ringwald     hfp_ag_indicator_t * ag_indicators, int ag_indicators_nr,
70*3deb3ec6SMatthias Ringwald     hfp_generic_status_indicator_t * hf_indicators, int hf_indicators_nr,
71*3deb3ec6SMatthias Ringwald     const char *call_hold_services[], int call_hold_services_nr);
72*3deb3ec6SMatthias Ringwald 
73*3deb3ec6SMatthias Ringwald /**
74*3deb3ec6SMatthias Ringwald  * @brief Register callback for the HFP Audio Gateway (AG) client.
75*3deb3ec6SMatthias Ringwald  */
76*3deb3ec6SMatthias Ringwald void hfp_ag_register_packet_handler(hfp_callback_t callback);
77*3deb3ec6SMatthias Ringwald 
78*3deb3ec6SMatthias Ringwald /**
79*3deb3ec6SMatthias Ringwald  * @brief Establish RFCOMM connection, and perform service level connection agreement:
80*3deb3ec6SMatthias Ringwald  * - exchange of supported features
81*3deb3ec6SMatthias Ringwald  * - report Audio Gateway (AG) indicators and their status
82*3deb3ec6SMatthias Ringwald  * - enable indicator status update in the AG
83*3deb3ec6SMatthias Ringwald  * - accept the information about available codecs in the Hands-Free (HF), if sent
84*3deb3ec6SMatthias Ringwald  * - report own information describing the call hold and multiparty services, if possible
85*3deb3ec6SMatthias Ringwald  * - report which HF indicators are enabled on the AG, if possible
86*3deb3ec6SMatthias Ringwald  */
87*3deb3ec6SMatthias Ringwald void hfp_ag_establish_service_level_connection(bd_addr_t bd_addr);
88*3deb3ec6SMatthias Ringwald 
89*3deb3ec6SMatthias Ringwald /**
90*3deb3ec6SMatthias Ringwald  * @brief Release the RFCOMM channel and the audio connection between the HF and the AG.
91*3deb3ec6SMatthias Ringwald  * TODO: trigger release of the audio connection
92*3deb3ec6SMatthias Ringwald  */
93*3deb3ec6SMatthias Ringwald void hfp_ag_release_service_level_connection(bd_addr_t bd_addr);
94*3deb3ec6SMatthias Ringwald 
95*3deb3ec6SMatthias Ringwald /**
96*3deb3ec6SMatthias Ringwald  * @brief Report Extended Audio Gateway Error result codes in the AG.
97*3deb3ec6SMatthias Ringwald  * Whenever there is an error relating to the functionality of the AG as a
98*3deb3ec6SMatthias Ringwald  * result of AT command, the AG shall send +CME ERROR:
99*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 0  - AG failure
100*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 1  - no connection to phone
101*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 3  - operation not allowed
102*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 4  - operation not supported
103*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 5  - PH-SIM PIN required
104*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 10 - SIM not inserted
105*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 11 - SIM PIN required
106*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 12 - SIM PUK required
107*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 13 - SIM failure
108*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 14 - SIM busy
109*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 16 - incorrect password
110*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 17 - SIM PIN2 required
111*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 18 - SIM PUK2 required
112*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 20 - memory full
113*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 21 - invalid index
114*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 23 - memory failure
115*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 24 - text string too long
116*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 25 - invalid characters in text string
117*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 26 - dial string too long
118*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 27 - invalid characters in dial string
119*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 30 - no network service
120*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 31 - network Timeout.
121*3deb3ec6SMatthias Ringwald  * - +CME ERROR: 32 - network not allowed – Emergency calls only
122*3deb3ec6SMatthias Ringwald  */
123*3deb3ec6SMatthias Ringwald void hfp_ag_report_extended_audio_gateway_error_result_code(bd_addr_t bd_addr, hfp_cme_error_t error);
124*3deb3ec6SMatthias Ringwald 
125*3deb3ec6SMatthias Ringwald /**
126*3deb3ec6SMatthias Ringwald  * @brief Report the change in AG's call status.
127*3deb3ec6SMatthias Ringwald  * Call status:
128*3deb3ec6SMatthias Ringwald  * - 0 = No calls (held or active)
129*3deb3ec6SMatthias Ringwald  * - 1 = Call is present (active or held)
130*3deb3ec6SMatthias Ringwald  */
131*3deb3ec6SMatthias Ringwald void hfp_ag_transfer_call_status(bd_addr_t bd_addr, hfp_call_status_t status);
132*3deb3ec6SMatthias Ringwald 
133*3deb3ec6SMatthias Ringwald /**
134*3deb3ec6SMatthias Ringwald  * @brief Report the change in AG's call setup status.
135*3deb3ec6SMatthias Ringwald  * Call setup status:
136*3deb3ec6SMatthias Ringwald  * - 0 = No call setup in progress
137*3deb3ec6SMatthias Ringwald  * - 1 = Incoming call setup in progress
138*3deb3ec6SMatthias Ringwald  * - 2 = Outgoing call setup in dialing state
139*3deb3ec6SMatthias Ringwald  * - 3 = Outgoing call setup in alerting state
140*3deb3ec6SMatthias Ringwald  */
141*3deb3ec6SMatthias Ringwald void hfp_ag_transfer_callsetup_status(bd_addr_t bd_addr, hfp_callsetup_status_t status);
142*3deb3ec6SMatthias Ringwald 
143*3deb3ec6SMatthias Ringwald /**
144*3deb3ec6SMatthias Ringwald  * @brief Report the change in AG's held call status.
145*3deb3ec6SMatthias Ringwald  * Held call status:
146*3deb3ec6SMatthias Ringwald  * - 0 = No calls held
147*3deb3ec6SMatthias Ringwald  * - 1 = Call is placed on hold or active/held calls are swapped
148*3deb3ec6SMatthias Ringwald  * - 2 = Call on hold, no active calls
149*3deb3ec6SMatthias Ringwald  */
150*3deb3ec6SMatthias Ringwald void hfp_ag_transfer_callheld_status(bd_addr_t bd_addr, hfp_callheld_status_t status);
151*3deb3ec6SMatthias Ringwald 
152*3deb3ec6SMatthias Ringwald /**
153*3deb3ec6SMatthias Ringwald  * @brief
154*3deb3ec6SMatthias Ringwald  */
155*3deb3ec6SMatthias Ringwald void hfp_ag_negotiate_codecs(bd_addr_t bd_addr);
156*3deb3ec6SMatthias Ringwald 
157*3deb3ec6SMatthias Ringwald void hfp_ag_establish_audio_connection(bd_addr_t bd_addr);
158*3deb3ec6SMatthias Ringwald 
159*3deb3ec6SMatthias Ringwald /**
160*3deb3ec6SMatthias Ringwald  * @brief
161*3deb3ec6SMatthias Ringwald  */
162*3deb3ec6SMatthias Ringwald void hfp_ag_release_audio_connection(bd_addr_t bd_addr);
163*3deb3ec6SMatthias Ringwald 
164*3deb3ec6SMatthias Ringwald 
165*3deb3ec6SMatthias Ringwald /* API_END */
166*3deb3ec6SMatthias Ringwald 
167*3deb3ec6SMatthias Ringwald #if defined __cplusplus
168*3deb3ec6SMatthias Ringwald }
169*3deb3ec6SMatthias Ringwald #endif
170*3deb3ec6SMatthias Ringwald 
171*3deb3ec6SMatthias Ringwald #endif