Fix compilation on jellybean
[samsung-ril.git] / samsung-ril.h
1 /**
2  * This file is part of samsung-ril.
3  *
4  * Copyright (C) 2010-2011 Joerie de Gram <j.de.gram@gmail.com>
5  * Copyright (C) 2011 Paul Kocialkowski <contact@oaulk.fr>
6  *
7  * samsung-ril is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * samsung-ril is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with samsung-ril.  If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21
22 #ifndef _SAMSUNG_RIL_H_
23 #define _SAMSUNG_RIL_H_
24
25 #include <pthread.h>
26
27 #include <telephony/ril.h>
28 #include <radio.h>
29
30 #include <cutils/log.h>
31
32 #ifndef LOGE
33         #define LOGE ALOGE
34 #endif
35
36 #ifndef LOGI
37         #define LOGI ALOGI
38 #endif
39
40 #ifndef LOGD
41         #define LOGD ALOGD
42 #endif
43
44 #include "ipc.h"
45 #include "srs.h"
46
47 /**
48  * Defines
49  */
50
51 #define RIL_CLIENT_LOCK(client) pthread_mutex_lock(&(client->mutex));
52 #define RIL_CLIENT_UNLOCK(client) pthread_mutex_unlock(&(client->mutex));
53
54 #define RIL_onRequestCompleteReal(t, e, response, responselen) ril_env->OnRequestComplete(t,e, response, responselen)
55 #define RIL_onUnsolicitedResponse(a,b,c) ril_env->OnUnsolicitedResponse(a,b,c)
56 #define RIL_requestTimedCallback(a,b,c) ril_env->RequestTimedCallback(a,b,c)
57
58 #define reqIdNew() ril_request_id_new()
59 #define reqGetId(t) ril_request_get_id(t)
60 #define reqGetToken(i) ril_request_get_token(i)
61
62 #define RIL_TOKEN_DATA_WAITING  (RIL_Token) 0xff
63 /**
64  * RIL structures
65  */
66
67 struct ril_client;
68 struct ril_token;
69 struct ril_tokens;
70 struct ril_state;
71
72 /**
73  * RIL globals
74  */
75
76 extern struct ril_client *ipc_fmt_client;
77 extern struct ril_client *ipc_rfs_client;
78 extern struct ril_client *srs_client;
79
80 extern const struct RIL_Env *ril_env;
81 extern struct ril_state ril_state;
82
83 /**
84  * RIL client
85  */
86
87 typedef int (*ril_client_func)(struct ril_client *client);
88
89 typedef enum {
90         RIL_CLIENT_NULL         = 0,
91         RIL_CLIENT_CREATED      = 1,
92         RIL_CLIENT_READY        = 2,
93         RIL_CLIENT_DESTROYED    = 3,
94         RIL_CLIENT_ERROR        = 4,
95
96 } ril_client_state;
97
98 struct ril_client {
99         ril_client_func create;
100         ril_client_func destroy;
101         ril_client_func read_loop;
102
103         void *object;
104
105         pthread_t thread;
106         pthread_mutex_t mutex;
107
108         ril_client_state state;
109 };
110
111 struct ril_client_funcs {
112         ril_client_func create;
113         ril_client_func destroy;
114         ril_client_func read_loop;
115 };
116
117 struct ril_client *ril_client_new(struct ril_client_funcs *client_funcs);
118 int ril_client_free(struct ril_client *client);
119 int ril_client_create(struct ril_client *client);
120 int ril_client_destroy(struct ril_client *client);
121 int ril_client_thread_start(struct ril_client *client);
122
123 /**
124  * RIL request token
125  */
126
127 struct ril_request_token {
128         RIL_Token token;
129         int canceled;
130 };
131
132 void ril_requests_tokens_init(void);
133 int ril_request_reg_id(RIL_Token token);
134 int ril_request_get_id(RIL_Token token);
135 RIL_Token ril_request_get_token(int id);
136 int ril_request_get_canceled(RIL_Token token);
137 void ril_request_set_canceled(RIL_Token token, int canceled);
138
139 void RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen);
140
141 /**
142  * RIL tokens
143  */
144
145 struct ril_tokens {
146         RIL_Token radio_power;
147         RIL_Token pin_status;
148         RIL_Token get_imei;
149         RIL_Token get_imeisv;
150         RIL_Token baseband_version;
151         RIL_Token gprs_context;
152
153         RIL_Token registration_state;
154         RIL_Token gprs_registration_state;
155         RIL_Token operator;
156
157 };
158
159 void ril_tokens_check(void);
160
161 /**
162  * RIL state
163  */
164  
165 typedef enum {
166         SIM_ABSENT                      = 0,
167         SIM_NOT_READY                   = 1,
168         SIM_READY                       = 2,
169         SIM_PIN                         = 3,
170         SIM_PUK                         = 4,
171         SIM_BLOCKED                     = 5,
172         SIM_NETWORK_PERSO               = 6,
173         SIM_NETWORK_SUBSET_PERSO        = 7,
174         SIM_CORPORATE_PERSO             = 8,
175         SIM_SERVICE_PROVIDER_PERSO      = 9,
176 } SIM_Status;
177
178 typedef enum {
179         POWER_MODE_LPM                  = 0,
180         POWER_MODE_NORMAL               = 2,
181         POWER_MODE_SIM_INIT_COMPLETE    = 4,
182 } Modem_PowerMode;
183
184 struct ril_state {
185         RIL_RadioState radio_state;
186         SIM_Status sim_status;
187         Modem_PowerMode power_mode;
188
189         struct ril_tokens tokens;
190
191         struct ipc_sec_pin_status_response sim_pin_status;
192         struct ipc_sec_sim_icc_type sim_type;
193
194         struct ipc_net_regist netinfo;
195         struct ipc_net_regist gprs_netinfo;
196         struct ipc_net_current_plmn plmndata;
197
198         struct ipc_gprs_pdp_context gprs_context;
199         struct ipc_gprs_define_pdp_context gprs_define_context;
200
201         unsigned char dtmf_tone;
202
203         unsigned char ussd_state;
204 };
205
206 void ril_globals_init(void);
207 void ril_state_lpm(void);
208 int ril_modem_check(void);
209
210 /**
211  * Clients dispatch functions
212  */
213
214 void ipc_fmt_dispatch(struct ipc_message_info *info);
215 void ipc_rfs_dispatch(struct ipc_message_info *info);
216 void srs_dispatch(struct srs_message *message);
217
218 /* GEN */
219
220 struct ipc_gen_phone_res_expect {
221         unsigned char aseq;
222         unsigned short command;
223         void (*func)(struct ipc_message_info *info);
224         int to_complete;
225         int to_abort;
226 };
227
228 void ipc_gen_phone_res_expects_init(void);
229 void ipc_gen_phone_res_expect_to_func(unsigned char aseq, unsigned short command, 
230                 void (*func)(struct ipc_message_info *info));
231 void ipc_gen_phone_res_expect_to_complete(unsigned char aseq, unsigned short command);
232 void ipc_gen_phone_res_expect_to_abort(unsigned char aseq, unsigned short command);
233 void ipc_gen_phone_res(struct ipc_message_info *info);
234
235 /* PWR */
236 void ipc_pwr_phone_pwr_up(void);
237 void ipc_pwr_phone_state(struct ipc_message_info *info);
238 void ril_request_radio_power(RIL_Token t, void *data, size_t datalen);
239
240 /* DISP */
241 void ril_request_signal_strength(RIL_Token t);
242 void ipc_disp_icon_info(struct ipc_message_info *info);
243 void ipc_disp_rssi_info(struct ipc_message_info *info);
244
245 /* MISC */
246 void ril_request_get_imei(RIL_Token t);
247 void ril_request_get_imeisv(RIL_Token t);
248 void ipc_misc_me_sn(struct ipc_message_info *info);
249 void ril_request_baseband_version(RIL_Token t);
250 void ipc_misc_me_version(struct ipc_message_info *info);
251 void ril_request_get_imsi(RIL_Token t);
252 void ipc_misc_me_imsi(struct ipc_message_info *info);
253 void ipc_misc_time_info(struct ipc_message_info *info);
254
255 /* SAT */
256 void respondSatProactiveCmd(struct ipc_message_info *request);
257 void requestSatSendTerminalResponse(RIL_Token t, void *data, size_t datalen);
258 void requestSatSendEnvelopeCommand(RIL_Token t, void *data, size_t datalen);
259 void respondSatEnvelopeCmd(struct ipc_message_info *request);
260
261 /* SS */
262
263 void ril_request_send_ussd(RIL_Token t, void *data, size_t datalen);
264 void ril_request_cancel_ussd(RIL_Token t, void *data, size_t datalen);
265 void ipc_ss_ussd(struct ipc_message_info *info);
266
267 /* SEC */
268 void ril_state_update(SIM_Status status);
269 void ipc_sec_pin_status(struct ipc_message_info *info);
270 void ril_request_get_sim_status(RIL_Token t);
271 void ril_request_sim_io(RIL_Token t, void *data, size_t datalen);
272 void ipc_sec_rsim_access(struct ipc_message_info *info);
273 void ipc_sec_pin_status_complete(struct ipc_message_info *info);
274 void ipc_sec_lock_info(struct ipc_message_info *info);
275 void ril_request_enter_sim_pin(RIL_Token t, void *data, size_t datalen);
276 void ril_request_change_sim_pin(RIL_Token t, void *data, size_t datalen);
277 void ril_request_enter_sim_puk(RIL_Token t, void *data, size_t datalen);
278 void ril_request_query_facility_lock(RIL_Token t, void *data, size_t datalen);
279 void ipc_sec_phone_lock_complete(struct ipc_message_info *info);
280 void ril_request_set_facility_lock(RIL_Token t, void *data, size_t datalen);
281
282 /* NET */
283 void ril_plmn_split(char *plmn_data, char **plmn, unsigned int *mcc, unsigned int *mnc);
284 void ril_plmn_string(char *plmn_data, char *response[3]);
285 unsigned char ril_plmn_act_get(char *plmn_data);
286 void ril_request_operator(RIL_Token t);
287 void ipc_net_current_plmn(struct ipc_message_info *message);
288 void ril_request_registration_state(RIL_Token t);
289 void ril_request_gprs_registration_state(RIL_Token t);
290 void ipc_net_regist(struct ipc_message_info *message);
291 void ril_request_query_available_networks(RIL_Token t);
292 void ipc_net_plmn_list(struct ipc_message_info *info);
293 void ril_request_get_preferred_network_type(RIL_Token t);
294 void ril_request_set_preferred_network_type(RIL_Token t, void *data, size_t datalen);
295 void ipc_net_mode_sel(struct ipc_message_info *info);
296 void ril_request_query_network_selection_mode(RIL_Token t);
297 void ipc_net_plmn_sel(struct ipc_message_info *info);
298 void ril_request_set_network_selection_automatic(RIL_Token t);
299 void ril_request_set_network_selection_manual(RIL_Token t, void *data, size_t datalen);
300
301 /* SMS */
302 struct ril_request_sms {
303         char *pdu;
304         int pdu_len;
305         char *smsc;
306         int smsc_len;
307
308         unsigned char aseq;
309 };
310
311 void ril_request_sms_init(void);
312 void ril_request_sms_del(int id);
313 void ril_request_sms_clear(int id);
314 int ril_request_sms_add(unsigned char aseq,
315                         char *pdu, int pdu_len, 
316                         char *smsc, int smsc_len);
317 int ril_request_sms_get_id(unsigned char aseq);
318 int ril_request_sms_get_next(void);
319 int ril_request_sms_lock_acquire(void);
320 void ril_request_sms_lock_release(void);
321
322 void ril_request_send_sms(RIL_Token t, void *data, size_t datalen);
323 void ril_request_send_sms_expect_more(RIL_Token t, void *data, size_t datalen);
324 int ril_request_send_sms_next(void);
325 void ril_request_send_sms_complete(RIL_Token t, char *pdu, char *smsc);
326 void ipc_sms_send_msg_complete(struct ipc_message_info *info);
327 void ipc_sms_svc_center_addr(struct ipc_message_info *info);
328 void ipc_sms_send_msg(struct ipc_message_info *info);
329
330 void ipc_sms_tpid_queue_init(void);
331 void ipc_sms_tpid_queue_del(int id);
332 int ipc_sms_tpid_queue_add(unsigned char sms_tpid);
333 int ipc_sms_tpid_queue_get_next(void);
334
335 void ipc_sms_incoming_msg(struct ipc_message_info *info);
336 void ril_request_sms_acknowledge(RIL_Token t, void *data, size_t datalen);
337 void ipc_sms_deliver_report(struct ipc_message_info *info);
338
339 void ipc_sms_device_ready(struct ipc_message_info *info);
340
341 /* Call */
342 void ipc_call_incoming(struct ipc_message_info *info);
343 void ipc_call_status(struct ipc_message_info *info);
344 void ril_request_dial(RIL_Token t, void *data, size_t datalen);
345 void ril_request_get_current_calls(RIL_Token t);
346 void ipc_call_list(struct ipc_message_info *info);
347 void ril_request_hangup(RIL_Token t);
348 void ril_request_answer(RIL_Token t);
349 void ril_request_dtmf(RIL_Token t, void *data, int length);
350 void ipc_call_burst_dtmf(struct ipc_message_info *info);
351 void ril_request_dtmf_start(RIL_Token t, void *data, int length);
352 void ril_request_dtmf_stop(RIL_Token t);
353
354 /* SND */
355
356 void ril_request_set_mute(RIL_Token t, void *data, size_t datalen);
357 void srs_snd_set_call_clock_sync(struct srs_message *message);
358 void srs_snd_set_call_volume(struct srs_message *message);
359 void srs_snd_set_call_audio_path(struct srs_message *message);
360
361 /* GPRS */
362
363 void ril_request_setup_data_call(RIL_Token t, void *data, int length);
364 void ril_request_deactivate_data_call(RIL_Token t, void *data, int length);
365 void ipc_gprs_ip_configuration(struct ipc_message_info *info);
366
367 /* RFS */
368
369 void ipc_rfs_nv_read_item(struct ipc_message_info *info);
370 void ipc_rfs_nv_write_item(struct ipc_message_info *info);
371
372 #endif