blob: 0882a663a41d67f5296f9e638579a028bc9be3db [file] [log] [blame]
b.liud440f9f2025-04-18 10:44:31 +08001/*-----------------------------------------------------------------------------------------------*/
2/**
3 @file ql_voice.h
4 @brief Voice service API.
5*/
6/*-----------------------------------------------------------------------------------------------*/
7
8/*-------------------------------------------------------------------------------------------------
9 Copyright (c) 2019 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
10 Quectel Wireless Solution Proprietary and Confidential.
11-------------------------------------------------------------------------------------------------*/
12
13/*-------------------------------------------------------------------------------------------------
14 EDIT HISTORY
15 This section contains comments describing changes made to the file.
16 Notice that changes are listed in reverse chronological order.
17 $Header: $
18 when who what, where, why
19 -------- --- ----------------------------------------------------------
20 20210622 Rambo.shan Added Voice DSDA API.
21 20210203 Rambo.shan Added Voice bind API for DSDA.
22 20210104 Rambo.shan Added DTMF event indication.
23 20200928 Rambo.shan Added eCall set option of T3.
24 20200907 Rambo.shan Added SETUP voice state.
25 20200622 Rambo.shan Add eCall auto answer function
26 20191225 solomon.cui Modify fucntion description.
27 20191111 solomon.cui Add eCall APIs.
28 20190815 solomon.cui Add service type for sending message.
29 20190625 solomon.cui Created.
30-------------------------------------------------------------------------------------------------*/
31#include <stdint.h>
32
33#define QL_VOICE_MAX_PHONE_NUMBER (82)
34#define QL_VOICE_MAX_RECORDS (8)
35#define QL_VOICE_MAX_DTMF_LENGTH (20)
36#define QL_VOICE_MAX_FW_DETAIL_LENGTH (13)
37#define QL_VOICE_MAX_ECALL_MSD (140)
38
39typedef enum
40{
41 QL_VOICE_STATE_INCOMING = 0x0000, /**< Call is incoming. */
42 QL_VOICE_STATE_DIALING = 0x0001, /**< Dialing state. */
43 QL_VOICE_STATE_ALERTING = 0x0002, /**< Alterting. */
44 QL_VOICE_STATE_ACTIVE = 0x0003, /**< Call is active. */
45 QL_VOICE_STATE_HOLDING = 0x0004, /**< Call is on hold. */
46 QL_VOICE_STATE_END = 0x0005, /**< Call is disconnected. */
47 QL_VOICE_STATE_WAITING = 0x0006, /**< Call is waiting. */
48 QL_VOICE_STATE_SETUP = 0x0007, /**< MT Call is in Setup state in 3GPP. */
49} QL_VOICE_STATE_E;
50
51typedef enum
52{
53 QL_VOICE_TECH_NONE = 0, /**< None. */
54 QL_VOICE_TECH_3GPP = 1, /**< 3GPP. */
55 QL_VOICE_TECH_3GPP2 = 2, /**< 3GPP2. */
56} QL_VOICE_TECH_E;
57
58typedef enum
59{
60 QL_VOICE_DIR_MO = 0, /**< Mobile originated call */
61 QL_VOICE_DIR_MT = 1, /**< Mobile terminated call */
62} QL_VOICE_DIR_E;
63
64typedef enum
65{
66 VOICE_CALL_EVENT,
67 VOICE_MUTE_EVENT,
68 VOICE_DTMF_EVENT,
69 VOICE_ECALL_EVENT,
70 VOICE_ECALL_STATUS,
71} VOICE_EVENT_E;
72
73typedef enum
74{
75 QL_VOICE_END_REASON_NONE = 0,
76 QL_VOICE_END_REASON_OFFLINE = 1,
77 QL_VOICE_END_REASON_CDMA_LOCK = 2,
78 QL_VOICE_END_REASON_NO_SRV = 3,
79 QL_VOICE_END_REASON_FADE = 4,
80 QL_VOICE_END_REASON_INTERCEPT = 5,
81 QL_VOICE_END_REASON_REORDER = 6,
82 QL_VOICE_END_REASON_REL_NORMAL = 7,
83 QL_VOICE_END_REASON_REL_SO_REJ = 8,
84 QL_VOICE_END_REASON_INCOM_CALL = 9,
85 QL_VOICE_END_REASON_ALERT_STOP = 10,
86 QL_VOICE_END_REASON_CLIENT_END = 11,
87 QL_VOICE_END_REASON_ACTIVATION = 12,
88 QL_VOICE_END_REASON_MC_ABORT = 13,
89 QL_VOICE_END_REASON_MAX_ACCESS_PROBE = 14,
90 QL_VOICE_END_REASON_PSIST_N = 15,
91 QL_VOICE_END_REASON_UIM_NOT_PRESENT = 16,
92 QL_VOICE_END_REASON_ACC_IN_PROG = 17,
93 QL_VOICE_END_REASON_ACC_FAIL = 18,
94 QL_VOICE_END_REASON_RETRY_ORDER = 19,
95 QL_VOICE_END_REASON_CCS_NOT_SUPPORTED_BY_BS = 20,
96 QL_VOICE_END_REASON_NO_RESPONSE_FROM_BS = 21,
97 QL_VOICE_END_REASON_REJECTED_BY_BS = 22,
98 QL_VOICE_END_REASON_INCOMPATIBLE = 23,
99 QL_VOICE_END_REASON_ACCESS_BLOCK = 24,
100 QL_VOICE_END_REASON_ALREADY_IN_TC = 25,
101 QL_VOICE_END_REASON_EMERGENCY_FLASHED = 26,
102 QL_VOICE_END_REASON_USER_CALL_ORIG_DURING_GPS = 27,
103 QL_VOICE_END_REASON_USER_CALL_ORIG_DURING_SMS = 28,
104 QL_VOICE_END_REASON_USER_CALL_ORIG_DURING_DATA = 29,
105 QL_VOICE_END_REASON_REDIR_OR_HANDOFF = 30,
106 QL_VOICE_END_REASON_ACCESS_BLOCK_ALL = 31,
107 QL_VOICE_END_REASON_OTASP_SPC_ERR = 32,
108 QL_VOICE_END_REASON_IS707B_MAX_ACC = 33,
109 QL_VOICE_END_REASON_ACC_FAIL_REJ_ORD = 34,
110 QL_VOICE_END_REASON_ACC_FAIL_RETRY_ORD = 35,
111 QL_VOICE_END_REASON_TIMEOUT_T42 = 36,
112 QL_VOICE_END_REASON_TIMEOUT_T40 = 37,
113 QL_VOICE_END_REASON_SRV_INIT_FAIL = 38,
114 QL_VOICE_END_REASON_T50_EXP = 39,
115 QL_VOICE_END_REASON_T51_EXP = 40,
116 QL_VOICE_END_REASON_RL_ACK_TIMEOUT = 41,
117 QL_VOICE_END_REASON_BAD_FL = 42,
118 QL_VOICE_END_REASON_TRM_REQ_FAIL = 43,
119 QL_VOICE_END_REASON_TIMEOUT_T41 = 44,
120 QL_VOICE_END_REASON_INCOM_REJ = 45,
121 QL_VOICE_END_REASON_SETUP_REJ = 46,
122 QL_VOICE_END_REASON_NETWORK_END = 47,
123 QL_VOICE_END_REASON_NO_FUNDS = 48,
124 QL_VOICE_END_REASON_NO_GW_SRV = 49,
125 QL_VOICE_END_REASON_NO_CDMA_SRV = 50,
126 QL_VOICE_END_REASON_NO_FULL_SRV = 51,
127 QL_VOICE_END_REASON_MAX_PS_CALLS = 52,
128 QL_VOICE_END_REASON_UNKNOWN_SUBSCRIBER = 53,
129 QL_VOICE_END_REASON_ILLEGAL_SUBSCRIBER = 54,
130 QL_VOICE_END_REASON_BEARER_SERVICE_NOT_PROVISIONED = 55,
131 QL_VOICE_END_REASON_TELE_SERVICE_NOT_PROVISIONED = 56,
132 QL_VOICE_END_REASON_ILLEGAL_EQUIPMENT = 57,
133 QL_VOICE_END_REASON_CALL_BARRED = 58,
134 QL_VOICE_END_REASON_ILLEGAL_SS_OPERATION = 59,
135 QL_VOICE_END_REASON_SS_ERROR_STATUS = 60,
136 QL_VOICE_END_REASON_SS_NOT_AVAILABLE = 61,
137 QL_VOICE_END_REASON_SS_SUBSCRIPTION_VIOLATION = 62,
138 QL_VOICE_END_REASON_SS_INCOMPATIBILITY = 63,
139 QL_VOICE_END_REASON_FACILITY_NOT_SUPPORTED = 64,
140 QL_VOICE_END_REASON_ABSENT_SUBSCRIBER = 65,
141 QL_VOICE_END_REASON_SHORT_TERM_DENIAL = 66,
142 QL_VOICE_END_REASON_LONG_TERM_DENIAL = 67,
143 QL_VOICE_END_REASON_SYSTEM_FAILURE = 68,
144 QL_VOICE_END_REASON_DATA_MISSING = 69,
145 QL_VOICE_END_REASON_UNEXPECTED_DATA_VALUE = 70,
146 QL_VOICE_END_REASON_PWD_REGISTRATION_FAILURE = 71,
147 QL_VOICE_END_REASON_NEGATIVE_PWD_CHECK = 72,
148 QL_VOICE_END_REASON_NUM_OF_PWD_ATTEMPTS_VIOLATION = 73,
149 QL_VOICE_END_REASON_POSITION_METHOD_FAILURE = 74,
150 QL_VOICE_END_REASON_UNKNOWN_ALPHABET = 75,
151 QL_VOICE_END_REASON_USSD_BUSY = 76,
152 QL_VOICE_END_REASON_REJECTED_BY_USER = 77,
153 QL_VOICE_END_REASON_REJECTED_BY_NETWORK = 78,
154 QL_VOICE_END_REASON_DEFLECTION_TO_SERVED_SUBSCRIBER = 79,
155 QL_VOICE_END_REASON_SPECIAL_SERVICE_CODE = 80,
156 QL_VOICE_END_REASON_INVALID_DEFLECTED_TO_NUMBER = 81,
157 QL_VOICE_END_REASON_MPTY_PARTICIPANTS_EXCEEDED = 82,
158 QL_VOICE_END_REASON_RESOURCES_NOT_AVAILABLE = 83,
159 QL_VOICE_END_REASON_UNASSIGNED_NUMBER = 84,
160 QL_VOICE_END_REASON_NO_ROUTE_TO_DESTINATION = 85,
161 QL_VOICE_END_REASON_CHANNEL_UNACCEPTABLE = 86,
162 QL_VOICE_END_REASON_OPERATOR_DETERMINED_BARRING = 87,
163 QL_VOICE_END_REASON_NORMAL_CALL_CLEARING = 88,
164 QL_VOICE_END_REASON_USER_BUSY = 89,
165 QL_VOICE_END_REASON_NO_USER_RESPONDING = 90,
166 QL_VOICE_END_REASON_USER_ALERTING_NO_ANSWER = 91,
167 QL_VOICE_END_REASON_CALL_REJECTED = 92,
168 QL_VOICE_END_REASON_NUMBER_CHANGED = 93,
169 QL_VOICE_END_REASON_PREEMPTION = 94,
170 QL_VOICE_END_REASON_DESTINATION_OUT_OF_ORDER = 95,
171 QL_VOICE_END_REASON_INVALID_NUMBER_FORMAT = 96,
172 QL_VOICE_END_REASON_FACILITY_REJECTED = 97,
173 QL_VOICE_END_REASON_RESP_TO_STATUS_ENQUIRY = 98,
174 QL_VOICE_END_REASON_NORMAL_UNSPECIFIED = 99,
175 QL_VOICE_END_REASON_NO_CIRCUIT_OR_CHANNEL_AVAILABLE = 100,
176 QL_VOICE_END_REASON_NETWORK_OUT_OF_ORDER = 101,
177 QL_VOICE_END_REASON_TEMPORARY_FAILURE = 102,
178 QL_VOICE_END_REASON_SWITCHING_EQUIPMENT_CONGESTION = 103,
179 QL_VOICE_END_REASON_ACCESS_INFORMATION_DISCARDED = 104,
180 QL_VOICE_END_REASON_REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE = 105,
181 QL_VOICE_END_REASON_RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 106,
182 QL_VOICE_END_REASON_QOS_UNAVAILABLE = 107,
183 QL_VOICE_END_REASON_REQUESTED_FACILITY_NOT_SUBSCRIBED = 108,
184 QL_VOICE_END_REASON_INCOMING_CALLS_BARRED_WITHIN_CUG = 109,
185 QL_VOICE_END_REASON_BEARER_CAPABILITY_NOT_AUTH = 110,
186 QL_VOICE_END_REASON_BEARER_CAPABILITY_UNAVAILABLE = 111,
187 QL_VOICE_END_REASON_SERVICE_OPTION_NOT_AVAILABLE = 112,
188 QL_VOICE_END_REASON_ACM_LIMIT_EXCEEDED = 113,
189 QL_VOICE_END_REASON_BEARER_SERVICE_NOT_IMPLEMENTED = 114,
190 QL_VOICE_END_REASON_REQUESTED_FACILITY_NOT_IMPLEMENTED = 115,
191 QL_VOICE_END_REASON_ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 116,
192 QL_VOICE_END_REASON_SERVICE_OR_OPTION_NOT_IMPLEMENTED = 117,
193 QL_VOICE_END_REASON_INVALID_TRANSACTION_IDENTIFIER = 118,
194 QL_VOICE_END_REASON_USER_NOT_MEMBER_OF_CUG = 119,
195 QL_VOICE_END_REASON_INCOMPATIBLE_DESTINATION = 120,
196 QL_VOICE_END_REASON_INVALID_TRANSIT_NW_SELECTION = 121,
197 QL_VOICE_END_REASON_SEMANTICALLY_INCORRECT_MESSAGE = 122,
198 QL_VOICE_END_REASON_INVALID_MANDATORY_INFORMATION = 123,
199 QL_VOICE_END_REASON_MESSAGE_TYPE_NON_IMPLEMENTED = 124,
200 QL_VOICE_END_REASON_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 125,
201 QL_VOICE_END_REASON_INFORMATION_ELEMENT_NON_EXISTENT = 126,
202 QL_VOICE_END_REASON_CONDITONAL_IE_ERROR = 127,
203 QL_VOICE_END_REASON_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 128,
204 QL_VOICE_END_REASON_RECOVERY_ON_TIMER_EXPIRED = 129,
205 QL_VOICE_END_REASON_PROTOCOL_ERROR_UNSPECIFIED = 130,
206 QL_VOICE_END_REASON_INTERWORKING_UNSPECIFIED = 131,
207 QL_VOICE_END_REASON_OUTGOING_CALLS_BARRED_WITHIN_CUG = 132,
208 QL_VOICE_END_REASON_NO_CUG_SELECTION = 133,
209 QL_VOICE_END_REASON_UNKNOWN_CUG_INDEX = 134,
210 QL_VOICE_END_REASON_CUG_INDEX_INCOMPATIBLE = 135,
211 QL_VOICE_END_REASON_CUG_CALL_FAILURE_UNSPECIFIED = 136,
212 QL_VOICE_END_REASON_CLIR_NOT_SUBSCRIBED = 137,
213 QL_VOICE_END_REASON_CCBS_POSSIBLE = 138,
214 QL_VOICE_END_REASON_CCBS_NOT_POSSIBLE = 139,
215 QL_VOICE_END_REASON_IMSI_UNKNOWN_IN_HLR = 140,
216 QL_VOICE_END_REASON_ILLEGAL_MS = 141,
217 QL_VOICE_END_REASON_IMSI_UNKNOWN_IN_VLR = 142,
218 QL_VOICE_END_REASON_IMEI_NOT_ACCEPTED = 143,
219 QL_VOICE_END_REASON_ILLEGAL_ME = 144,
220 QL_VOICE_END_REASON_PLMN_NOT_ALLOWED = 145,
221 QL_VOICE_END_REASON_LOCATION_AREA_NOT_ALLOWED = 146,
222 QL_VOICE_END_REASON_ROAMING_NOT_ALLOWED_IN_THIS_LOCATION_AREA = 147,
223 QL_VOICE_END_REASON_NO_SUITABLE_CELLS_IN_LOCATION_AREA = 148,
224 QL_VOICE_END_REASON_NETWORK_FAILURE = 149,
225 QL_VOICE_END_REASON_MAC_FAILURE = 150,
226 QL_VOICE_END_REASON_SYNCH_FAILURE = 151,
227 QL_VOICE_END_REASON_NETWORK_CONGESTION = 152,
228 QL_VOICE_END_REASON_GSM_AUTHENTICATION_UNACCEPTABLE = 153,
229 QL_VOICE_END_REASON_SERVICE_NOT_SUBSCRIBED = 154,
230 QL_VOICE_END_REASON_SERVICE_TEMPORARILY_OUT_OF_ORDER = 155,
231 QL_VOICE_END_REASON_CALL_CANNOT_BE_IDENTIFIED = 156,
232 QL_VOICE_END_REASON_INCORRECT_SEMANTICS_IN_MESSAGE = 157,
233 QL_VOICE_END_REASON_MANDATORY_INFORMATION_INVALID = 158,
234 QL_VOICE_END_REASON_ACCESS_STRATUM_FAILURE = 159,
235 QL_VOICE_END_REASON_INVALID_SIM = 160,
236 QL_VOICE_END_REASON_WRONG_STATE = 161,
237 QL_VOICE_END_REASON_ACCESS_CLASS_BLOCKED = 162,
238 QL_VOICE_END_REASON_NO_RESOURCES = 163,
239 QL_VOICE_END_REASON_INVALID_USER_DATA = 164,
240 QL_VOICE_END_REASON_TIMER_T3230_EXPIRED = 165,
241 QL_VOICE_END_REASON_NO_CELL_AVAILABLE = 166,
242 QL_VOICE_END_REASON_ABORT_MSG_RECEIVED = 167,
243 QL_VOICE_END_REASON_RADIO_LINK_LOST = 168,
244 QL_VOICE_END_REASON_TIMER_T303_EXPIRED = 169,
245 QL_VOICE_END_REASON_CNM_MM_REL_PENDING = 170,
246 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_RR_REL_IND = 171,
247 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_RR_RANDOM_ACCESS_FAILURE = 172,
248 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_RRC_REL_IND = 173,
249 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_RRC_CLOSE_SESSION_IND = 174,
250 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_RRC_OPEN_SESSION_FAILURE = 175,
251 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_LOW_LEVEL_FAIL = 176,
252 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_LOW_LEVEL_FAIL_REDIAL_NOT_ALLOWED = 177,
253 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_LOW_LEVEL_IMMED_RETRY = 178,
254 QL_VOICE_END_REASON_ACCESS_STRATUM_REJ_ABORT_RADIO_UNAVAILABLE = 179,
255 QL_VOICE_END_REASON_SERVICE_OPTION_NOT_SUPPORTED = 180,
256 QL_VOICE_END_REASON_AS_REJ_LRRC_UL_DATA_CNF_FAILURE_TXN = 181,
257 QL_VOICE_END_REASON_AS_REJ_LRRC_UL_DATA_CNF_FAILURE_HO = 182,
258 QL_VOICE_END_REASON_AS_REJ_LRRC_UL_DATA_CNF_FAILURE_CONN_REL = 183,
259 QL_VOICE_END_REASON_AS_REJ_LRRC_UL_DATA_CNF_FAILURE_RLF = 184,
260 QL_VOICE_END_REASON_AS_REJ_LRRC_UL_DATA_CNF_FAILURE_CTRL_NOT_CONN = 185,
261 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_SUCCESS = 186,
262 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE = 187,
263 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_ABORTED = 188,
264 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_ACCESS_BARRED = 189,
265 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_CELL_RESEL = 190,
266 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_CONFIG_FAILURE = 191,
267 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_TIMER_EXPIRED = 192,
268 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_LINK_FAILURE = 193,
269 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_NOT_CAMPED = 194,
270 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_SI_FAILURE = 195,
271 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_EST_FAILURE_CONN_REJECT = 196,
272 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_NORMAL = 197,
273 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_RLF = 198,
274 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_CRE_FAILURE = 199,
275 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_OOS_DURING_CRE = 200,
276 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_ABORTED = 201,
277 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_SIB_READ_ERROR = 202,
278 QL_VOICE_END_REASON_AS_REJ_LRRC_CONN_REL_ABORTED_IRAT_SUCCESS = 203,
279 QL_VOICE_END_REASON_AS_REJ_LRRC_RADIO_LINK_FAILURE = 204,
280 QL_VOICE_END_REASON_AS_REJ_DETACH_WITH_REATTACH_LTE_NW_DETACH = 205,
281 QL_VOICE_END_REASON_AS_REJ_DETACH_WITH_OUT_REATTACH_LTE_NW_DETACH = 206,
282 QL_VOICE_END_REASON_BAD_REQ_WAIT_INVITE = 207,
283 QL_VOICE_END_REASON_BAD_REQ_WAIT_REINVITE = 208,
284 QL_VOICE_END_REASON_INVALID_REMOTE_URI = 209,
285 QL_VOICE_END_REASON_REMOTE_UNSUPP_MEDIA_TYPE = 210,
286 QL_VOICE_END_REASON_PEER_NOT_REACHABLE = 211,
287 QL_VOICE_END_REASON_NETWORK_NO_RESP_TIME_OUT = 212,
288 QL_VOICE_END_REASON_NETWORK_NO_RESP_HOLD_FAIL = 213,
289 QL_VOICE_END_REASON_DATA_CONNECTION_LOST = 214,
290 QL_VOICE_END_REASON_UPGRADE_DOWNGRADE_REJ = 215,
291 QL_VOICE_END_REASON_SIP_403_FORBIDDEN = 216,
292 QL_VOICE_END_REASON_NO_NETWORK_RESP = 217,
293 QL_VOICE_END_REASON_UPGRADE_DOWNGRADE_FAILED = 218,
294 QL_VOICE_END_REASON_UPGRADE_DOWNGRADE_CANCELLED = 219,
295 QL_VOICE_END_REASON_SSAC_REJECT = 220,
296 QL_VOICE_END_REASON_THERMAL_EMERGENCY = 221,
297 QL_VOICE_END_REASON_1XCSFB_SOFT_FAILURE = 222,
298 QL_VOICE_END_REASON_1XCSFB_HARD_FAILURE = 223,
299 QL_VOICE_END_REASON_CONNECTION_EST_FAILURE = 224,
300 QL_VOICE_END_REASON_CONNECTION_FAILURE = 225,
301 QL_VOICE_END_REASON_RRC_CONN_REL_NO_MT_SETUP = 226,
302 QL_VOICE_END_REASON_ESR_FAILURE = 227,
303 QL_VOICE_END_REASON_MT_CSFB_NO_RESPONSE_FROM_NW = 228,
304 QL_VOICE_END_REASON_BUSY_EVERYWHERE = 229,
305 QL_VOICE_END_REASON_ANSWERED_ELSEWHERE = 230,
306 QL_VOICE_END_REASON_RLF_DURING_CC_DISCONNECT = 231,
307 QL_VOICE_END_REASON_TEMP_REDIAL_ALLOWED = 232,
308 QL_VOICE_END_REASON_PERM_REDIAL_NOT_NEEDED = 233,
309 QL_VOICE_END_REASON_MERGED_TO_CONFERENCE = 234,
310 QL_VOICE_END_REASON_LOW_BATTERY = 235,
311 QL_VOICE_END_REASON_CALL_DEFLECTED = 236,
312 QL_VOICE_END_REASON_RTP_RTCP_TIMEOUT = 237,
313 QL_VOICE_END_REASON_RINGING_RINGBACK_TIMEOUT = 238,
314 QL_VOICE_END_REASON_REG_RESTORATION = 239,
315 QL_VOICE_END_REASON_CODEC_ERROR = 240,
316 QL_VOICE_END_REASON_UNSUPPORTED_SDP = 241,
317 QL_VOICE_END_REASON_RTP_FAILURE = 242,
318 QL_VOICE_END_REASON_QoS_FAILURE = 243,
319 QL_VOICE_END_REASON_MULTIPLE_CHOICES = 244,
320 QL_VOICE_END_REASON_MOVED_PERMANENTLY = 245,
321 QL_VOICE_END_REASON_MOVED_TEMPORARILY = 246,
322 QL_VOICE_END_REASON_USE_PROXY = 247,
323 QL_VOICE_END_REASON_ALTERNATE_SERVICE = 248,
324 QL_VOICE_END_REASON_ALTERNATE_EMERGENCY_CALL = 249,
325 QL_VOICE_END_REASON_UNAUTHORIZED = 250,
326 QL_VOICE_END_REASON_PAYMENT_REQUIRED = 251,
327 QL_VOICE_END_REASON_METHOD_NOT_ALLOWED = 252,
328 QL_VOICE_END_REASON_NOT_ACCEPTABLE = 253,
329 QL_VOICE_END_REASON_PROXY_AUTHENTICATION_REQUIRED = 254,
330 QL_VOICE_END_REASON_GONE = 255,
331 QL_VOICE_END_REASON_REQUEST_ENTITY_TOO_LARGE = 256,
332 QL_VOICE_END_REASON_REQUEST_URI_TOO_LARGE = 257,
333 QL_VOICE_END_REASON_UNSUPPORTED_URI_SCHEME = 258,
334 QL_VOICE_END_REASON_BAD_EXTENSION = 259,
335 QL_VOICE_END_REASON_EXTENSION_REQUIRED = 260,
336 QL_VOICE_END_REASON_INTERVAL_TOO_BRIEF = 261,
337 QL_VOICE_END_REASON_CALL_OR_TRANS_DOES_NOT_EXIST = 262,
338 QL_VOICE_END_REASON_LOOP_DETECTED = 263,
339 QL_VOICE_END_REASON_TOO_MANY_HOPS = 264,
340 QL_VOICE_END_REASON_ADDRESS_INCOMPLETE = 265,
341 QL_VOICE_END_REASON_AMBIGUOUS = 266,
342 QL_VOICE_END_REASON_REQUEST_TERMINATED = 267,
343 QL_VOICE_END_REASON_NOT_ACCEPTABLE_HERE = 268,
344 QL_VOICE_END_REASON_REQUEST_PENDING = 269,
345 QL_VOICE_END_REASON_UNDECIPHERABLE = 270,
346 QL_VOICE_END_REASON_SERVER_INTERNAL_ERROR = 271,
347 QL_VOICE_END_REASON_NOT_IMPLEMENTED = 272,
348 QL_VOICE_END_REASON_BAD_GATEWAY = 273,
349 QL_VOICE_END_REASON_SERVER_TIME_OUT = 274,
350 QL_VOICE_END_REASON_VERSION_NOT_SUPPORTED = 275,
351 QL_VOICE_END_REASON_MESSAGE_TOO_LARGE = 276,
352 QL_VOICE_END_REASON_DOES_NOT_EXIST_ANYWHERE = 277,
353 QL_VOICE_END_REASON_SESS_DESCR_NOT_ACCEPTABLE = 278,
354 QL_VOICE_END_REASON_SRVCC_END_CALL = 279,
355 QL_VOICE_END_REASON_INTERNAL_ERROR = 280,
356 QL_VOICE_END_REASON_SERVER_UNAVAILABLE = 281,
357 QL_VOICE_END_REASON_PRECONDITION_FAILURE = 282,
358 QL_VOICE_END_REASON_DRVCC_IN_PROG = 283,
359 QL_VOICE_END_REASON_DRVCC_END_CALL = 284,
360 QL_VOICE_END_REASON_CS_HARD_FAILURE = 285,
361 QL_VOICE_END_REASON_CS_ACQ_FAILURE = 286,
362 QL_VOICE_END_REASON_FALLBACK_TO_CS = 287,
363 QL_VOICE_END_REASON_DEAD_BATTERY = 288,
364 QL_VOICE_END_REASON_HO_NOT_FEASIBLE = 289,
365 QL_VOICE_END_REASON_PDN_DISCONNECTED = 290,
366 QL_VOICE_END_REASON_REJECTED_ELSEWHERE = 291,
367 QL_VOICE_END_REASON_CALL_PULLED = 292,
368 QL_VOICE_END_REASON_CALL_PULL_OUT_OF_SYNC = 293,
369 QL_VOICE_END_REASON_HOLD_RESUME_FAILED = 294,
370 QL_VOICE_END_REASON_HOLD_RESUME_CANCELED = 295,
371 QL_VOICE_END_REASON_REINVITE_COLLISION = 296,
372 QL_VOICE_END_REASON_1XCSFB_MSG_INVAILD = 297,
373 QL_VOICE_END_REASON_1XCSFB_MSG_IGNORE = 298,
374 QL_VOICE_END_REASON_1XCSFB_FAIL_ACQ_FAIL = 299,
375 QL_VOICE_END_REASON_1XCSFB_FAIL_CALL_REL_REL_ORDER = 300,
376 QL_VOICE_END_REASON_1XCSFB_FAIL_CALL_REL_REORDER = 301,
377 QL_VOICE_END_REASON_1XCSFB_FAIL_CALL_REL_INTERCEPT_ORDER = 302,
378 QL_VOICE_END_REASON_1XCSFB_FAIL_CALL_REL_NORMAL = 303,
379 QL_VOICE_END_REASON_1XCSFB_FAIL_CALL_REL_SO_REJ = 304,
380 QL_VOICE_END_REASON_1XCSFB_FAIL_CALL_REL_OTASP_SPC_ERR = 305,
381 QL_VOICE_END_REASON_1XCSFB_FAILURE_SRCH_TT_FAIL = 306,
382 QL_VOICE_END_REASON_1XCSFB_FAILURE_TCH_INIT_FAIL = 307,
383 QL_VOICE_END_REASON_1XCSFB_FAILURE_FAILURE_USER_CALL_END = 308,
384 QL_VOICE_END_REASON_1XCSFB_FAILURE_FAILURE_RETRY_EXHAUST = 309,
385 QL_VOICE_END_REASON_1XCSFB_FAILURE_FAILURE_CALL_REL_REG_REJ = 310,
386 QL_VOICE_END_REASON_1XCSFB_FAILURE_FAILURE_CALL_REL_NW_REL_ODR = 311,
387 QL_VOICE_END_REASON_1XCSFB_HO_FAILURE = 312,
388 QL_VOICE_END_REASON_EMM_REJ_TIMER_T3417_EXT_EXP = 313,
389 QL_VOICE_END_REASON_EMM_REJ_TIMER_T3417_EXP = 314,
390 QL_VOICE_END_REASON_EMM_REJ_SERVICE_REQ_FAILURE_LTE_NW_REJECT = 315,
391 QL_VOICE_END_REASON_EMM_REJ_SERVICE_REQ_FAILURE_CS_DOMAIN_NOT_AVAILABLE = 316,
392 QL_VOICE_END_REASON_EMM_REJ = 317,
393} QL_VOICE_END_REASON_E;
394
395typedef struct
396{
397 uint32_t id;
398 char number[QL_VOICE_MAX_PHONE_NUMBER + 1];
399 QL_VOICE_STATE_E state;
400 QL_VOICE_TECH_E tech;
401 QL_VOICE_DIR_E dir;
402 QL_VOICE_END_REASON_E end_reason;
403} ql_voice_record_t;
404
405typedef struct
406{
407 int len; /**< length of records */
408 ql_voice_record_t records[QL_VOICE_MAX_RECORDS];
409} ql_voice_record_array_t;
410
411typedef void (*ql_voice_call_cb_f)(ql_voice_record_array_t *p_arr);
412
413typedef enum
414{
415 QL_VOICE_DTMF_EVENT_REV_BURST = 0x00, /**< Sends a CDMA-burst DTMF \n */
416 QL_VOICE_DTMF_EVENT_REV_START_CONT = 0x01, /**< Starts a continuous DTMF tone \n */
417 QL_VOICE_DTMF_EVENT_REV_STOP_CONT = 0x02, /**< Stops a continuous DTMF tone \n */
418 QL_VOICE_DTMF_EVENT_FWD_BURST = 0x03, /**< Received a CDMA-burst DTMF message \n */
419 QL_VOICE_DTMF_EVENT_FWD_START_CONT = 0x04, /**< Received a start-continuous DTMF tone order \n */
420 QL_VOICE_DTMF_EVENT_FWD_STOP_CONT = 0x05, /**< Received a stop-continuous DTMF tone order \n */
421 QL_VOICE_DTMF_EVENT_IP_INCOMING_DTMF_START = 0x06, /**< Received an IP-start continuous DTMF message \n */
422 QL_VOICE_DTMF_EVENT_IP_INCOMING_DTMF_STOP = 0x07, /**< Received an IP-stop continuous DTMF message */
423} QL_VOICE_DTMF_EVENT_E;
424
425/** voice dtmf event callback */
426typedef void (*ql_voice_dtmf_cb_f)(uint32_t id, QL_VOICE_DTMF_EVENT_E event,
427 char *digits, int len); /**< len: length of digits */
428
429/** forwarding condition */
430typedef enum
431{
432 QL_VOICE__FW_COND_UNCONDITIONALLY = 0, /**< Unconditional call forwarding. */
433 QL_VOICE__FW_COND_MOBILEBUSY = 1, /**< Forward when the mobile device is busy. */
434 QL_VOICE__FW_COND_NOREPLY = 2, /**< Forward when there is no reply. */
435 QL_VOICE__FW_COND_UNREACHABLE = 3, /**< Forward when the call is unreachable. */
436 QL_VOICE__FW_COND_ALLFORWARDING = 4, /**< All forwarding(0-3).*/
437 QL_VOICE__FW_COND_ALLCONDITIONAL = 5, /**< All conditional forwarding(1-3). */
438} QL_VOICE_FW_COND_E;
439
440typedef enum
441{
442 QL_VOICE_FW_TYPE_VOICE = 0, /**< Forwarding Voice. */
443 QL_VOICE_FW_TYPE_DATA = 1, /**< Forwarding Data. */
444 QL_VOICE_FW_TYPE_VOICE_DATA = 2, /**< Forwarding voice and data. */
445} QL_VOICE_FW_TYPE_E;
446
447/** */
448typedef enum {
449 QL_VOICE_PRIMARY_SUBSCRIPTION = 0,
450 QL_VOICE_SECONDARY_SUBSCRIPTION = 1,
451} QL_VOICE_SUBSCRIPTION_E;
452
453typedef struct
454{
455 int enabled;
456 int len; /**< length of details */
457 struct {
458 QL_VOICE_FW_TYPE_E type;
459 char number[QL_VOICE_MAX_PHONE_NUMBER + 1];
460 } details[QL_VOICE_MAX_FW_DETAIL_LENGTH];
461} ql_voice_fw_status_t;
462
463typedef enum
464{
465 QL_VOICE_ECALL_TYPE_TEST = 1, /**< Test eCall */
466 QL_VOICE_ECALL_TYPE_EMERGENCY = 2, /**< Emergency eCall */
467 QL_VOICE_ECALL_TYPE_RECONFIG = 3, /**< Reconfig eCall */
468} QL_VOICE_ECALL_TYPE_E;
469
470typedef struct
471{
472 uint32_t msd_len; /**< Length of Minimum Set of Data */
473 uint8_t msd[QL_VOICE_MAX_ECALL_MSD]; /**< Minimum Set of Data */
474 QL_VOICE_ECALL_TYPE_E type; /**< eCall type */
475 int auto_trigger; /**< 0 - Manually trigger eCall
476 1 - Automatically trigger eCall */
477 char test_number[QL_VOICE_MAX_PHONE_NUMBER]; /**< Test number */
478} ql_voice_ecall_info_t;
479
480/** eCall state */
481typedef enum {
482 QL_VOICE_ECALL_STATE_NONE = -1,
483 QL_VOICE_ECALL_STATE_INACTIVE = 0,
484 QL_VOICE_ECALL_STATE_ORIGINATING_CALL = 1,
485 QL_VOICE_ECALL_STATE_IN_CALL_TRANSMITTING = 2, /**< ECALL APP TRANSMITTING */
486 QL_VOICE_ECALL_STATE_WAITING_FOR_AL_ACK = 3,
487 QL_VOICE_ECALL_STATE_IN_CALL = 4,
488 QL_VOICE_ECALL_STATE_IDLE_ALLOW_MT_ECALL = 5,
489} QL_VOICE_ECALL_STATE_E;
490
491/** eCall mode */
492typedef enum {
493 QL_VOICE_ECALL_MODE_NORMAL = 0, /**< eCall enabled normal mode. */
494 QL_VOICE_ECALL_MODE_ONLY = 1, /**< eCall-only mode. */
495 QL_VOICE_ECALL_MODE_DEFAULT = 2,
496} QL_VOICE_ECALL_MODE_E;
497
498/** eCall configuration */
499typedef struct
500{
501 uint8_t enable; /**< Enable or disable ecall: 0 -- Disable; 1 -- Enable */
502 uint8_t voice_mute; /**< Enable or disable to mute IVS speaker in MSD
503 0 - Disable to mute IVS speaker automatical in MSD transmission
504 1 - Enable to mute IVS speaker automatical in MSD transmission */
505 QL_VOICE_ECALL_MODE_E mode; /**< The Ecall mode. */
506 uint8_t report_event; /**< Enable or disable to report ecall event info.
507 0 - Disable;
508 1 - Enable */
509 uint16_t start_timer; /**< The timer of IVS waiting for "START". T5 */
510 uint16_t hack_timer; /**< The timer of IVS waiting for "HACK". T6 */
511 uint16_t trans_timer; /**< The timer of MSD transmission. T7 */
512 uint8_t fail_redial; /**< The dial fail times. */
513 uint8_t drop_redial; /**< The ecall abnormal disconnenct redial times. */
514 uint16_t cleardown_timer; /**< The timer of IVS waiting for "ClearDown". T2 */
515 uint16_t init_timer; /**< The timer of IVS waiting for "InitIATION". T3 */
516 uint16_t nad_reg_timer; /**< The timer of IVS waiting for "NAD Registration". T9*/
517 uint16_t nad_dereg_timer; /**< The timer of IVS waiting for "NAD Deregistration". T10*/
518 uint8_t standard; /**< The ecall system standard.
519 0 - EU;
520 1 - ERA_GLONASS */
521 uint16_t era_glonass_redial; /**< The timer of era glonass redial times.*/
522 uint16_t auto_answer; /**< The timer of AUTO ANSWER times.*/
523} ql_voice_ecall_config_t;
524
525/** eCall config items */
526typedef enum
527{
528 QL_VOICE_ECALL_CONFIG_ENABLE = (1 << 0),
529 QL_VOICE_ECALL_CONFIG_VOICE_MUTE = (1 << 1),
530 QL_VOICE_ECALL_CONFIG_MODE = (1 << 2),
531 QL_VOICE_ECALL_CONFIG_REPORT_EVENT = (1 << 3),
532 QL_VOICE_ECALL_CONFIG_START_TIMER = (1 << 4),
533 QL_VOICE_ECALL_CONFIG_HACK_TIMER = (1 << 5),
534 QL_VOICE_ECALL_CONFIG_TRANS_TIMER = (1 << 6),
535 QL_VOICE_ECALL_CONFIG_FAIL_REDIAL = (1 << 7),
536 QL_VOICE_ECALL_CONFIG_DROP_REDIAL = (1 << 8),
537 QL_VOICE_ECALL_CONFIG_CLEARDOWN_TIMER = (1 << 9),
538 QL_VOICE_ECALL_CONFIG_INIT_TIMER = (1 << 10),
539 QL_VOICE_ECALL_CONFIG_NAD_REG_TIMER = (1 << 11),
540 QL_VOICE_ECALL_CONFIG_NAD_DEREG_TIMER = (1 << 12),
541 QL_VOICE_ECALL_CONFIG_STANDARD = (1 << 13),
542 QL_VOICE_ECALL_CONFIG_ERA_GLONASS_REDIAL = (1 << 14),
543 QL_VOICE_ECALL_CONFIG_AUTO_ANSWER = (1 << 15),
544} QL_VOICE_ECALL_CONFIG_E;
545
546/** eCall MSD transmission status */
547typedef enum {
548 QL_VOICE_ECALL_MSD_TRANS_STATUS_NONE = -1, /**< NONE */
549 QL_VOICE_ECALL_MSD_TRANS_STATUS_SUCCESS = 0, /**< Success */
550 QL_VOICE_ECALL_MSD_TRANS_STATUS_FAILURE = 1, /**< Generic failure */
551} QL_VOICE_ECALL_MSD_TRANS_STATUS_E;
552
553typedef void (*ql_voice_ecall_status_cb_f)(uint32_t id,
554 QL_VOICE_ECALL_MSD_TRANS_STATUS_E status);
555
556typedef enum {
557 QL_VOICE_ECALL_EVENT_FAIL_NONE = 0,
558 /**< NONE*/
559 QL_VOICE_ECALL_EVENT_FAIL_TIMEOUT = 1,
560 /**< Wait for START timeout. */
561 QL_VOICE_ECALL_EVENT_FAIL_HACK_TIMEOUT = 2,
562 /**< Wait for HACK timeout. */
563 QL_VOICE_ECALL_EVENT_FAIL_MSD_TRANS_TIMEOUT = 3,
564 /**< MSD transmission timeout. */
565 QL_VOICE_ECALL_EVENT_FAIL_IVS_RESET_TIMEOUT = 4,
566 /**< IVS reset. */
567 QL_VOICE_ECALL_EVENT_FAIL_CLEAR_DOWN_FALLBACK_TIMEOUT = 5,
568 /**< clear down fallback timeout. */
569 QL_VOICE_ECALL_EVENT_FAIL_IVS_INITIATION_TIMEOUT = 6,
570 /**< IVS initiation timeout. */
571} QL_VOICE_ECALL_EVENT_FAIL_E;
572
573typedef enum {
574 QL_VOICE_ECALL_EVENT_PROCESS_IVS_NONE = 0,
575 /**< NONE*/
576 QL_VOICE_ECALL_EVENT_PROCESS_IVS_START_RECEIVED_MSD = 1,
577 /**< IVS Link Layer receives START message and starts to send MSD */
578 QL_VOICE_ECALL_EVENT_PROCESS_IVS_NACK_RECEIVED = 2,
579 /**< IVS Link Layer receives NACK message. */
580 QL_VOICE_ECALL_EVENT_PROCESS_IVS_ACK_RECEIVED = 3,
581 /**< IVS Link Layer receives the first LACK message. */
582 QL_VOICE_ECALL_EVENT_PROCESS_IVS_TX_COMPLETED = 4,
583 /**< IVS MSD transmission is complete. */
584 QL_VOICE_ECALL_EVENT_PROCESS_IVS_HLACK_RECEIVED = 5,
585 /**< IVS Link Layer receives first HACK message. */
586} QL_VOICE_ECALL_EVENT_PROCESS_E;
587
588typedef enum {
589 QL_VOICE_ECALL_EVENT_MSDUPADTE_NONE = -1,
590 /**< NONE */
591 QL_VOICE_ECALL_EVENT_MSDUPDATE_IVS_UPDATING_MSD = 0,
592 /**< Indicates MSD has been updated. */
593 QL_VOICE_ECALL_EVENT_MSDUPDATE_PSAP_REQURE_UPDATE_MSD = 1,
594 /**< Indicate to update MSD in 5 seconds. */
595 QL_VOICE_ECALL_EVENT_MSDUPDATE_IVS_UPDATE_MSD_TIMEOUT = 2,
596 /**< Indicate timeout of updating MSD and module starts to transfer the old MSD. */
597} QL_VOICE_ECALL_EVENT_MSDUPDATE_E;
598
599typedef enum {
600 QL_VOICE_ECALL_EVENT_ESTABLISH_NONE = -1,
601 /**< NONE */
602 QL_VOICE_ECALL_EVENT_ESTABLISH_SUCCESS = 0,
603 /**< Establish eCall successfully. */
604 QL_VOICE_ECALL_EVENT_ESTABLISH_FAIL = 1,
605 /**< Establish eCall fails. */
606} QL_VOICE_ECALL_EVENT_ESTABLISH_E;
607
608typedef struct {
609 uint8_t ori_remainder_times;
610 /**< Originate fail remainder times*/
611
612 uint16_t time;
613 /**< The minimum time duration between the previous call attempt */
614} ql_voice_ecall_event_originate_fail_redial_t; /* Type */
615
616typedef struct {
617 uint8_t drop_remainder_times;
618 /**< Dorp remainder times*/
619
620 uint16_t time;
621 /**< The minimum time duration between the previous call attempt */
622} ql_voice_ecall_event_drop_redial_t; /* Type */
623
624typedef enum {
625 QL_VOICE_ECALL_EVENT_EXTEND_STATE_NONE = -1,
626 /**< NONE*/
627 QL_VOICE_ECALL_EVENT_EXTEND_STATE_START_RECV_SYN = 0,
628 /**< eCall start recevied synchronization. */
629 QL_VOICE_ECALL_EVENT_EXTEND_STATE_T9_TIMEOUT = 1,
630 /**< eCall T9 TIMEOUT. */
631 QL_VOICE_ECALL_EVENT_EXTEND_STATE_T10_TIMEOUT = 2,
632 /**< eCall T10 TIMEOUT. */
633 QL_VOICE_ECALL_EVENT_EXTEND_STATE_IVS_ALACK_RECEIVED = 3,
634 /**< IVS receives ALACK message. */
635 QL_VOICE_ECALL_EVENT_EXTEND_STATE_IVS_LLACK_RECEIVED = 4,
636 /**< IVS receives LLACK message. */
637 QL_VOICE_ECALL_EVENT_EXTEND_STATE_STOPPED = 5,
638 /**< IVS receives STOPPED message. */
639 QL_VOICE_ECALL_EVENT_EXTEND_STATE_ANSWERING_INCOMING_PSAP_ECALL = 6,
640 /**< IVS AUTO ANSWERING INCOMING PSAP ECALL. */
641 QL_VOICE_ECALL_EVENT_EXTEND_STATE_CLEARDOWN_RECEIVED = 7,
642 /**< IVS receives CLEARDOWN message. */
643 QL_VOICE_ECALL_EVENT_EXTEND_STATE_CALLBACK_TIMEOUT = 8,
644 /**< eCall CALLBACK TIMEOUT. */
645 QL_VOICE_ECALL_EVENT_IVS_NORMAL_CLEARING = 9,
646 /**< eCall IVS NORAML CLEATING. */
647 QL_VOICE_ECALL_EVENT_IVS_ABNORMAL_CLEARING = 10,
648 /**< eCall IVS ABNORAML CLEATING. */
649} QL_VOICE_ECALL_EVENT_EXTEND_STATE_E;
650
651/** eCall event */
652typedef struct
653{
654 QL_VOICE_ECALL_EVENT_FAIL_E fail;
655 /**< Event of eCall Failed.*/
656 QL_VOICE_ECALL_EVENT_PROCESS_E process;
657 /**< Event of eCall process.*/
658 QL_VOICE_ECALL_EVENT_MSDUPDATE_E msdupdate;
659 /**< Event of ecall msd update.*/
660 QL_VOICE_ECALL_EVENT_ESTABLISH_E establish;
661 /**< Event of eCall establish.*/
662 uint16_t hack_code;
663 /**< Event of eCall hack code.*/
664 ql_voice_ecall_event_originate_fail_redial_t ori_redial;
665 /**< Event of originate fail and redial.*/
666 ql_voice_ecall_event_drop_redial_t drop_redial;
667 /**< Event of drop and redial.*/
668 QL_VOICE_ECALL_EVENT_EXTEND_STATE_E extend_state;
669 /**< Event of eCall other state.*/
670} ql_voice_ecall_event_t;
671
672typedef void (*ql_voice_ecall_event_cb_f)(ql_voice_ecall_event_t *p_event);
673
674typedef void (*ql_voice_service_error_cb_f)(int error);
675
676
677/*-----------------------------------------------------------------------------------------------*/
678/**
679 @brief Initializes voice service.
680 @return Whether the voice service was initialized successfully.
681 @retval QL_ERR_OK successful.
682 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
683 @retval Other error code defined by ql_type.h.
684 */
685/*-----------------------------------------------------------------------------------------------*/
686int ql_voice_init(void);
687
688/*-----------------------------------------------------------------------------------------------*/
689/**
690 @brief Deinitializes voice service.
691 @return Whether the voice service was deinitialized successfully.
692 @retval QL_ERR_OK successful.
693 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
694 @retval Other error code defined by ql_type.h.
695 */
696/*-----------------------------------------------------------------------------------------------*/
697int ql_voice_deinit(void);
698
699/*-----------------------------------------------------------------------------------------------*/
700/**
701 @brief Dials a call.
702 @param[in] num phone number to dial.
703 @param[in] len length of phone number, should be less than
704 or euqnal to QL_VOICE_MAX_PHONE_NUMBER.
705 @param[out] id call id.
706 @return Whether a voice call was successfully dialed.
707 @retval QL_ERR_OK successful.
708 @retval QL_ERR_INVALID_ARG invalid argument.
709 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
710 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
711 @retval Other error code defined by ql_type.h.
712 */
713/*-----------------------------------------------------------------------------------------------*/
714int ql_voice_dial(char *num, int len, uint32_t *id);
715
716/*-----------------------------------------------------------------------------------------------*/
717/**
718 @brief Cancels dialing with given id.
719 @param[in] id call id returned from dial.
720 @return Whether the voice call was successfully cancelled.
721 @retval QL_ERR_OK successful.
722 @retval QL_ERR_INVALID_ARG invalid argument.
723 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
724 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
725 @retval Other error code defined by ql_type.h.
726 */
727/*-----------------------------------------------------------------------------------------------*/
728int ql_voice_cancel_dial(uint32_t id);
729
730/*-----------------------------------------------------------------------------------------------*/
731/**
732 @brief hangup all dialing.
733 @return Whether all voice call were successfully hangup.
734 @retval QL_ERR_OK successful.
735 @retval QL_ERR_INVALID_ARG invalid argument.
736 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
737 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
738 @retval Other error code defined by ql_type.h.
739 */
740/*-----------------------------------------------------------------------------------------------*/
741int ql_voice_hangup_all(void);
742
743/*-----------------------------------------------------------------------------------------------*/
744/**
745 @brief Answers the call.
746 @param[in] id call id returned from dial.
747 @return Whether the voice call was successfully answered.
748 @retval QL_ERR_OK successful.
749 @retval QL_ERR_INVALID_ARG invalid argument.
750 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
751 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
752 @retval Other error code defined by ql_type.h.
753 */
754/*-----------------------------------------------------------------------------------------------*/
755int ql_voice_answer(uint32_t id);
756
757/*-----------------------------------------------------------------------------------------------*/
758/**
759 @brief Hangs up the call.
760 @param[in] id call id returned from dial.
761 @return Whether the voice call was successfully hung up.
762 @retval QL_ERR_OK successful.
763 @retval QL_ERR_INVALID_ARG invalid argument.
764 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
765 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
766 @retval Other error code defined by ql_type.h.
767 */
768/*-----------------------------------------------------------------------------------------------*/
769int ql_voice_hangup(uint32_t id);
770
771/*-----------------------------------------------------------------------------------------------*/
772/**
773 @brief Holds the call when mutil calls is activated.
774 @param[in] id call id returned from dial.
775 @return Whether the voice call was successfully held.
776 @retval QL_ERR_OK successful.
777 @retval QL_ERR_INVALID_ARG invalid argument.
778 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
779 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
780 @retval Other error code defined by ql_type.h.
781 */
782/*-----------------------------------------------------------------------------------------------*/
783int ql_voice_hold(uint32_t id);
784
785/*-----------------------------------------------------------------------------------------------*/
786/**
787 @brief Releases the call from hold when mutil calls is activated.
788 @param[in] id call id returned from dial.
789 @return Whether the voice call was successfully unheld.
790 @retval QL_ERR_OK successful.
791 @retval QL_ERR_INVALID_ARG invalid argument.
792 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
793 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
794 @retval Other error code defined by ql_type.h.
795 */
796/*-----------------------------------------------------------------------------------------------*/
797int ql_voice_unhold(uint32_t id);
798
799/*-----------------------------------------------------------------------------------------------*/
800/**
801 @brief Gets call records.
802 @param[in] p_arr pointer to ql_voice_record_array_t.
803 @return Whether the call records were successfully obtained.
804 @retval QL_ERR_OK successful.
805 @retval QL_ERR_INVALID_ARG invalid argument.
806 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
807 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
808 @retval Other error code defined by ql_type.h.
809 */
810/*-----------------------------------------------------------------------------------------------*/
811int ql_voice_get_records(ql_voice_record_array_t *p_arr);
812
813/*-----------------------------------------------------------------------------------------------*/
814/**
815 @brief Registers or Unregisters forwarding.
816 @param[in] reg 0 - unregister, 1 - register.
817 @param[in] cond forwarding condition.
818 @param[in] num phone number.
819 @param[in] len length of phone numebr.
820 @return Whether the voice call forward was registered or unregistered successfully.
821 @retval QL_ERR_OK successful.
822 @retval QL_ERR_INVALID_ARG invalid argument.
823 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
824 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
825 @retval Other error code defined by ql_type.h.
826 */
827/*-----------------------------------------------------------------------------------------------*/
828int ql_voice_forwarding(int reg, QL_VOICE_FW_COND_E cond, char *num, int len);
829
830/*-----------------------------------------------------------------------------------------------*/
831/**
832 @brief Gets forwarding status.
833 @param[in] cond forwarding condition.
834 @param[out] p_status pointer to ql_voice_fw_status_t.
835 @return Whether the voice call forward status was successfully obtained.
836 @retval QL_ERR_OK successful.
837 @retval QL_ERR_INVALID_ARG invalid argument.
838 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
839 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
840 @retval Other error code defined by ql_type.h.
841 */
842/*-----------------------------------------------------------------------------------------------*/
843int ql_voice_get_forwarding_status(QL_VOICE_FW_COND_E cond, ql_voice_fw_status_t *p_status);
844
845/*-----------------------------------------------------------------------------------------------*/
846/**
847 @brief Enables or disables call waiting.
848 @param[in] enable 0 - disable, other - enable.
849 @return Whether the voice call waiting was enabled or disabled successfully.
850 @retval QL_ERR_OK successful.
851 @retval QL_ERR_INVALID_ARG invalid argument.
852 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
853 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
854 @retval Other error code defined by ql_type.h.
855 */
856/*-----------------------------------------------------------------------------------------------*/
857int ql_voice_waiting(int enable);
858
859/*-----------------------------------------------------------------------------------------------*/
860/**
861 @brief Gets call waiting status.
862 @param[out] enabled 0 - waiting is disabled, 1 - waiting is enabled.
863 @return Whether the voice call waiting status was successfully obtained.
864 @retval QL_ERR_OK successful.
865 @retval QL_ERR_INVALID_ARG invalid argument.
866 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
867 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
868 @retval Other error code defined by ql_type.h.
869 */
870/*-----------------------------------------------------------------------------------------------*/
871int ql_voice_get_waiting_status(int *enabled);
872
873/*-----------------------------------------------------------------------------------------------*/
874/**
875 @brief Enables or disables auto answer.
876 @param[in] enable 0 - disable, other - enable.
877 @param[in] sec wait this `sec' seconds before auto answer.
878 @return Whether the voice call autoanswer was enabled or disabled successfully.
879 @retval QL_ERR_OK successful.
880 @retval QL_ERR_INVALID_ARG invalid argument.
881 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
882 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
883 @retval Other error code defined by ql_type.h.
884 */
885/*-----------------------------------------------------------------------------------------------*/
886int ql_voice_autoanswer(int enable, uint32_t sec);
887
888/*-----------------------------------------------------------------------------------------------*/
889/**
890 @brief Sends a DTMF(Dual Tone Multi Frequency) character over the call ID.
891 @param[in] id call id returned from dial.
892 @param[in] c DTMF character to be sent. Valid DTMF characters are 0-9, A-D, '*', '#'.
893 @return Whether a DTMF character was successfully sent.
894 @retval QL_ERR_OK successful.
895 @retval QL_ERR_INVALID_ARG invalid argument.
896 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
897 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
898 @retval Other error code defined by ql_type.h.
899 */
900/*-----------------------------------------------------------------------------------------------*/
901int ql_voice_send_dtmf_char(uint32_t id, char c);
902
903/*-----------------------------------------------------------------------------------------------*/
904/**
905 @brief Sets voice call callback handler.
906 @param[in] cb call back handler.
907 @return Whether the voice call callback handler was successfully set.
908 @retval QL_ERR_OK successful.
909 @retval QL_ERR_INVALID_ARG invalid argument.
910 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
911 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
912 @retval Other error code defined by ql_type.h.
913 */
914/*-----------------------------------------------------------------------------------------------*/
915int ql_voice_set_call_cb(ql_voice_call_cb_f cb);
916
917/*-----------------------------------------------------------------------------------------------*/
918/**
919 @brief Sets voice dtmf callback handler.
920 @param[in] cb call back handler.
921 @return Whether the voice call DTMF repcetion callback handler was successfully set.
922 @retval QL_ERR_OK successful.
923 @retval QL_ERR_INVALID_ARG invalid argument.
924 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
925 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
926 @retval Other error code defined by ql_type.h.
927 */
928/*-----------------------------------------------------------------------------------------------*/
929int ql_voice_set_dtmf_cb(ql_voice_dtmf_cb_f cb);
930
931/*-----------------------------------------------------------------------------------------------*/
932/**
933 @brief Dials eCall.
934 @param[in] p_info eCall info.
935 @return Whether a eCall was successfully dialed.
936 @retval QL_ERR_OK successful.
937 @retval QL_ERR_INVALID_ARG invalid argument.
938 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
939 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
940 @retval Other error code defined by ql_type.h.
941 */
942/*-----------------------------------------------------------------------------------------------*/
943int ql_voice_ecall_dial(ql_voice_ecall_info_t *p_info);
944
945/*-----------------------------------------------------------------------------------------------*/
946/**
947 @brief Hangs up eCall.
948 @return Whether the eCall was successfully hung up.
949 @retval QL_ERR_OK successful.
950 @retval QL_ERR_INVALID_ARG invalid argument.
951 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
952 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
953 @retval Other error code defined by ql_type.h.
954 */
955/*-----------------------------------------------------------------------------------------------*/
956int ql_voice_ecall_hangup(void);
957
958/*-----------------------------------------------------------------------------------------------*/
959/**
960 @brief Updates eCall MSD.
961 @param[in] msd Minimum Set of Data.
962 @param[in] msd_len Length of Minimum Set of Data.
963 @return Whether the eCall MSD was successfully updated.
964 @retval QL_ERR_OK successful.
965 @retval QL_ERR_INVALID_ARG invalid argument.
966 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
967 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
968 @retval Other error code defined by ql_type.h.
969 */
970/*-----------------------------------------------------------------------------------------------*/
971int ql_voice_ecall_update_msd(const uint8_t *msd, uint32_t msd_len);
972
973/*-----------------------------------------------------------------------------------------------*/
974/**
975 @brief Pushes eCall MSD.
976 @param[out] state eCall state.
977 @return Whether the eCall MSD was successfully pushed.
978 @retval QL_ERR_OK successful.
979 @retval QL_ERR_INVALID_ARG invalid argument.
980 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
981 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
982 @retval Other error code defined by ql_type.h.
983 */
984/*-----------------------------------------------------------------------------------------------*/
985int ql_voice_ecall_push_msd(QL_VOICE_ECALL_STATE_E *state);
986
987/*-----------------------------------------------------------------------------------------------*/
988/**
989 @brief Gets eCall config.
990 @param[in] p_config eCall config.
991 @return Whether the eCall config was successfully obtained.
992 @retval QL_ERR_OK successful.
993 @retval QL_ERR_INVALID_ARG invalid argument.
994 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
995 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
996 @retval Other error code defined by ql_type.h.
997 */
998/*-----------------------------------------------------------------------------------------------*/
999int ql_voice_ecall_get_config(ql_voice_ecall_config_t *p_config);
1000
1001/*-----------------------------------------------------------------------------------------------*/
1002/**
1003 @brief Sets eCall config.
1004 @param[in] item Items to set.
1005 @param[in] p_config eCall config.
1006 @return Whether the eCall config was successfully set.
1007 @retval QL_ERR_OK successful.
1008 @retval QL_ERR_INVALID_ARG invalid argument.
1009 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
1010 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
1011 @retval Other error code defined by ql_type.h.
1012 */
1013/*-----------------------------------------------------------------------------------------------*/
1014int ql_voice_ecall_set_config(int item, ql_voice_ecall_config_t *p_config);
1015
1016/*-----------------------------------------------------------------------------------------------*/
1017/**
1018 @brief Sets eCall event callback handler.
1019 @param[in] cb call back handler.
1020 @return Whether the eCall event callback handler was successfully set.
1021 @retval QL_ERR_OK successful.
1022 @retval QL_ERR_INVALID_ARG invalid argument.
1023 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
1024 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
1025 @retval Other error code defined by ql_type.h.
1026 */
1027/*-----------------------------------------------------------------------------------------------*/
1028int ql_voice_ecall_set_event_cb(ql_voice_ecall_event_cb_f cb);
1029
1030/*-----------------------------------------------------------------------------------------------*/
1031/**
1032 @brief Sets eCall status callback handler.
1033 @param[in] cb call back handler.
1034 @return Whether the eCall status callback handler was successfully set.
1035 @retval QL_ERR_OK successful.
1036 @retval QL_ERR_INVALID_ARG invalid argument.
1037 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
1038 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
1039 @retval Other error code defined by ql_type.h.
1040 */
1041/*-----------------------------------------------------------------------------------------------*/
1042int ql_voice_ecall_set_status_cb(ql_voice_ecall_status_cb_f cb);
1043
1044/*-----------------------------------------------------------------------------------------------*/
1045/**
1046 @brief Registration server error callback. Currently, only if the server exits abnormally,
1047 the callback function will be executed, and the error code is QL_ERR_ABORTED;
1048 @param[in] cb Callback function
1049 @return
1050 QL_ERR_OK - successful
1051 Other - error code defined by ql_type.h
1052 */
1053/*-----------------------------------------------------------------------------------------------*/
1054int ql_voice_set_service_error_cb(ql_voice_service_error_cb_f cb);
1055
1056/*-----------------------------------------------------------------------------------------------*/
1057/**
1058 @brief Binds the current control point to a specific subscription.
1059 @param[in] sub Subscription type.
1060 @return Whether the subscription was successfully bound.
1061 @retval QL_ERR_OK successful.
1062 @retval QL_ERR_INVALID_ARG invalid argument.
1063 @retval QL_ERR_UNKNOWN unknown error, failed to connect to service.
1064 @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
1065 @retval Other error code defined by ql_type.h.
1066 */
1067/*-----------------------------------------------------------------------------------------------*/
1068int ql_voice_bind_subscription(QL_VOICE_SUBSCRIPTION_E sub);
1069