2 * This file is part of samsung-ril.
4 * Copyright (C) 2010-2011 Joerie de Gram <j.de.gram@gmail.com>
5 * Copyright (C) 2011 Paul Kocialkowski <contact@oaulk.fr>
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.
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.
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/>.
22 #ifndef _SAMSUNG_RIL_H_
23 #define _SAMSUNG_RIL_H_
27 #include <telephony/ril.h>
30 #include <cutils/log.h>
51 #define RIL_CLIENT_LOCK(client) pthread_mutex_lock(&(client->mutex));
52 #define RIL_CLIENT_UNLOCK(client) pthread_mutex_unlock(&(client->mutex));
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)
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)
62 #define RIL_TOKEN_DATA_WAITING (RIL_Token) 0xff
76 extern struct ril_client *ipc_fmt_client;
77 extern struct ril_client *ipc_rfs_client;
78 extern struct ril_client *srs_client;
80 extern const struct RIL_Env *ril_env;
81 extern struct ril_state ril_state;
87 typedef int (*ril_client_func)(struct ril_client *client);
91 RIL_CLIENT_CREATED = 1,
93 RIL_CLIENT_DESTROYED = 3,
99 ril_client_func create;
100 ril_client_func destroy;
101 ril_client_func read_loop;
106 pthread_mutex_t mutex;
108 ril_client_state state;
111 struct ril_client_funcs {
112 ril_client_func create;
113 ril_client_func destroy;
114 ril_client_func read_loop;
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);
127 struct ril_request_token {
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);
139 void RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen);
146 RIL_Token radio_power;
147 RIL_Token pin_status;
149 RIL_Token get_imeisv;
150 RIL_Token baseband_version;
151 RIL_Token gprs_context;
153 RIL_Token registration_state;
154 RIL_Token gprs_registration_state;
159 void ril_tokens_check(void);
172 SIM_NETWORK_PERSO = 6,
173 SIM_NETWORK_SUBSET_PERSO = 7,
174 SIM_CORPORATE_PERSO = 8,
175 SIM_SERVICE_PROVIDER_PERSO = 9,
180 POWER_MODE_NORMAL = 2,
181 POWER_MODE_SIM_INIT_COMPLETE = 4,
185 RIL_RadioState radio_state;
186 SIM_Status sim_status;
187 Modem_PowerMode power_mode;
189 struct ril_tokens tokens;
191 struct ipc_sec_pin_status_response sim_pin_status;
192 struct ipc_sec_sim_icc_type sim_type;
194 struct ipc_net_regist netinfo;
195 struct ipc_net_regist gprs_netinfo;
196 struct ipc_net_current_plmn plmndata;
198 struct ipc_gprs_pdp_context gprs_context;
199 struct ipc_gprs_define_pdp_context gprs_define_context;
201 unsigned char dtmf_tone;
203 unsigned char ussd_state;
206 void ril_globals_init(void);
207 void ril_state_lpm(void);
208 int ril_modem_check(void);
211 * Clients dispatch functions
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);
220 struct ipc_gen_phone_res_expect {
222 unsigned short command;
223 void (*func)(struct ipc_message_info *info);
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);
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);
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);
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);
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);
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);
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);
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);
302 struct ril_request_sms {
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);
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);
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);
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);
339 void ipc_sms_device_ready(struct ipc_message_info *info);
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);
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);
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);
369 void ipc_rfs_nv_read_item(struct ipc_message_info *info);
370 void ipc_rfs_nv_write_item(struct ipc_message_info *info);