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-2012 Paul Kocialkowski <contact@paulk.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 <utils/Log.h>
28 #include <telephony/ril.h>
51 #define RIL_VERSION_STRING "Samsung RIL"
53 #define RIL_LOCK() pthread_mutex_lock(&ril_data.mutex)
54 #define RIL_UNLOCK() pthread_mutex_unlock(&ril_data.mutex)
55 #define RIL_CLIENT_LOCK(client) pthread_mutex_lock(&(client->mutex))
56 #define RIL_CLIENT_UNLOCK(client) pthread_mutex_unlock(&(client->mutex))
58 #define RIL_TOKEN_DATA_WAITING (RIL_Token) 0xff
66 struct ril_client_funcs {
67 int (*create)(struct ril_client *client);
68 int (*destroy)(struct ril_client *client);
69 int (*read_loop)(struct ril_client *client);
74 RIL_CLIENT_CREATED = 1,
76 RIL_CLIENT_DESTROYED = 3,
81 struct ril_client_funcs funcs;
82 ril_client_state state;
87 pthread_mutex_t mutex;
90 struct ril_client *ril_client_new(struct ril_client_funcs *client_funcs);
91 int ril_client_free(struct ril_client *client);
92 int ril_client_create(struct ril_client *client);
93 int ril_client_destroy(struct ril_client *client);
94 int ril_client_thread_start(struct ril_client *client);
100 struct ril_request_info {
106 int ril_request_id_get(void);
107 int ril_request_id_set(int id);
108 int ril_request_register(RIL_Token t, int id);
109 void ril_request_unregister(struct ril_request_info *request);
110 struct ril_request_info *ril_request_info_find_id(int id);
111 struct ril_request_info *ril_request_info_find_token(RIL_Token t);
112 int ril_request_set_canceled(RIL_Token t, int canceled);
113 int ril_request_get_canceled(RIL_Token t);
114 RIL_Token ril_request_get_token(int id);
115 int ril_request_get_id(RIL_Token t);
117 void ril_request_complete(RIL_Token t, RIL_Errno e, void *data, size_t length);
118 void ril_request_unsolicited(int request, void *data, size_t length);
119 void ril_request_timed_callback(RIL_TimedCallback callback, void *data, const struct timeval *time);
126 RIL_Token radio_power;
127 RIL_Token pin_status;
129 RIL_Token get_imeisv;
130 RIL_Token baseband_version;
132 RIL_Token registration_state;
133 RIL_Token gprs_registration_state;
136 RIL_Token outgoing_sms;
140 void ril_tokens_check(void);
147 SIM_STATE_ABSENT = 0,
148 SIM_STATE_NOT_READY = 1,
152 SIM_STATE_BLOCKED = 5,
153 SIM_STATE_NETWORK_PERSO = 6,
154 SIM_STATE_NETWORK_SUBSET_PERSO = 7,
155 SIM_STATE_CORPORATE_PERSO = 8,
156 SIM_STATE_SERVICE_PROVIDER_PERSO = 9,
160 RIL_RadioState radio_state;
161 ril_sim_state sim_state;
164 struct ipc_sec_sim_status_response sim_pin_status;
165 struct ipc_sec_sim_icc_type sim_icc_type;
167 struct ipc_net_regist_response netinfo;
168 struct ipc_net_regist_response gprs_netinfo;
169 struct ipc_net_current_plmn_response plmndata;
171 struct ipc_call_status call_status;
173 int gprs_last_failed_cid;
175 unsigned char dtmf_tone;
176 unsigned char ussd_state;
178 unsigned char sms_incoming_msg_tpid;
188 struct ril_state state;
189 struct ril_tokens tokens;
190 struct list_head *gprs_connections;
191 struct list_head *incoming_sms;
192 struct list_head *outgoing_sms;
193 struct list_head *sim_io;
194 struct list_head *generic_responses;
195 struct list_head *requests;
198 struct ril_client *ipc_fmt_client;
199 struct ril_client *ipc_rfs_client;
200 struct ril_client *srs_client;
202 pthread_mutex_t mutex;
205 extern struct ril_data ril_data;
211 void ipc_fmt_dispatch(struct ipc_message_info *info);
212 void ipc_rfs_dispatch(struct ipc_message_info *info);
213 void srs_dispatch(struct srs_message *message);
217 struct ipc_gen_phone_res_expect_info {
219 unsigned short command;
220 void (*func)(struct ipc_message_info *info);
225 int ipc_gen_phone_res_expect_register(unsigned char aseq, unsigned short command,
226 void (*func)(struct ipc_message_info *info), int complete, int abort);
227 void ipc_gen_phone_res_expect_unregister(struct ipc_gen_phone_res_expect_info *expect);
228 struct ipc_gen_phone_res_expect_info *ipc_gen_phone_res_expect_find_aseq(unsigned char aseq);
229 int ipc_gen_phone_res_expect_to_func(unsigned char aseq, unsigned short command,
230 void (*func)(struct ipc_message_info *info));
231 int ipc_gen_phone_res_expect_to_complete(unsigned char aseq, unsigned short command);
232 int ipc_gen_phone_res_expect_to_abort(unsigned char aseq, unsigned short command);
234 void ipc_gen_phone_res(struct ipc_message_info *info);
238 void ipc_pwr_phone_pwr_up(void);
239 void ipc_pwr_phone_state(struct ipc_message_info *info);
240 void ril_request_radio_power(RIL_Token t, void *data, size_t datalen);
244 void ril_request_signal_strength(RIL_Token t);
245 void ipc_disp_icon_info(struct ipc_message_info *info);
246 void ipc_disp_rssi_info(struct ipc_message_info *info);
250 void ril_request_get_imei(RIL_Token t);
251 void ril_request_get_imeisv(RIL_Token t);
252 void ipc_misc_me_sn(struct ipc_message_info *info);
253 void ril_request_baseband_version(RIL_Token t);
254 void ipc_misc_me_version(struct ipc_message_info *info);
255 void ril_request_get_imsi(RIL_Token t);
256 void ipc_misc_me_imsi(struct ipc_message_info *info);
257 void ipc_misc_time_info(struct ipc_message_info *info);
260 void ril_request_report_stk_service_is_running(RIL_Token t);
261 void ipc_sat_proactive_cmd(struct ipc_message_info *info);
262 void ril_request_stk_send_terminal_response(RIL_Token t, void *data, size_t datalen);
263 void ril_request_stk_send_envelope_command(RIL_Token t, void *data, size_t datalen);
264 void ipc_sat_envelope_cmd(struct ipc_message_info *info);
268 void ril_request_send_ussd(RIL_Token t, void *data, size_t datalen);
269 void ril_request_cancel_ussd(RIL_Token t, void *data, size_t datalen);
270 void ipc_ss_ussd(struct ipc_message_info *info);
274 struct ril_request_sim_io_info {
275 unsigned char command;
276 unsigned short fileid;
287 void ril_state_update(ril_sim_state status);
288 void ipc_sec_sim_status(struct ipc_message_info *info);
289 void ril_request_get_sim_status(RIL_Token t);
290 void ipc_sec_sim_icc_type(struct ipc_message_info *info);
291 void ril_request_sim_io_next(void);
292 void ril_request_sim_io_complete(RIL_Token t, unsigned char command, unsigned short fileid,
293 unsigned char p1, unsigned char p2, unsigned char p3, void *data, int length);
294 void ril_request_sim_io(RIL_Token t, void *data, int length);
295 void ipc_sec_rsim_access(struct ipc_message_info *info);
296 void ipc_sec_sim_status_complete(struct ipc_message_info *info);
297 void ipc_sec_lock_info(struct ipc_message_info *info);
298 void ril_request_enter_sim_pin(RIL_Token t, void *data, size_t datalen);
299 void ril_request_change_sim_pin(RIL_Token t, void *data, size_t datalen);
300 void ril_request_enter_sim_puk(RIL_Token t, void *data, size_t datalen);
301 void ril_request_query_facility_lock(RIL_Token t, void *data, size_t datalen);
302 void ipc_sec_phone_lock(struct ipc_message_info *info);
303 void ipc_sec_phone_lock_complete(struct ipc_message_info *info);
304 void ril_request_set_facility_lock(RIL_Token t, void *data, size_t datalen);
308 void ril_plmn_split(char *plmn_data, char **plmn, unsigned int *mcc, unsigned int *mnc);
309 void ril_plmn_string(char *plmn_data, char *response[3]);
310 unsigned char ril_plmn_act_get(char *plmn_data);
311 void ril_request_operator(RIL_Token t);
312 void ipc_net_current_plmn(struct ipc_message_info *message);
314 void ril_request_voice_registration_state(RIL_Token t);
315 void ril_request_data_registration_state(RIL_Token t);
317 void ril_request_registration_state(RIL_Token t);
318 void ril_request_gprs_registration_state(RIL_Token t);
320 void ipc_net_regist(struct ipc_message_info *message);
321 void ril_request_query_available_networks(RIL_Token t);
322 void ipc_net_plmn_list(struct ipc_message_info *info);
323 void ril_request_get_preferred_network_type(RIL_Token t);
324 void ril_request_set_preferred_network_type(RIL_Token t, void *data, size_t datalen);
325 void ipc_net_mode_sel(struct ipc_message_info *info);
326 void ril_request_query_network_selection_mode(RIL_Token t);
327 void ipc_net_plmn_sel(struct ipc_message_info *info);
328 void ril_request_set_network_selection_automatic(RIL_Token t);
329 void ril_request_set_network_selection_manual(RIL_Token t, void *data, size_t datalen);
333 struct ipc_sms_incoming_msg_info {
341 struct ril_request_send_sms_info {
350 int ril_request_send_sms_register(char *pdu, int pdu_length, unsigned char *smsc, int smsc_length, RIL_Token t);
351 void ril_request_send_sms_unregister(struct ril_request_send_sms_info *send_sms);
352 struct ril_request_send_sms_info *ril_request_send_sms_info_find(void);
353 struct ril_request_send_sms_info *ril_request_send_sms_info_find_token(RIL_Token t);
355 void ril_request_send_sms_next(void);
356 void ril_request_send_sms_complete(RIL_Token t, char *pdu, int pdu_length, unsigned char *smsc, int smsc_length);
357 void ril_request_send_sms(RIL_Token t, void *data, size_t length);
358 void ril_request_send_sms_expect_more(RIL_Token t, void *data, size_t length);
359 void ipc_sms_svc_center_addr(struct ipc_message_info *info);
360 void ipc_sms_send_msg_complete(struct ipc_message_info *info);
361 void ipc_sms_send_msg(struct ipc_message_info *info);
363 int ipc_sms_incoming_msg_register(char *pdu, int length, unsigned char type, unsigned char tpid);
364 void ipc_sms_incoming_msg_unregister(struct ipc_sms_incoming_msg_info *incoming_msg);
365 struct ipc_sms_incoming_msg_info *ipc_sms_incoming_msg_info_find(void);
367 void ipc_sms_incoming_msg_complete(char *pdu, int length, unsigned char type, unsigned char tpid);
368 void ipc_sms_incoming_msg(struct ipc_message_info *info);
369 void ril_request_sms_acknowledge(RIL_Token t, void *data, size_t length);
370 void ipc_sms_deliver_report(struct ipc_message_info *info);
372 void ipc_sms_device_ready(struct ipc_message_info *info);
376 void ipc_call_incoming(struct ipc_message_info *info);
377 void ipc_call_status(struct ipc_message_info *info);
378 void ril_request_dial(RIL_Token t, void *data, size_t datalen);
379 void ril_request_get_current_calls(RIL_Token t);
380 void ipc_call_list(struct ipc_message_info *info);
381 void ril_request_hangup(RIL_Token t);
382 void ril_request_answer(RIL_Token t);
383 void ril_request_last_call_fail_cause(RIL_Token t);
384 void ril_request_dtmf(RIL_Token t, void *data, int length);
385 void ipc_call_burst_dtmf(struct ipc_message_info *info);
386 void ril_request_dtmf_start(RIL_Token t, void *data, int length);
387 void ril_request_dtmf_stop(RIL_Token t);
391 void ril_request_set_mute(RIL_Token t, void *data, size_t datalen);
392 void srs_snd_set_call_clock_sync(struct srs_message *message);
393 void srs_snd_set_call_volume(struct srs_message *message);
394 void srs_snd_set_call_audio_path(struct srs_message *message);
398 struct ril_gprs_connection {
402 RIL_DataCallFailCause fail_cause;
404 RIL_LastDataCallActivateFailCause fail_cause;
409 struct ipc_gprs_pdp_context_set context;
410 struct ipc_gprs_define_pdp_context define_context;
411 struct ipc_gprs_ip_configuration ip_configuration;
414 int ril_gprs_connection_register(int cid);
415 void ril_gprs_connection_unregister(struct ril_gprs_connection *gprs_connection);
416 struct ril_gprs_connection *ril_gprs_connection_find_cid(int cid);
417 struct ril_gprs_connection *ril_gprs_connection_find_token(RIL_Token t);
418 struct ril_gprs_connection *ril_gprs_connection_start(void);
419 void ril_gprs_connection_stop(struct ril_gprs_connection *gprs_connection);
421 void ril_request_setup_data_call(RIL_Token t, void *data, int length);
422 void ril_request_deactivate_data_call(RIL_Token t, void *data, int length);
423 void ipc_gprs_ip_configuration(struct ipc_message_info *info);
424 void ipc_gprs_call_status(struct ipc_message_info *info);
425 void ril_request_last_data_call_fail_cause(RIL_Token t);
426 void ipc_gprs_pdp_context(struct ipc_message_info *info);
427 void ril_unsol_data_call_list_changed(void);
428 void ril_request_data_call_list(RIL_Token t);
432 void ipc_rfs_nv_read_item(struct ipc_message_info *info);
433 void ipc_rfs_nv_write_item(struct ipc_message_info *info);