diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2012-11-01 12:40:36 +0100 |
---|---|---|
committer | Paul Kocialkowski <contact@paulk.fr> | 2012-11-01 12:40:36 +0100 |
commit | 1d47003d41e5c2a84c831b32a345ae3c6bbfa6f1 (patch) | |
tree | 164fbd51f937f62cab5e212674cd16fa223286d8 /samsung-ril.h | |
parent | afb3c6b921053af7d92701f3580be6c04a337990 (diff) | |
download | hardware_ril_samsung-ril-1d47003d41e5c2a84c831b32a345ae3c6bbfa6f1.zip hardware_ril_samsung-ril-1d47003d41e5c2a84c831b32a345ae3c6bbfa6f1.tar.gz hardware_ril_samsung-ril-1d47003d41e5c2a84c831b32a345ae3c6bbfa6f1.tar.bz2 |
Reworked RIL requests, globals, SIM status, client
* Handling ril requests with lists
* Renamed functions to complete requests
* Globals (most of them) are held in ril_data
* Renamed SIM_Status to ril_sim_state
* Renamed client object to data
* Moved client funcs to a sub-structure
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Diffstat (limited to 'samsung-ril.h')
-rw-r--r-- | samsung-ril.h | 152 |
1 files changed, 75 insertions, 77 deletions
diff --git a/samsung-ril.h b/samsung-ril.h index 776ab31..5049987 100644 --- a/samsung-ril.h +++ b/samsung-ril.h @@ -24,7 +24,9 @@ #include <pthread.h> +#include <utils/Log.h> #include <telephony/ril.h> + #include <radio.h> #include "compat.h" @@ -35,43 +37,26 @@ * Defines */ -#define RIL_CLIENT_LOCK(client) pthread_mutex_lock(&(client->mutex)); -#define RIL_CLIENT_UNLOCK(client) pthread_mutex_unlock(&(client->mutex)); - -#define RIL_onRequestCompleteReal(t, e, response, responselen) ril_env->OnRequestComplete(t,e, response, responselen) -#define RIL_onUnsolicitedResponse(a,b,c) ril_env->OnUnsolicitedResponse(a,b,c) -#define RIL_requestTimedCallback(a,b,c) ril_env->RequestTimedCallback(a,b,c) +#define RIL_VERSION_STRING "Samsung RIL" -#define reqIdNew() ril_request_id_new() -#define reqGetId(t) ril_request_get_id(t) -#define reqGetToken(i) ril_request_get_token(i) +#define RIL_LOCK() pthread_mutex_lock(&ril_data.mutex) +#define RIL_UNLOCK() pthread_mutex_unlock(&ril_data.mutex) +#define RIL_CLIENT_LOCK(client) pthread_mutex_lock(&(client->mutex)) +#define RIL_CLIENT_UNLOCK(client) pthread_mutex_unlock(&(client->mutex)) #define RIL_TOKEN_DATA_WAITING (RIL_Token) 0xff -/** - * RIL structures - */ - -struct ril_client; -struct ril_token; -struct ril_tokens; -struct ril_state; - -/** - * RIL globals - */ - -extern struct ril_client *ipc_fmt_client; -extern struct ril_client *ipc_rfs_client; -extern struct ril_client *srs_client; - -extern const struct RIL_Env *ril_env; -extern struct ril_state ril_state; /** * RIL client */ -typedef int (*ril_client_func)(struct ril_client *client); +struct ril_client; + +struct ril_client_funcs { + int (*create)(struct ril_client *client); + int (*destroy)(struct ril_client *client); + int (*read_loop)(struct ril_client *client); +}; typedef enum { RIL_CLIENT_NULL = 0, @@ -79,26 +64,16 @@ typedef enum { RIL_CLIENT_READY = 2, RIL_CLIENT_DESTROYED = 3, RIL_CLIENT_ERROR = 4, - } ril_client_state; struct ril_client { - ril_client_func create; - ril_client_func destroy; - ril_client_func read_loop; + struct ril_client_funcs funcs; + ril_client_state state; - void *object; + void *data; pthread_t thread; pthread_mutex_t mutex; - - ril_client_state state; -}; - -struct ril_client_funcs { - ril_client_func create; - ril_client_func destroy; - ril_client_func read_loop; }; struct ril_client *ril_client_new(struct ril_client_funcs *client_funcs); @@ -108,22 +83,29 @@ int ril_client_destroy(struct ril_client *client); int ril_client_thread_start(struct ril_client *client); /** - * RIL request token + * RIL requests */ -struct ril_request_token { +struct ril_request_info { RIL_Token token; + int id; int canceled; }; -void ril_requests_tokens_init(void); -int ril_request_reg_id(RIL_Token token); -int ril_request_get_id(RIL_Token token); +int ril_request_id_get(void); +int ril_request_id_set(int id); +int ril_request_register(RIL_Token t, int id); +void ril_request_unregister(struct ril_request_info *request); +struct ril_request_info *ril_request_info_find_id(int id); +struct ril_request_info *ril_request_info_find_token(RIL_Token t); +int ril_request_set_canceled(RIL_Token t, int canceled); +int ril_request_get_canceled(RIL_Token t); RIL_Token ril_request_get_token(int id); -int ril_request_get_canceled(RIL_Token token); -void ril_request_set_canceled(RIL_Token token, int canceled); +int ril_request_get_id(RIL_Token t); -void RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen); +void ril_request_complete(RIL_Token t, RIL_Errno e, void *data, size_t length); +void ril_request_unsolicited(int request, void *data, size_t length); +void ril_request_timed_callback(RIL_TimedCallback callback, void *data, const struct timeval *time); /** * RIL tokens @@ -139,7 +121,6 @@ struct ril_tokens { RIL_Token registration_state; RIL_Token gprs_registration_state; RIL_Token operator; - }; void ril_tokens_check(void); @@ -149,30 +130,22 @@ void ril_tokens_check(void); */ typedef enum { - SIM_ABSENT = 0, - SIM_NOT_READY = 1, - SIM_READY = 2, - SIM_PIN = 3, - SIM_PUK = 4, - SIM_BLOCKED = 5, - SIM_NETWORK_PERSO = 6, - SIM_NETWORK_SUBSET_PERSO = 7, - SIM_CORPORATE_PERSO = 8, - SIM_SERVICE_PROVIDER_PERSO = 9, -} SIM_Status; - -typedef enum { - POWER_MODE_LPM = 0, - POWER_MODE_NORMAL = 2, - POWER_MODE_SIM_INIT_COMPLETE = 4, -} Modem_PowerMode; + SIM_STATE_ABSENT = 0, + SIM_STATE_NOT_READY = 1, + SIM_STATE_READY = 2, + SIM_STATE_PIN = 3, + SIM_STATE_PUK = 4, + SIM_STATE_BLOCKED = 5, + SIM_STATE_NETWORK_PERSO = 6, + SIM_STATE_NETWORK_SUBSET_PERSO = 7, + SIM_STATE_CORPORATE_PERSO = 8, + SIM_STATE_SERVICE_PROVIDER_PERSO = 9, +} ril_sim_state; struct ril_state { RIL_RadioState radio_state; - SIM_Status sim_status; - Modem_PowerMode power_mode; - - struct ril_tokens tokens; + ril_sim_state sim_state; + int power_state; struct ipc_sec_sim_status_response sim_pin_status; struct ipc_sec_sim_icc_type sim_type; @@ -186,16 +159,34 @@ struct ril_state { int gprs_last_failed_cid; unsigned char dtmf_tone; - unsigned char ussd_state; }; -void ril_globals_init(void); void ril_state_lpm(void); -int ril_modem_check(void); /** - * Clients dispatch functions + * RIL data + */ + +struct ril_data { + struct RIL_Env *env; + + struct ril_state state; + struct ril_tokens tokens; + struct list_head *requests; + int request_id; + + struct ril_client *ipc_fmt_client; + struct ril_client *ipc_rfs_client; + struct ril_client *srs_client; + + pthread_mutex_t mutex; +}; + +extern struct ril_data ril_data; + +/** + * Dispatch functions */ void ipc_fmt_dispatch(struct ipc_message_info *info); @@ -220,16 +211,19 @@ void ipc_gen_phone_res_expect_to_abort(unsigned char aseq, unsigned short comman void ipc_gen_phone_res(struct ipc_message_info *info); /* PWR */ + void ipc_pwr_phone_pwr_up(void); void ipc_pwr_phone_state(struct ipc_message_info *info); void ril_request_radio_power(RIL_Token t, void *data, size_t datalen); /* DISP */ + void ril_request_signal_strength(RIL_Token t); void ipc_disp_icon_info(struct ipc_message_info *info); void ipc_disp_rssi_info(struct ipc_message_info *info); /* MISC */ + void ril_request_get_imei(RIL_Token t); void ril_request_get_imeisv(RIL_Token t); void ipc_misc_me_sn(struct ipc_message_info *info); @@ -252,7 +246,8 @@ void ril_request_cancel_ussd(RIL_Token t, void *data, size_t datalen); void ipc_ss_ussd(struct ipc_message_info *info); /* SEC */ -void ril_state_update(SIM_Status status); + +void ril_state_update(ril_sim_state status); void ipc_sec_sim_status(struct ipc_message_info *info); void ril_request_get_sim_status(RIL_Token t); void ril_request_sim_io(RIL_Token t, void *data, size_t datalen); @@ -268,6 +263,7 @@ void ipc_sec_phone_lock_complete(struct ipc_message_info *info); void ril_request_set_facility_lock(RIL_Token t, void *data, size_t datalen); /* NET */ + void ril_plmn_split(char *plmn_data, char **plmn, unsigned int *mcc, unsigned int *mnc); void ril_plmn_string(char *plmn_data, char *response[3]); unsigned char ril_plmn_act_get(char *plmn_data); @@ -287,6 +283,7 @@ void ril_request_set_network_selection_automatic(RIL_Token t); void ril_request_set_network_selection_manual(RIL_Token t, void *data, size_t datalen); /* SMS */ + struct ril_request_sms { char *pdu; int pdu_len; @@ -327,6 +324,7 @@ void ipc_sms_deliver_report(struct ipc_message_info *info); void ipc_sms_device_ready(struct ipc_message_info *info); /* Call */ + void ipc_call_incoming(struct ipc_message_info *info); void ipc_call_status(struct ipc_message_info *info); void ril_request_dial(RIL_Token t, void *data, size_t datalen); |