Cleaned code for network type selection and added stable PLMN selection
[replicant:hardware_ril_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 "ipc.h"
31 #include "srs.h"
32
33 /**
34  * Defines
35  */
36
37 #define RIL_CLIENT_LOCK(client) pthread_mutex_lock(&(client->mutex));
38 #define RIL_CLIENT_UNLOCK(client) pthread_mutex_unlock(&(client->mutex));
39
40 #define RIL_onRequestCompleteReal(t, e, response, responselen) ril_env->OnRequestComplete(t,e, response, responselen)
41 #define RIL_onUnsolicitedResponse(a,b,c) ril_env->OnUnsolicitedResponse(a,b,c)
42 #define RIL_requestTimedCallback(a,b,c) ril_env->RequestTimedCallback(a,b,c)
43
44 #define reqIdNew() ril_request_id_new()
45 #define reqGetId(t) ril_request_get_id(t)
46 #define reqGetToken(i) ril_request_get_token(i)
47
48 /**
49  * RIL structures
50  */
51
52 struct ril_client;
53 struct ril_token;
54 struct ril_tokens;
55 struct ril_state;
56
57 /**
58  * RIL globals
59  */
60
61 extern struct ril_client *ipc_fmt_client;
62 extern struct ril_client *ipc_rfs_client;
63 extern struct ril_client *srs_client;
64
65 extern const struct RIL_Env *ril_env;
66 extern struct ril_state ril_state;
67
68 /**
69  * RIL client
70  */
71
72 typedef int (*ril_client_func)(struct ril_client *client);
73
74 typedef enum {
75         RIL_CLIENT_NULL         = 0,
76         RIL_CLIENT_CREATED      = 1,
77         RIL_CLIENT_READY        = 2,
78         RIL_CLIENT_DESTROYED    = 3,
79         RIL_CLIENT_ERROR        = 4,
80
81 } ril_client_state;
82
83 struct ril_client {
84         ril_client_func create;
85         ril_client_func destroy;
86         ril_client_func read_loop;
87
88         void *object;
89
90         pthread_t thread;
91         pthread_mutex_t mutex;
92
93         ril_client_state state;
94 };
95
96 struct ril_client_funcs {
97         ril_client_func create;
98         ril_client_func destroy;
99         ril_client_func read_loop;
100 };
101
102 struct ril_client *ril_client_new(struct ril_client_funcs *client_funcs);
103 int ril_client_free(struct ril_client *client);
104 int ril_client_create(struct ril_client *client);
105 int ril_client_destroy(struct ril_client *client);
106 int ril_client_thread_start(struct ril_client *client);
107
108 /**
109  * RIL request token
110  */
111
112 struct ril_request_token {
113         RIL_Token token;
114         int canceled;
115 };
116
117 void ril_requests_tokens_init(void);
118 int ril_request_reg_id(RIL_Token token);
119 int ril_request_get_id(RIL_Token token);
120 RIL_Token ril_request_get_token(int id);
121 int ril_request_get_canceled(RIL_Token token);
122 void ril_request_set_canceled(RIL_Token token, int canceled);
123
124 void RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen);
125
126 /**
127  * RIL tokens
128  */
129
130 struct ril_tokens {
131         RIL_Token radio_power;
132         RIL_Token get_imei;
133         RIL_Token get_imeisv;
134         RIL_Token baseband_version;
135
136         RIL_Token registration_state;
137         RIL_Token gprs_registration_state;
138         RIL_Token operator;
139 };
140
141 void ril_tokens_check(void);
142
143 /**
144  * RIL state
145  */
146  
147 typedef enum {
148         SIM_ABSENT                      = 0,
149         SIM_NOT_READY                   = 1,
150         SIM_READY                       = 2,
151         SIM_PIN                         = 3,
152         SIM_PUK                         = 4,
153         SIM_BLOCKED                     = 5,
154         SIM_NETWORK_PERSO               = 6,
155         SIM_NETWORK_SUBSET_PERSO        = 7,
156         SIM_CORPORATE_PERSO             = 8,
157         SIM_SERVICE_PROVIDER_PERSO      = 9,
158 } SIM_Status;
159
160 typedef enum {
161         POWER_MODE_LPM                  = 0,
162         POWER_MODE_NORMAL               = 2,
163         POWER_MODE_SIM_INIT_COMPLETE    = 4,
164 } Modem_PowerMode;
165
166 struct ril_state {
167         RIL_RadioState radio_state;
168         RIL_CardState card_state;
169         SIM_Status sim_status;
170         Modem_PowerMode power_mode;
171
172         struct ril_tokens tokens;
173
174         struct ipc_net_regist netinfo;
175         struct ipc_net_regist gprs_netinfo;
176         struct ipc_net_current_plmn plmndata;
177
178         struct ipc_gprs_pdp_context gprs_context;
179
180         unsigned char ussd_state;
181 };
182
183 void ril_globals_init(void);
184 void ril_state_lpm(void);
185 int ril_modem_check(void);
186
187 /**
188  * Clients dispatch functions
189  */
190
191 void ipc_fmt_dispatch(struct ipc_message_info *info);
192 void ipc_rfs_dispatch(struct ipc_message_info *info);
193 void srs_dispatch(struct srs_message *message);
194
195 /* GEN */
196
197 struct ipc_gen_phone_res_expect {
198         unsigned char aseq;
199         unsigned short command;
200         void (*func)(struct ipc_message_info *info);
201         int to_complete;
202         int to_abort;
203 };
204
205 void ipc_gen_phone_res_expects_init(void);
206 void ipc_gen_phone_res_expect_to_func(unsigned char aseq, unsigned short command, 
207                 void (*func)(struct ipc_message_info *info));
208 void ipc_gen_phone_res_expect_to_complete(unsigned char aseq, unsigned short command);
209 void ipc_gen_phone_res_expect_to_abort(unsigned char aseq, unsigned short command);
210 void ipc_gen_phone_res(struct ipc_message_info *info);
211
212 /* PWR */
213 void ipc_pwr_phone_pwr_up(void);
214 void ipc_pwr_phone_state(struct ipc_message_info *info);
215 void ril_request_radio_power(RIL_Token t, void *data, size_t datalen);
216
217 /* DISP */
218 void ipc_disp_icon_info(struct ipc_message_info *info);
219 void ipc_disp_rssi_info(struct ipc_message_info *info);
220
221 /* MISC */
222 void ril_request_get_imei(RIL_Token t);
223 void ril_request_get_imeisv(RIL_Token t);
224 void ipc_misc_me_sn(struct ipc_message_info *info);
225 void ril_request_baseband_version(RIL_Token t);
226 void ipc_misc_me_version(struct ipc_message_info *info);
227 void ril_request_get_imsi(RIL_Token t);
228 void ipc_misc_me_imsi(struct ipc_message_info *info);
229 void ipc_misc_time_info(struct ipc_message_info *info);
230
231 /* SAT */
232 void respondSatProactiveCmd(struct ipc_message_info *request);
233 void requestSatSendTerminalResponse(RIL_Token t, void *data, size_t datalen);
234 void requestSatSendEnvelopeCommand(RIL_Token t, void *data, size_t datalen);
235 void respondSatEnvelopeCmd(struct ipc_message_info *request);
236
237 /* SS */
238
239 void ril_request_send_ussd(RIL_Token t, void *data, size_t datalen);
240 void ril_request_cancel_ussd(RIL_Token t, void *data, size_t datalen);
241 void ipc_ss_ussd(struct ipc_message_info *info);
242
243 /* SIM */
244 void ipc_sec_pin_status(struct ipc_message_info *info);
245 void ril_request_sim_status(RIL_Token t);
246 void ril_request_sim_io(RIL_Token t, void *data, size_t datalen);
247 void ipc_sec_rsim_access(struct ipc_message_info *info);
248 void ril_request_enter_sim_pin(RIL_Token t, void *data, size_t datalen);
249 void ipc_sec_pin_status_complete(struct ipc_message_info *info);
250 void ipc_sec_lock_info(struct ipc_message_info *info);
251 void ril_request_query_facility_lock(RIL_Token t, void *data, size_t datalen);
252 void ipc_sec_phone_lock(struct ipc_message_info *info);
253 void ril_request_set_facility_lock(RIL_Token t, void *data, size_t datalen);
254
255 /* NET */
256 void ril_plmn_split(char *plmn_data, char **plmn, unsigned int *mcc, unsigned int *mnc);
257 void ril_plmn_string(char *plmn_data, char *response[3]);
258 unsigned char ril_plmn_act_get(char *plmn_data);
259 void ril_request_operator(RIL_Token t);
260 void ipc_net_current_plmn(struct ipc_message_info *message);
261 void ril_request_registration_state(RIL_Token t);
262 void ril_request_gprs_registration_state(RIL_Token t);
263 void ipc_net_regist(struct ipc_message_info *message);
264 void ril_request_query_available_networks(RIL_Token t);
265 void ipc_net_plmn_list(struct ipc_message_info *info);
266 void ril_request_get_preferred_network_type(RIL_Token t);
267 void ril_request_set_preferred_network_type(RIL_Token t, void *data, size_t datalen);
268 void ipc_net_mode_sel(struct ipc_message_info *info);
269 void ril_request_query_network_selection_mode(RIL_Token t);
270 void ipc_net_plmn_sel(struct ipc_message_info *info);
271 void ril_request_set_network_selection_automatic(RIL_Token t);
272 void ril_request_set_network_selection_manual(RIL_Token t, void *data, size_t datalen);
273
274 /* SMS */
275 struct ril_request_sms {
276         char *pdu;
277         int pdu_len;
278         char *smsc;
279         int smsc_len;
280
281         unsigned char aseq;
282 };
283
284 void ril_request_sms_init(void);
285 void ril_request_sms_del(int id);
286 void ril_request_sms_clear(int id);
287 int ril_request_sms_add(unsigned char aseq,
288                         char *pdu, int pdu_len, 
289                         char *smsc, int smsc_len);
290 int ril_request_sms_get_id(unsigned char aseq);
291 int ril_request_sms_get_next(void);
292 int ril_request_sms_lock_acquire(void);
293 void ril_request_sms_lock_release(void);
294
295 void ril_request_send_sms(RIL_Token t, void *data, size_t datalen);
296 void ril_request_send_sms_expect_more(RIL_Token t, void *data, size_t datalen);
297 int ril_request_send_sms_next(void);
298 void ril_request_send_sms_complete(RIL_Token t, char *pdu, char *smsc);
299 void ipc_sms_send_msg_complete(struct ipc_message_info *info);
300 void ipc_sms_svc_center_addr(struct ipc_message_info *info);
301 void ipc_sms_send_msg(struct ipc_message_info *info);
302
303 void ipc_sms_tpid_queue_init(void);
304 void ipc_sms_tpid_queue_del(int id);
305 int ipc_sms_tpid_queue_add(unsigned char sms_tpid);
306 int ipc_sms_tpid_queue_get_next(void);
307
308 void ipc_sms_incoming_msg(struct ipc_message_info *info);
309 void ril_request_sms_acknowledge(RIL_Token t, void *data, size_t datalen);
310 void ipc_sms_deliver_report(struct ipc_message_info *info);
311
312 void ipc_sms_device_ready(struct ipc_message_info *info);
313
314 /* Call */
315 void ipc_call_incoming(struct ipc_message_info *info);
316 void ipc_call_status(struct ipc_message_info *info);
317 void ril_request_dial(RIL_Token t, void *data, size_t datalen);
318 void ril_request_get_current_calls(RIL_Token t);
319 void ipc_call_list(struct ipc_message_info *info);
320 void ril_request_hangup(RIL_Token t);
321 void ril_request_answer(RIL_Token t);
322 void ril_request_dtmf(RIL_Token t, void *data, int length);
323 void ipc_call_burst_dtmf(struct ipc_message_info *info);
324 void ril_request_dtmf_start(RIL_Token t, void *data, int length);
325 void ril_request_dtmf_stop(RIL_Token t);
326
327 /* SND */
328
329 void ril_request_set_mute(RIL_Token t, void *data, size_t datalen);
330 void srs_snd_set_call_clock_sync(struct srs_message *message);
331 void srs_snd_set_call_volume(struct srs_message *message);
332 void srs_snd_set_call_audio_path(struct srs_message *message);
333
334 /* GPRS */
335
336 void ril_request_setup_data_call(RIL_Token t, void *data, int length);
337 void ril_request_deactivate_data_call(RIL_Token t, void *data, int length);
338 void ipc_gprs_ip_configuration(struct ipc_message_info *info);
339
340 /* RFS */
341
342 void ipc_rfs_nv_read_item(struct ipc_message_info *info);
343 void ipc_rfs_nv_write_item(struct ipc_message_info *info);
344
345 #endif