#include <storage.h>\r
#include <server.h>\r
#include <at.h>\r
-#ifdef ENABLE_CMUX\r
#include <mux.h>\r
-#endif\r
\r
#include "s_common.h"\r
#include "s_modem.h"\r
\r
+\r
#define ID_RESERVED_AT 0x0229\r
\r
#define MAX_VERSION_LEN 32\r
unsigned char szEriVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< eri version (only for CDMA), null termination */\r
} TelMiscVersionInformation;\r
\r
-\r
+extern int g_cmux_enable;\r
+ \r
void prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix, enum tcore_at_command_type at_cmd_type, TcorePendingResponseCallback callback);\r
static void on_confirmation_modem_message_send(TcorePending *p, gboolean result, void *user_data); // from Kernel\r
void on_response_bootup_subscription(TcorePending *p, int data_len, const void *data, void *user_data);\r
{\r
CoreObject *o = user_data;\r
UserRequest *ur = NULL;\r
- const TcoreATResponse *resp = data;\r
+ const TcoreATResponse *ATresp = data;\r
GSList *tokens=NULL;\r
const char *line = NULL;\r
struct tresp_modem_set_flightmode res = {0};\r
\r
o = tcore_pending_ref_core_object(p);\r
\r
- if(resp->success > 0){\r
+ if(ATresp->success > 0){\r
dbg("RESPONSE OK - flight mode operation finished");\r
res.result = TCORE_RETURN_SUCCESS;\r
}\r
else {\r
dbg("RESPONSE NOK");\r
- line = (const char*)resp->final_response;\r
+ line = (const char*)ATresp->final_response;\r
tokens = tcore_at_tok_new(line);\r
\r
if (g_slist_length(tokens) < 1) {\r
if(NULL == ur){\r
dbg("No user request. Internal request created during boot-up sequence");\r
\r
- if(resp->success > 0){\r
+ if(ATresp->success > 0){\r
modem_flight_mode.enable = tcore_modem_get_flight_mode_state(o);\r
dbg("sucess case - Sending Flight Mode Notification (%d) to Telephony Server",modem_flight_mode.enable);\r
\r
sizeof(struct tnoti_modem_flight_mode), &modem_flight_mode);\r
}\r
}\r
+ else{\r
+ dbg("Sending response for Flight mode operation");\r
+ tcore_user_request_send_response(ur, TRESP_MODEM_SET_FLIGHTMODE, sizeof(struct tresp_modem_set_flightmode), &res);\r
+ }\r
\r
tcore_at_tok_free(tokens);\r
}\r
\r
/* XSIMSTATE subscription */\r
prepare_and_send_pending_request(plugin, "sim", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
- prepare_and_send_pending_request(plugin, "umts_sms", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
- prepare_and_send_pending_request(plugin, "modem", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+ if(1 == g_cmux_enable)\r
+ {\r
+ prepare_and_send_pending_request(plugin, "umts_sms", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+ prepare_and_send_pending_request(plugin, "modem", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+ }\r
\r
/* CREG subscription */\r
prepare_and_send_pending_request(plugin, "umts_network", "at+creg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
\r
/* CGREG subscription */\r
prepare_and_send_pending_request(plugin, "umts_network", "at+cgreg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
- prepare_and_send_pending_request(plugin, "umts_ps", "at+cgreg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
\r
/* Allow automatic time Zone updation via NITZ */\r
prepare_and_send_pending_request(plugin, "umts_network", "at+ctzu=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
prepare_and_send_pending_request(plugin,"umts_ps","at+cmee=2",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
\r
/*incoming sms and cb subscription*/\r
- prepare_and_send_pending_request(plugin,"umts_sms","at+cnmi=1,2,0,0,0",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+ prepare_and_send_pending_request(plugin,"umts_sms","at+cnmi=1,2,2,2,0",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
\r
/*message service subscription*/\r
prepare_and_send_pending_request(plugin,"umts_sms","at+csms=1",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
\r
/* text/pdu mode subscription*/\r
- prepare_and_send_pending_request(plugin,"umts_sms","at+cmgf=1",NULL,TCORE_AT_NO_RESULT, on_response_last_bootup_subscription);\r
+ prepare_and_send_pending_request(plugin,"umts_sms","at+cmgf=0",NULL,TCORE_AT_NO_RESULT, on_response_last_bootup_subscription);\r
\r
dbg("Exit");\r
return;\r
}\r
\r
-#ifdef ENABLE_CMUX\r
+\r
static void on_response_setupmux(TcorePending *p, int data_len, const void *data, void *user_data)\r
{\r
TcorePlugin *plugin = NULL;\r
/* Actual HAL - like svnet(2) */\r
hal = (TcoreHal *)user_data;\r
\r
- /* Link HAL */\r
- //tcore_plugin_link_user_data(plugin, hal);\r
- \r
- /* TODO: Initialize MUX module.\r
- * Append each MUX HAL to each Co-Object while initialization.\r
- * API: tcore_object_set_hal(CoreObject *o, TcoreHal *h)\r
- *\r
- * After MUX setup, AT parse functionality of PHY HAL\r
- * should be disabled.\r
- * e.g.) plugin = tcore_pending_ref_plugin((TcorePending*) p);\r
- * hal = tcore_plugin_ref_hal((TcorePlugin*) plugin);\r
- * tcore_hal_disable_queue((TcoreHal*) hal);\r
- */\r
-\r
- /* TODO: Should be moved to ...\r
- * Proceed power up noti process after MUX initialization.\r
- */\r
-\r
/* Initialize CMUX */\r
tcore_cmux_init(plugin, hal);\r
\r
/* HAL has type itself,\r
* e.g.) TCORE_HAL_MODE_AT\r
*/\r
- /*o = tcore_pending_ref_core_object(plugin);*/\r
hal = tcore_object_get_hal(o);\r
\r
- //prepare_and_send_pending_request(plugin, "modem", "AT+CMUX=0,0,,1509,10,3,30,,", "+CMUX", TCORE_AT_NO_RESULT, on_response_setupmux);\r
pending = tcore_at_pending_new(o, "AT+CMUX=0,0,,1509,10,3,30,,", "+CMUX", TCORE_AT_NO_RESULT, on_response_setupmux, hal);\r
\r
tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
plugin = (TcorePlugin *)user_data;\r
_modem_subscribe_events(plugin);\r
dbg("Exit");\r
- return;\r
+ return TRUE;\r
}\r
-#endif\r
+\r
\r
static void on_response_enable_logging(TcorePending *p, int data_len, const void *data, void *user_data)\r
{\r
dbg("Enabling CP logging is failed !!!\n");\r
}\r
\r
-#ifdef ENABLE_CMUX\r
- dbg("Calling setup_mux");\r
- setup_mux(tcore_pending_ref_core_object(p));\r
-#else\r
- _modem_subscribe_events(plugin);\r
-#endif\r
+ if(g_cmux_enable == 1){\r
+ dbg("Calling setup_mux");\r
+ setup_mux(tcore_pending_ref_core_object(p));\r
+ }\r
+ else{\r
+ _modem_subscribe_events(plugin);\r
+ }\r
\r
dbg("Exit");\r
return;\r
TcoreATRequest *req = NULL;\r
TcorePending *pending = NULL;\r
\r
- /* FIXME: Before MUX setup, use PHY HAL directly. */\r
hal = tcore_object_get_hal(o);\r
-\r
pending = tcore_pending_new(o, 0);\r
\r
- /* TODO:\r
- * Need to mapping or define AT command\r
- * including prefix if neccessary otherwise NULL.\r
- * Response type (e.g. TCORE_AT_SINGLELINE)\r
- */\r
req = tcore_at_request_new("AT+CFUN=0", NULL, TCORE_AT_NO_RESULT);\r
\r
dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
\r
sn_property = calloc(sizeof(TelMiscSNInformation), 1);\r
tcore_plugin_link_property(p, "SN", sn_property);\r
- \r
-#ifdef ENABLE_CMUX\r
- dbg("Registerind for CMUX-UP event");\r
- tcore_object_add_callback(o, "CMUX-UP", on_event_mux_channel_up, p);\r
-#endif\r
+\r
+ if(g_cmux_enable == 1){\r
+ dbg("Registerind for CMUX-UP event");\r
+ tcore_object_add_callback(o, "CMUX-UP", on_event_mux_channel_up, p);\r
+ }\r
\r
dbg("Registering for +XSIM event");\r
tcore_object_add_callback(o, "+XSIM", on_event_bootup_sim_status, NULL);\r
\r
o = tcore_plugin_ref_core_object(p, "modem");\r
hal = tcore_object_get_hal(o);\r
- /* HAL has type itself,\r
- * e.g.) TCORE_HAL_MODE_AT\r
- */\r
- pending = tcore_pending_new(o, 0);\r
\r
- /* Set Metainfo into TcorePending directly\r
- * using TcoreATRequest\r
- * command type: e.g.) SINGLELINE\r
- * response prefix\r
- */\r
+ pending = tcore_pending_new(o, 0);\r
\r
req = tcore_at_request_new("AT+CPAS", "+CPAS", TCORE_AT_SINGLELINE);\r
\r
}\r
#endif\r
\r
-static void on_response_send_umts_msg(TcorePending *plugin, int data_len, const void *data, void *user_data)\r
+static void on_response_send_umts_msg(TcorePending *pending, int data_len, const void *data, void *user_data)\r
{\r
- const TcoreATResponse *resp = data;\r
- struct tresp_sms_send_umts_msg respUmtsInfo;\r
- UserRequest *ur = NULL;\r
+ const TcoreATResponse *at_response = data;\r
+ struct tresp_sms_send_umts_msg resp_umts;\r
+ UserRequest *user_req = NULL;\r
\r
- char *line = NULL , *pResp = NULL;\r
int msg_ref = 0;\r
GSList *tokens = NULL;\r
+ char *gslist_line = NULL, *line_token = NULL;\r
\r
dbg("Entry");\r
\r
- ur = tcore_pending_ref_user_request(plugin);\r
+ user_req = tcore_pending_ref_user_request(pending);\r
\r
- if(NULL == ur)\r
+ if(NULL == user_req)\r
{\r
err("No user request");\r
\r
return;\r
}\r
\r
- if(resp->success > 0)\r
+ memset(&resp_umts, 0x00, sizeof(resp_umts));\r
+\r
+ if(at_response->success > 0) //success\r
{\r
dbg("Response OK");\r
- if(resp->lines)\r
+ if(at_response->lines) //lines present in at_response\r
{\r
- line = (char *)resp->lines->data;\r
- dbg("line is %s",line);\r
+ gslist_line = (char *)at_response->lines->data;\r
+ dbg("gslist_line: [%s]", gslist_line);\r
\r
- tokens = tcore_at_tok_new(line);\r
+ tokens = tcore_at_tok_new(gslist_line); //extract tokens\r
\r
- pResp = g_slist_nth_data(tokens, 0);\r
- if (pResp != NULL)\r
+ line_token = g_slist_nth_data(tokens, 0);\r
+ if (line_token != NULL)\r
{\r
- msg_ref = atoi(pResp);\r
- dbg("Message Reference: %d", msg_ref);\r
+ msg_ref = atoi(line_token);\r
+ dbg("Message Reference: [%d]", msg_ref);\r
\r
- respUmtsInfo.result = SMS_SENDSMS_SUCCESS;\r
+ resp_umts.result = SMS_SENDSMS_SUCCESS;\r
}\r
else\r
{\r
dbg("No Message Reference received");\r
- respUmtsInfo.result = SMS_DEVICE_FAILURE;\r
+ resp_umts.result = SMS_DEVICE_FAILURE;\r
}\r
}\r
- else\r
+ else //no lines in at_response\r
{\r
dbg("No lines");\r
- respUmtsInfo.result = SMS_DEVICE_FAILURE;\r
+ resp_umts.result = SMS_DEVICE_FAILURE;\r
}\r
}\r
- else\r
+ else //failure\r
{\r
dbg("Response NOK");\r
- respUmtsInfo.result = SMS_DEVICE_FAILURE;\r
+ resp_umts.result = SMS_DEVICE_FAILURE;\r
}\r
\r
- tcore_user_request_send_response(ur, TRESP_SMS_SEND_UMTS_MSG, sizeof(struct tresp_sms_send_umts_msg), &respUmtsInfo);\r
+ tcore_user_request_send_response(user_req, TRESP_SMS_SEND_UMTS_MSG, sizeof(resp_umts), &resp_umts);\r
\r
dbg("Exit");\r
return;\r
}\r
\r
-static void on_response_read_msg(TcorePending *plugin, int data_len, const void *data, void *user_data)\r
+static void on_response_read_msg(TcorePending *pending, int data_len, const void *data, void *user_data)\r
{\r
- const TcoreATResponse *atResp = data;\r
- struct tresp_sms_read_msg respReadMsg;\r
- UserRequest *ur = NULL;\r
- GSList *tokens=NULL, *lines = NULL;\r
- char * line = NULL, *pResp = NULL , *pdu = NULL, *temp_pdu = NULL;\r
- int ScLength = 0;\r
- int rtn = 0 , i = 0;\r
- int stat = 0 , alpha = 0 , length = 0;\r
+ const TcoreATResponse *at_response = data;\r
+ struct tresp_sms_read_msg resp_read_msg;\r
+ UserRequest *user_req = NULL;\r
+\r
+ GSList *tokens=NULL;\r
+ char *gslist_line = NULL, *line_token = NULL, *byte_pdu = NULL, *hex_pdu = NULL;\r
+ int sca_length = 0;\r
+ int msg_status = 0, alpha_id = 0, pdu_len = 0;\r
int index = (int)(uintptr_t)user_data;\r
\r
dbg("Entry");\r
dbg("index: [%d]", index);\r
- dbg("lines: [%p]", atResp->lines);\r
+ dbg("lines: [%p]", at_response->lines);\r
+ g_slist_foreach(at_response->lines, print_glib_list_elem, NULL); //for debug log\r
\r
- g_slist_foreach(atResp->lines, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
-\r
- ur = tcore_pending_ref_user_request(plugin);\r
- if (NULL == ur)\r
+ user_req = tcore_pending_ref_user_request(pending);\r
+ if (NULL == user_req)\r
{\r
err("No user request");\r
\r
return;\r
}\r
\r
- dbg("success: [%02x]", atResp->success);\r
+ memset(&resp_read_msg, 0x00, sizeof(resp_read_msg));\r
\r
- if (atResp->success > 0)\r
+ if (at_response->success > 0)\r
{\r
- if (atResp->lines)\r
+ dbg("Response OK");\r
+ if (at_response->lines)\r
{\r
- line = (char *)atResp->lines->data;\r
+ //fetch first line\r
+ gslist_line = (char *)at_response->lines->data;\r
\r
- dbg("response Ok line is %s",line);\r
+ dbg("gslist_line: [%s]", gslist_line);\r
\r
- tokens = tcore_at_tok_new(line);\r
+ tokens = tcore_at_tok_new(gslist_line);\r
+ dbg("Number of tokens: [%d]", g_slist_length(tokens));\r
g_slist_foreach(tokens, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
- dbg(" length of tokens is %d\n", g_slist_length(tokens));\r
\r
- pResp = g_slist_nth_data(tokens, 0);\r
- if (pResp != NULL)\r
+ line_token = g_slist_nth_data(tokens, 0); //First Token: Message Status\r
+ if (line_token != NULL)\r
{\r
- //ToDO msg status mapping needs to be done\r
- stat = atoi(pResp);\r
- dbg("stat is %d",stat);\r
- switch (stat)\r
+ msg_status = atoi(line_token);\r
+ dbg("msg_status is %d",msg_status);\r
+ switch (msg_status)\r
{\r
case AT_REC_UNREAD:\r
- respReadMsg.dataInfo.msgStatus = SMS_STATUS_UNREAD;\r
+ resp_read_msg.dataInfo.msgStatus = SMS_STATUS_UNREAD;\r
break;\r
\r
case AT_REC_READ:\r
- respReadMsg.dataInfo.msgStatus = SMS_STATUS_READ;\r
+ resp_read_msg.dataInfo.msgStatus = SMS_STATUS_READ;\r
break;\r
\r
case AT_STO_UNSENT:\r
- respReadMsg.dataInfo.msgStatus = SMS_STATUS_UNSENT;\r
+ resp_read_msg.dataInfo.msgStatus = SMS_STATUS_UNSENT;\r
break;\r
\r
case AT_STO_SENT:\r
- respReadMsg.dataInfo.msgStatus = SMS_STATUS_SENT;\r
+ resp_read_msg.dataInfo.msgStatus = SMS_STATUS_SENT;\r
break;\r
\r
case AT_ALL: //Fall Through\r
default: //Fall Through\r
- respReadMsg.dataInfo.msgStatus = SMS_STATUS_RESERVED;\r
+ resp_read_msg.dataInfo.msgStatus = SMS_STATUS_RESERVED;\r
break;\r
}\r
}\r
\r
- pResp = g_slist_nth_data(tokens, 1);\r
- if (pResp != NULL)\r
+ line_token = g_slist_nth_data(tokens, 1); //Second Token: AlphaID\r
+ if (line_token != NULL)\r
{\r
- alpha = atoi(pResp);\r
- dbg("alpha is %d",alpha);\r
+ alpha_id = atoi(line_token);\r
+ dbg("AlphaID: [%d]", alpha_id);\r
}\r
\r
- pResp = g_slist_nth_data(tokens, 2);\r
- if (pResp != NULL)\r
+ line_token = g_slist_nth_data(tokens, 2); //Third Token: Length\r
+ if (line_token != NULL)\r
{\r
- length = atoi(pResp);\r
- dbg("length is %d",length);\r
+ pdu_len = atoi(line_token);\r
+ dbg("Length: [%d]", pdu_len);\r
}\r
\r
- lines = atResp->lines;\r
- lines = lines->next;\r
- line = (char *)lines->data;\r
- tokens = tcore_at_tok_new(line);\r
-\r
- temp_pdu = g_slist_nth_data(tokens, 0);\r
- if (temp_pdu != NULL)\r
- {\r
- dbg("temp pdu is %s",temp_pdu);\r
- pdu = util_hexStringToBytes(temp_pdu);\r
- ScLength = (int)pdu[0];\r
+ //fetch second line\r
+ gslist_line = (char *)at_response->lines->next->data;\r
\r
- respReadMsg.dataInfo.simIndex = index; //Retrieving index stored as part of req userdata\r
+ dbg("gslist_line: [%s]", gslist_line);\r
\r
+ tokens = tcore_at_tok_new(gslist_line);\r
+ dbg("Number of tokens: [%d]", g_slist_length(tokens));\r
+ g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log\r
\r
- if(0 == ScLength)\r
+ hex_pdu = g_slist_nth_data(tokens, 0); //Fetch SMS PDU\r
+ if (NULL != hex_pdu)\r
{\r
+ util_hex_dump(" ", sizeof(hex_pdu), (void *)hex_pdu);\r
+\r
+ byte_pdu = util_hexStringToBytes(hex_pdu);\r
+\r
+ sca_length = (int)byte_pdu[0];\r
\r
- respReadMsg.dataInfo.smsData.msgLength = length - (ScLength+1) ;\r
+ resp_read_msg.dataInfo.simIndex = index; //Retrieving index stored as user_data\r
\r
- if ((respReadMsg.dataInfo.smsData.msgLength >0) && (0xff >= respReadMsg.dataInfo.smsData.msgLength))\r
+ if(0 == sca_length)\r
{\r
dbg("SCA Length is 0");\r
\r
- memset(respReadMsg.dataInfo.smsData.sca, 0, TAPI_SIM_SMSP_ADDRESS_LEN);\r
+ resp_read_msg.dataInfo.smsData.msgLength = pdu_len - (sca_length+1);\r
+ dbg("msgLength: [%d]", resp_read_msg.dataInfo.smsData.msgLength);\r
\r
- /*\r
- if(read_data.SmsData.MsgLength > SMS_SMDATA_SIZE_MAX)\r
+ if ((resp_read_msg.dataInfo.smsData.msgLength > 0)\r
+ && (resp_read_msg.dataInfo.smsData.msgLength <= 0xff))\r
{\r
- respReadMsg.dataInfo.smsData.msgLength = SMS_SMDATA_SIZE_MAX;\r
- }\r
- */\r
+ memset(resp_read_msg.dataInfo.smsData.sca, 0, TAPI_SIM_SMSP_ADDRESS_LEN);\r
+ memcpy(resp_read_msg.dataInfo.smsData.tpduData, &byte_pdu[2], resp_read_msg.dataInfo.smsData.msgLength);\r
\r
- memcpy(respReadMsg.dataInfo.smsData.tpduData, &pdu[2], respReadMsg.dataInfo.smsData.msgLength);\r
- respReadMsg.result = SMS_SUCCESS;\r
+ resp_read_msg.result = SMS_SUCCESS;\r
+ }\r
+ else\r
+ {\r
+ err("Invalid Message Length");\r
\r
- rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
+ resp_read_msg.result = SMS_INVALID_PARAMETER_FORMAT;\r
+ }\r
}\r
else\r
{\r
- dbg("Invalid Message Length");\r
- respReadMsg.result = SMS_INVALID_PARAMETER_FORMAT;\r
- rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
- }\r
+ dbg("SCA Length is not 0");\r
\r
- }\r
- else //SCLength is Not 0\r
- {\r
- respReadMsg.dataInfo.smsData.msgLength = (length - (ScLength+1));\r
- dbg("data msg len is %d", respReadMsg.dataInfo.smsData.msgLength);\r
-\r
- if ((respReadMsg.dataInfo.smsData.msgLength >0) && (0xff >= respReadMsg.dataInfo.smsData.msgLength))\r
- {\r
- memcpy(respReadMsg.dataInfo.smsData.sca, (char*)pdu,(ScLength+1));\r
+ resp_read_msg.dataInfo.smsData.msgLength = (pdu_len - (sca_length+1));\r
+ dbg("msgLength: [%d]", resp_read_msg.dataInfo.smsData.msgLength);\r
\r
- /*LastSemiOctect = pdu[ScLength + 1] & 0xf0;\r
- if(LastSemiOctect == 0xf0)\r
+ if ((resp_read_msg.dataInfo.smsData.msgLength > 0)\r
+ && (resp_read_msg.dataInfo.smsData.msgLength <= 0xff))\r
{\r
- respReadMsg.dataInfo.smsData.sca[0] = (ScLength-1)*2 - 1;\r
+ memcpy(resp_read_msg.dataInfo.smsData.sca, (char *)byte_pdu, (sca_length+1));\r
+ memcpy(resp_read_msg.dataInfo.smsData.tpduData, &byte_pdu[sca_length+1], resp_read_msg.dataInfo.smsData.msgLength);\r
+\r
+ util_hex_dump(" ", SMS_SMSP_ADDRESS_LEN, (void *)resp_read_msg.dataInfo.smsData.sca);\r
+ util_hex_dump(" ", (SMS_SMDATA_SIZE_MAX + 1), (void *)resp_read_msg.dataInfo.smsData.tpduData);\r
+ util_hex_dump(" ", sizeof(byte_pdu), (void *)byte_pdu);\r
+\r
+ resp_read_msg.result = SMS_SUCCESS;\r
}\r
else\r
{\r
- respReadMsg.dataInfo.smsData.sca[0] = (ScLength-1)*2;\r
- }\r
- */\r
- \r
-\r
- //if(respReadMsg.dataInfo.smsData.msgLength > SMS_SMDATA_SIZE_MAX)\r
- // {\r
- // respReadMsg.dataInfo.smsData.msgLength = SMS_SMDATA_SIZE_MAX;\r
- // }\r
+ err("Invalid Message Length");\r
\r
- for(i=0;i<(ScLength+1);i++)\r
- {\r
- dbg("SCA is [%2x] ", respReadMsg.dataInfo.smsData.sca[i]);\r
+ resp_read_msg.result = SMS_INVALID_PARAMETER_FORMAT;\r
}\r
-\r
- memcpy(respReadMsg.dataInfo.smsData.tpduData, &pdu[ScLength+1], respReadMsg.dataInfo.smsData.msgLength);\r
- respReadMsg.result = SMS_SUCCESS;\r
-\r
- dbg("read tpdu is %s sca is %s pdu %s",respReadMsg.dataInfo.smsData.tpduData, respReadMsg.dataInfo.smsData.sca,pdu);\r
-\r
- rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
}\r
- else\r
- {\r
- dbg("Invalid Message Length");\r
- respReadMsg.result = SMS_INVALID_PARAMETER_FORMAT;\r
- rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
- }\r
-\r
+ }\r
+ else\r
+ {\r
+ dbg("NULL PDU");\r
+ resp_read_msg.result = SMS_PHONE_FAILURE;\r
}\r
}\r
else\r
{\r
- dbg("Read PDU Is NULL");\r
- }\r
- }\r
- else\r
- {\r
- dbg("No lines in AT response");\r
+ dbg("No lines");\r
+ resp_read_msg.result = SMS_PHONE_FAILURE;\r
}\r
}\r
else\r
{\r
- dbg("Response NOK");\r
+ err("Response NOK");\r
+ resp_read_msg.result = SMS_PHONE_FAILURE;\r
}\r
+\r
+ tcore_user_request_send_response(user_req, TRESP_SMS_READ_MSG, sizeof(resp_read_msg), &resp_read_msg);\r
+\r
+ dbg("Exit");\r
return;\r
}\r
\r
-static void on_response_get_msg_indices(TcorePending *p, int data_len, const void *data, void *user_data)\r
+static void on_response_get_msg_indices(TcorePending *pending, int data_len, const void *data, void *user_data)\r
{\r
- UserRequest *ur = NULL;\r
- struct tresp_sms_get_storedMsgCnt * respStoredMsgCnt_prev = NULL;\r
- struct tresp_sms_get_storedMsgCnt respStoredMsgCnt;\r
- const TcoreATResponse *atResp = data;\r
+ const TcoreATResponse *at_response = data;\r
+ struct tresp_sms_get_storedMsgCnt resp_stored_msg_cnt;\r
+ UserRequest *user_req = NULL;\r
+ struct tresp_sms_get_storedMsgCnt *resp_stored_msg_cnt_prev = NULL;\r
+\r
GSList *tokens = NULL;\r
- char *line = NULL , *pResp = NULL;\r
- int noOfLines = 0 , i = 0;\r
+ char *gslist_line = NULL, *line_token = NULL;\r
+ int gslist_line_count = 0, ctr_loop = 0;\r
\r
- //memset(&respStoredMsgCnt, 0, sizeof(struct tresp_sms_get_storedMsgCnt));\r
+ dbg("Entry");\r
\r
- respStoredMsgCnt_prev = (struct tresp_sms_get_storedMsgCnt *)user_data;\r
- ur = tcore_pending_ref_user_request(p);\r
+ resp_stored_msg_cnt_prev = (struct tresp_sms_get_storedMsgCnt *)user_data;\r
+ user_req = tcore_pending_ref_user_request(pending);\r
\r
- respStoredMsgCnt.result = SMS_SENDSMS_SUCCESS;\r
+ memset(&resp_stored_msg_cnt, 0x00, sizeof(resp_stored_msg_cnt));\r
\r
- if (atResp->success)\r
- {\r
- dbg("Response OK");\r
- if(atResp->lines)\r
- {\r
- noOfLines = g_slist_length(atResp->lines);\r
-\r
- if (noOfLines > SMS_GSM_SMS_MSG_NUM_MAX)\r
- noOfLines = SMS_GSM_SMS_MSG_NUM_MAX;\r
+ if (at_response->success)\r
+ {\r
+ dbg("Response OK");\r
+ if(at_response->lines)\r
+ {\r
+ gslist_line_count = g_slist_length(at_response->lines);\r
\r
- dbg("no of lines is %d", noOfLines);\r
+ if (gslist_line_count > SMS_GSM_SMS_MSG_NUM_MAX)\r
+ gslist_line_count = SMS_GSM_SMS_MSG_NUM_MAX;\r
\r
- g_slist_foreach(atResp->lines, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
+ dbg("Number of lines: [%d]", gslist_line_count);\r
+ g_slist_foreach(at_response->lines, print_glib_list_elem, NULL); //for debug log\r
\r
- for (i = 0; i < noOfLines ; i++)\r
+ for (ctr_loop = 0; ctr_loop < gslist_line_count ; ctr_loop++)\r
{\r
- line = (char *)g_slist_nth_data(atResp->lines, i); /* Fetch Line i */\r
+ gslist_line = (char *)g_slist_nth_data(at_response->lines, ctr_loop); /* Fetch Line i */\r
\r
- dbg("line %d is %s", i, line);\r
+ dbg("gslist_line [%d] is [%s]", ctr_loop, gslist_line);\r
\r
- if (line != NULL)\r
+ if (NULL != gslist_line)\r
{\r
- tokens = tcore_at_tok_new(line);\r
+ tokens = tcore_at_tok_new(gslist_line);\r
\r
g_slist_foreach(tokens, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
\r
- pResp = g_slist_nth_data(tokens, 0);\r
- if (pResp != NULL)\r
+ line_token = g_slist_nth_data(tokens, 0);\r
+ if (NULL != line_token)\r
{\r
- respStoredMsgCnt.storedMsgCnt.indexList[i] = atoi(pResp);\r
+ resp_stored_msg_cnt.storedMsgCnt.indexList[ctr_loop] = atoi(line_token);\r
}\r
else\r
{\r
- respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
- dbg("pResp of line %d is NULL", i);\r
+ resp_stored_msg_cnt.result = SMS_DEVICE_FAILURE;\r
+ dbg("line_token of gslist_line [%d] is NULL", ctr_loop);\r
\r
+ break;\r
}\r
}\r
else\r
{\r
- respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
- dbg("line %d is NULL", i);\r
+ resp_stored_msg_cnt.result = SMS_DEVICE_FAILURE;\r
+ dbg("gslist_line [%d] is NULL", ctr_loop);\r
+\r
+ break;\r
}\r
}\r
}\r
else\r
{\r
dbg("No lines.");\r
- /* Check if used count is zero */\r
- if(respStoredMsgCnt_prev->storedMsgCnt.usedCount == 0)\r
- respStoredMsgCnt.result = SMS_SENDSMS_SUCCESS;\r
+ if(resp_stored_msg_cnt_prev->storedMsgCnt.usedCount == 0) //Check if used count is zero\r
+ {\r
+ resp_stored_msg_cnt.result = SMS_SENDSMS_SUCCESS;\r
+ }\r
else\r
- respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
+ {\r
+ resp_stored_msg_cnt.result = SMS_DEVICE_FAILURE;\r
+ }\r
}\r
}\r
else\r
{\r
dbg("Respnose NOK");\r
- respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
+ resp_stored_msg_cnt.result = SMS_DEVICE_FAILURE;\r
}\r
\r
- for(i = 0; i < noOfLines ; i++)\r
- dbg("index: [%d]", respStoredMsgCnt.storedMsgCnt.indexList[i]);\r
-\r
- respStoredMsgCnt.storedMsgCnt.totalCount = respStoredMsgCnt_prev->storedMsgCnt.totalCount;\r
- respStoredMsgCnt.storedMsgCnt.usedCount = respStoredMsgCnt_prev->storedMsgCnt.usedCount;\r
+ resp_stored_msg_cnt.storedMsgCnt.totalCount = resp_stored_msg_cnt_prev->storedMsgCnt.totalCount;\r
+ resp_stored_msg_cnt.storedMsgCnt.usedCount = resp_stored_msg_cnt_prev->storedMsgCnt.usedCount;\r
\r
- dbg("total: [%d]", respStoredMsgCnt.storedMsgCnt.totalCount);\r
- dbg("used: [%d]", respStoredMsgCnt.storedMsgCnt.usedCount);\r
- dbg("result: [%d]", respStoredMsgCnt.result);\r
+ util_sms_free_memory(resp_stored_msg_cnt_prev);\r
\r
- util_sms_free_memory(respStoredMsgCnt_prev);\r
-\r
- tcore_user_request_send_response(ur, TRESP_SMS_GET_STORED_MSG_COUNT, sizeof(struct tresp_sms_get_storedMsgCnt), &respStoredMsgCnt);\r
+ dbg("total: [%d]", resp_stored_msg_cnt.storedMsgCnt.totalCount);\r
+ dbg("used: [%d]", resp_stored_msg_cnt.storedMsgCnt.usedCount);\r
+ dbg("result: [%d]", resp_stored_msg_cnt.result);\r
+ for(ctr_loop = 0; ctr_loop < gslist_line_count; ctr_loop++)\r
+ {\r
+ dbg("index: [%d]", resp_stored_msg_cnt.storedMsgCnt.indexList[ctr_loop]);\r
+ }\r
\r
+ tcore_user_request_send_response(user_req, TRESP_SMS_GET_STORED_MSG_COUNT, sizeof(resp_stored_msg_cnt), &resp_stored_msg_cnt);\r
\r
+ dbg("Exit");\r
+ return;\r
}\r
\r
-static void on_response_get_storedMsgCnt(TcorePending *p, int data_len, const void *data, void *user_data)\r
+static void on_response_get_storedMsgCnt(TcorePending *pending, int data_len, const void *data, void *user_data)\r
{\r
UserRequest *ur = NULL, *ur_dup = NULL;\r
struct tresp_sms_get_storedMsgCnt *respStoredMsgCnt = NULL;\r
\r
respStoredMsgCnt = malloc(sizeof(struct tresp_sms_get_storedMsgCnt));\r
\r
- ur = tcore_pending_ref_user_request(p);\r
+ ur = tcore_pending_ref_user_request(pending);\r
ur_dup = tcore_user_request_ref(ur);\r
- o = tcore_pending_ref_core_object(p);\r
+ o = tcore_pending_ref_core_object(pending);\r
\r
if (atResp->success > 0)\r
{\r
{\r
usedCnt =atoi(pResp);\r
dbg("used cnt is %d",usedCnt);\r
-\r
}\r
\r
pResp = g_slist_nth_data(tokens, 1);\r
\r
static void on_response_get_sca(TcorePending *pending, int data_len, const void *data, void *user_data)\r
{\r
- //Response is expected in this format +CSCA: <sca>,<tosca>\r
-\r
- UserRequest *ur;\r
+ const TcoreATResponse *at_response = data;\r
struct tresp_sms_get_sca respGetSca;\r
- GSList *tokens=NULL;\r
+ UserRequest *user_req = NULL;\r
\r
- //copies the AT response data to resp\r
- const TcoreATResponse *atResp = data;\r
- char *line = NULL, *sca = NULL, *typeOfAddress = NULL;\r
+ GSList *tokens = NULL;\r
+ char *gslist_line = NULL, *sca_addr = NULL, *sca_toa = NULL;\r
\r
- // +CSCA: <sca number>,<sca type>\r
+ dbg("Entry");\r
\r
- memset(&respGetSca, 0, sizeof(struct tresp_sms_get_sca));\r
+ memset(&respGetSca, 0, sizeof(respGetSca));\r
\r
- ur = tcore_pending_ref_user_request(pending);\r
- if (atResp->success)\r
+ user_req = tcore_pending_ref_user_request(pending);\r
+\r
+ if (at_response->success)\r
{\r
dbg("Response OK");\r
- if(atResp->lines)\r
+ if(at_response->lines)\r
{\r
- line = (char*)atResp->lines->data;\r
- tokens = tcore_at_tok_new(line);\r
- sca = g_slist_nth_data(tokens, 0);\r
- typeOfAddress = g_slist_nth_data(tokens, 1);\r
- if ((sca) && (typeOfAddress))\r
+ gslist_line = (char *)at_response->lines->data;\r
+\r
+ tokens = tcore_at_tok_new(gslist_line);\r
+ sca_addr = g_slist_nth_data(tokens, 0);\r
+ sca_toa = g_slist_nth_data(tokens, 1);\r
+\r
+ if ((NULL != sca_addr)\r
+ && (NULL != sca_toa))\r
{\r
- dbg("sca and address type are %s %s", sca, typeOfAddress);\r
- respGetSca.scaAddress.dialNumLen = strlen(sca);\r
- if(atoi(typeOfAddress) == 145)\r
- {\r
- respGetSca.scaAddress.typeOfNum = SIM_TON_INTERNATIONAL;\r
- }\r
- else\r
- {\r
- respGetSca.scaAddress.typeOfNum = SIM_TON_NATIONAL;\r
- }\r
- respGetSca.scaAddress.numPlanId = 0;\r
+ dbg("sca_addr: [%s]. sca_toa: [%s]", sca_addr, sca_toa);\r
+\r
+ respGetSca.scaAddress.dialNumLen = strlen(sca_addr);\r
+\r
+ if(145 == atoi(sca_toa))\r
+ {\r
+ respGetSca.scaAddress.typeOfNum = SIM_TON_INTERNATIONAL;\r
+ }\r
+ else\r
+ {\r
+ respGetSca.scaAddress.typeOfNum = SIM_TON_NATIONAL;\r
+ }\r
+\r
+ respGetSca.scaAddress.numPlanId = 0;\r
+\r
+ memcpy(respGetSca.scaAddress.diallingNum, sca_addr, strlen(sca_addr));\r
\r
- memcpy(respGetSca.scaAddress.diallingNum, sca, strlen(sca));\r
+ dbg("len [%d], sca_addr [%s], TON [%d], NPI [%d]", respGetSca.scaAddress.dialNumLen, respGetSca.scaAddress.diallingNum, respGetSca.scaAddress.typeOfNum, respGetSca.scaAddress.numPlanId);\r
\r
- dbg("len %d, sca %s, TON %d, NPI %d",respGetSca.scaAddress.dialNumLen,respGetSca.scaAddress.diallingNum,respGetSca.scaAddress.typeOfNum,respGetSca.scaAddress.numPlanId);\r
- respGetSca.result = SMS_SENDSMS_SUCCESS;\r
+ respGetSca.result = SMS_SENDSMS_SUCCESS;\r
+ }\r
+ else\r
+ {\r
+ err("sca_addr OR sca_toa NULL");\r
+ respGetSca.result = SMS_DEVICE_FAILURE;\r
}\r
}\r
+ else\r
+ {\r
+ dbg("NO Lines");\r
+ respGetSca.result = SMS_DEVICE_FAILURE;\r
+ }\r
}\r
else\r
{\r
respGetSca.result = SMS_DEVICE_FAILURE;\r
}\r
\r
- tcore_user_request_send_response(ur, TRESP_SMS_GET_SCA, sizeof(struct tresp_sms_get_sca), &respGetSca);\r
- return;\r
+ tcore_user_request_send_response(user_req, TRESP_SMS_GET_SCA, sizeof(respGetSca), &respGetSca);\r
\r
+ dbg("Exit");\r
+ return;\r
}\r
\r
static void on_response_set_sca(TcorePending *pending, int data_len, const void *data, void *user_data)\r
dbg("alpha id len is %d", alpha_id_len);\r
\r
memcpy(temp_data,&(setSmsParams->params.szAlphaId),alpha_id_len);\r
- memcpy((temp_data+alpha_id_len), &(setSmsParams->params.paramIndicator), 1); \r
+ memcpy((temp_data+alpha_id_len), &(setSmsParams->params.paramIndicator), 1);\r
\r
dest_addr = calloc(sizeof(struct telephony_sms_AddressInfo),1);\r
svc_addr = calloc(sizeof(struct telephony_sms_AddressInfo),1);\r
{\r
dbg("dest_addr is not present");\r
dest_addr[0] = 0;\r
- \r
+\r
}else\r
{\r
dest_addr[0] = setSmsParams->params.tpDestAddr.dialNumLen;\r
dest_addr[1] = (((setSmsParams->params.tpDestAddr.typeOfNum << 4) | setSmsParams->params.tpDestAddr.numPlanId) | 0x80);\r
memcpy(&(dest_addr[2]),setSmsParams->params.tpDestAddr.diallingNum,setSmsParams->params.tpDestAddr.dialNumLen);\r
dbg("dest_addr is %s",dest_addr);\r
- \r
- } \r
+\r
+ }\r
\r
if (setSmsParams->params.tpSvcCntrAddr.dialNumLen == 0)\r
{\r
dbg("svc_addr is not present");\r
svc_addr[0] = 0;\r
- \r
+\r
}else\r
{\r
svc_addr[0] = setSmsParams->params.tpSvcCntrAddr.dialNumLen;\r
svc_addr[1] = (((setSmsParams->params.tpSvcCntrAddr.typeOfNum << 4) | setSmsParams->params.tpSvcCntrAddr.numPlanId) | 0x80);\r
memcpy(&(svc_addr[2]),&(setSmsParams->params.tpSvcCntrAddr.diallingNum),setSmsParams->params.tpSvcCntrAddr.dialNumLen);\r
dbg("svc_addr is %s %s",svc_addr, setSmsParams->params.tpSvcCntrAddr.diallingNum);\r
- \r
- } \r
+\r
+ }\r
\r
memcpy((temp_data+alpha_id_len+1), dest_addr, setSmsParams->params.tpDestAddr.dialNumLen);\r
memcpy((temp_data+alpha_id_len+setSmsParams->params.tpDestAddr.dialNumLen+1), svc_addr, setSmsParams->params.tpSvcCntrAddr.dialNumLen);\r
\r
dbg("temp data and len %s %d",temp_data, len);\r
\r
- \r
+\r
//EFsmsp file size is 28 +Y bytes (Y is alpha id size)\r
encoded_data = calloc((setSmsParams->params.alphaIdLen+28),1);\r
\r
dbg("Exit");\r
return TCORE_RETURN_SUCCESS;\r
}\r
- return TRUE; \r
+ return TRUE;\r
}\r
\r
static TReturn get_paramcnt(CoreObject *obj, UserRequest *ur)\r