summaryrefslogtreecommitdiffstats
path: root/samsung-ril.h
diff options
context:
space:
mode:
authorPaul Kocialkowski <contact@paulk.fr>2012-11-01 12:40:36 +0100
committerPaul Kocialkowski <contact@paulk.fr>2012-11-01 12:40:36 +0100
commit1d47003d41e5c2a84c831b32a345ae3c6bbfa6f1 (patch)
tree164fbd51f937f62cab5e212674cd16fa223286d8 /samsung-ril.h
parentafb3c6b921053af7d92701f3580be6c04a337990 (diff)
downloadhardware_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.h152
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);