4 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
28 #include <arpa/inet.h>
29 #include <tapi_common.h>
31 #include <TapiUtility.h>
32 #include <ITapiNetText.h>
37 #include "sms_util_cdma.h"
39 /* Global Variables */
41 unsigned int SmsMsgId = 0;
42 unsigned char tp_mr = 0x00;
44 #define SMS_PTP_MSG 0x0
46 #define DIGIT_MODE_BIT 0x80
47 #define NUMBER_MODE_BIT 0x40
48 #define DIGIT_MODE_OFFSET 7
49 #define NUMBER_MODE_OFFSET 6
50 #define NIBBLE_BIT_LENGTH 4
51 #define SUBPARAM_LEN_VAL 0x03
56 const char *cmdString[] = {
57 "TAPI_SERVICE_SMS_SEND_UMTS_MSG",
58 "TAPI_SERVICE_SMS_READ_MSG",
59 "TAPI_SERVICE_SMS_SAVE_MSG",
60 "TAPI_SERVICE_SMS_DELETE_MSG",
61 "TAPI_SERVICE_SMS_GET_COUNT",
62 "TAPI_SERVICE_SMS_GET_SCA",
63 "TAPI_SERVICE_SMS_SET_SCA",
64 "TAPI_SERVICE_SMS_GET_CB_CONFIG",
65 "TAPI_SERVICE_SMS_SET_CB_CONFIG",
66 "TAPI_SERVICE_SMS_SET_MEM_STATUS",
67 "TAPI_SERVICE_SMS_GET_PREF_BEARER",
68 "TAPI_SERVICE_SMS_SET_PREF_BEARER",
69 "TAPI_SERVICE_SMS_SET_DELIVERY_REPORT",
70 "TAPI_SERVICE_SMS_SET_MSG_STATUS",
71 "TAPI_SERVICE_SMS_GET_PARAMS",
72 "TAPI_SERVICE_SMS_SET_PARAMS",
73 "TAPI_SERVICE_SMS_GET_PARAMCNT",
74 "TAPI_SERVICE_SMS_SEND_CDMA_MSG"
77 static void on_resp_send_msg(TapiHandle *handle, int result, void *data,
79 static void on_resp_send_cdma_msg(TapiHandle *handle, int result, void *data,
81 static void on_resp_read_msg(TapiHandle *handle, int result, void *data,
83 static void on_resp_save_msg(TapiHandle *handle, int result, void *data,
85 static void on_resp_DeliverReport_msg(TapiHandle *handle, int result,
86 void *data, void *user_data);
87 int _util_hexstring_to_asciistring(const unsigned char *hex_string, unsigned char *ascii_string, int hex_len);
89 unsigned int SmsUtilEncodeSca(TelSmsAddressInfo_t *sca, unsigned char *sca_num);
91 static int CdmaCbSetting(MManager *mm, struct menu_data *menu);
93 int _util_hexstring_to_asciistring(const unsigned char *hex_string, unsigned char *ascii_string, int hex_len)
97 if (hex_string[hex_len - 1]>>4 == 0x0f)
98 ascii_len = (hex_len * 2) - 1;
100 ascii_len = (hex_len * 2);
102 for (i = 0; i < ascii_len; i++) {
104 ascii_string[i] = (hex_string[i/2] & 0x0f) + '0';
106 ascii_string[i] = ((hex_string[i/2] >> 4)) + '0';
108 ascii_string[ascii_len] = '\0';
112 unsigned int SmsUtilEncodeSca(TelSmsAddressInfo_t *sca, unsigned char *sca_num)
114 unsigned int sca_length = 0;
115 unsigned int additional_len = 0;
116 unsigned local_index, j;
118 sca->Npi = TAPI_SIM_NPI_ISDN_TEL;
119 sca->Ton = TAPI_SIM_TON_UNKNOWN;
120 if (sca_num[0] == '+') {
121 sca->Ton = TAPI_SIM_TON_INTERNATIONAL;
124 sca_length = strlen((char *)sca_num) - additional_len;
125 if (sca_length % 2 == 0) {
126 for (local_index = additional_len, j = 0; local_index < sca_length; local_index += 2, j++)
127 sca->szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
129 for (local_index = additional_len, j = 0; local_index < sca_length; local_index += 2, j++) {
130 if (local_index == (sca_length - 1))
131 sca->szDiallingNum[j] = ((0xF0) | (sca_num[local_index] & 0x0F));
133 sca->szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
136 sca->szDiallingNum[(sca_length+1)/2] = '\0';
137 sca->DialNumLen = (sca_length+1)/2;
139 return sca->DialNumLen;
143 static BOOL EncodeCdmaSmsParamTeleservice(int teleservice_id , ParamTeleserv_t *ParamTeleserv)
147 if (ParamTeleserv == NULL) {
148 printf("[EncodeCdmaSmsParamTeleservice] NULL pointer \n");
152 switch (teleservice_id) {
153 case SMS_3GPP2_TELESERVICE_ID_CPT:
154 case SMS_3GPP2_TELESERVICE_ID_CCMT:
155 case SMS_3GPP2_TELESERVICE_ID_VMN:
156 case SMS_3GPP2_TELESERVICE_ID_WAP:
165 ParamTeleserv->param_id = SMS_3GPP2_PARAM_ID_TELESERVICE_ID;
166 ParamTeleserv->param_len = 2;
167 ParamTeleserv->teleserv_id = teleservice_id;
168 printf("ParamTeleserv->teleserv_id[%d]\n", ParamTeleserv->teleserv_id);
173 static BOOL EncodeCdmaSmsParamMsgId(int type, ParamMsgId_t *ParamMsg)
177 if (ParamMsg == NULL) {
178 printf("[EncodeCdmaSmsParamMsgId] NULL pointer \n");
182 ParamMsg->param_id = SMS_3GPP2_BSUB_ID_MESSAGE_IDENTIFIER;
183 ParamMsg->param_len = 3;
184 ParamMsg->type = type;
185 ParamMsg->msg_id = SmsMsgId++;
192 static BOOL EncodeCdmaSmsParamUserData(char *SendTxt, ParamUserData_t *ParamUser)
197 if (ParamUser == NULL || SendTxt == NULL) {
198 printf("[EncodeCdmaSmsParamUserData] NULL pointer \n");
202 length = strlen(SendTxt);
203 if (length > MAXLENGTH_SMS_USER_DATA) {
204 printf("[EncodeCdmaSmsParamUserData] Text is too long \n");
208 ParamUser->param_id = SMS_3GPP2_BSUB_ID_USER_DATA;
209 ParamUser->encoding = SMS_3GPP2_BSUB_UD_ASCII7BIT_ENCODING;
210 strncpy((char *)ParamUser->CHARi, SendTxt, length);
212 ParamUser->len = length;
214 ParamUser->param_len = length;
221 static BOOL EncodeCdmaSmsSubmitTpdu(MManager *mm,
222 char *diallingNum, int dialNumLen, char *msgTxt, int msg_len)
225 unsigned char *encoded_msg, digit_mode_val = 0, number_mode_val = 0;
226 unsigned char hex_string[SMS_ADDRESS_LEN_MAX + 1] = { 0, };
228 TelSmsDatapackageInfo_t data_package;
231 ParamTeleserv_t param_teleservice = {0, };
232 ParamMsgId_t param_msg = {0, };
233 ParamUserData_t param_user = {0, };
235 msg("EncodeCdmaSmsSubmitTpdu:Enter");
237 handle = menu_manager_ref_user_data(mm);
238 encoded_msg = g_try_malloc0(sizeof(TelSmsDatapackageInfo_t));
239 if (NULL == encoded_msg) {
240 msg("Memory Allocation Failed for CDMA Data Package");
244 /* Converting Destination number from ASCII to hex*/
245 if (__sms_asciistring_to_hex(diallingNum, hex_string, dialNumLen) == FALSE) {
246 msg("__sms_asciistring_to_hex() failed.");
251 msg("Dump of hex string");
252 __util_hex_dump(" ", dialNumLen/2, hex_string);
254 /* First byte specifies Messaging Type*/
255 encoded_msg[index++] = SMS_PTP_MSG;
257 /* 3GPP2 C.S0015-A section:3.4.3.1 Teleservice Identifier*/
258 /* 1 TeleService Identifier */
260 EncodeCdmaSmsParamTeleservice(SMS_3GPP2_TELESERVICE_ID_CCMT, ¶m_teleservice);
261 encoded_msg[index++] = param_teleservice.param_id; /*TeleService Identifier Tag e.g SMS_PARAMID_TELESERVICE_ID*/
262 encoded_msg[index++] = param_teleservice.param_len; /*TeleService Identifier Length*/
263 data = htons(param_teleservice.teleserv_id); /*Conversion of Little Endian*/
264 memcpy(encoded_msg + index, &(data), sizeof(unsigned short));
265 index += sizeof(unsigned short);
268 /* 3GPP2 C.S0015-A section:3.4.3.3 Address Parameters*/
269 /* 1 Destination Address */
271 int dest_addr_offset = 2, previous_addr_index;
272 unsigned char num_fields[SMS_ADDRESS_LEN_MAX + 1] = { 0, };
274 encoded_msg[index++] = SMS_3GPP2_PARAM_ID_DESTINATION_ADDRESS;
275 /* Fill the length value at the end */
276 unsigned char *addr_len = &encoded_msg[index++]; /* param length */
277 previous_addr_index = index;
279 encoded_msg[index] = ((digit_mode_val << (DIGIT_MODE_OFFSET)) & DIGIT_MODE_BIT);
280 encoded_msg[index] = ((number_mode_val << (NUMBER_MODE_OFFSET)) & NUMBER_MODE_BIT);
282 bitarray_copy(num_fields, 0, dialNumLen * CHAR_BIT, &encoded_msg[index], dest_addr_offset);
285 bitarray_copy(hex_string, 0, dialNumLen * NIBBLE_BIT_LENGTH, &encoded_msg[index], dest_addr_offset);
287 index += (dest_addr_offset + dialNumLen * NIBBLE_BIT_LENGTH) / 8 +
288 ((dest_addr_offset + dialNumLen * NIBBLE_BIT_LENGTH) % 8 ? 1 : 0);
290 /* Updating the Address Length */
291 *addr_len = index - previous_addr_index;
293 msg("Dest addr final Index[%d] ", index);
294 __util_hex_dump(" ", index, encoded_msg);
297 /* Bearer Data Options: */
298 int bearer_data_previous_index;
299 encoded_msg[index++] = SMS_3GPP2_PARAM_ID_BEARER_DATA;
300 unsigned char *bearer_data_length = &encoded_msg[index++];
301 bearer_data_previous_index = index;
303 /* 1 Message Identifier */
306 EncodeCdmaSmsParamMsgId(SMS_3GPP2_BSUB_TELSERVICE_MSG_TYPE_SUBMIT, ¶m_msg);
307 encoded_msg[index++] = param_msg.param_id;
308 encoded_msg[index++] = SUBPARAM_LEN_VAL;
311 /*Copying the Message ID*/
312 bitarray_copy((¶m_msg.type), offset, NIBBLE_BIT_LENGTH, &encoded_msg[index], 0);
313 param_msg.msg_id = htons(param_msg.msg_id);
315 bitarray_copy((unsigned char *)(¶m_msg.msg_id), 0, sizeof(param_msg.msg_id) * CHAR_BIT, &encoded_msg[index], offset);
316 param_msg.msg_id = ntohs(param_msg.msg_id);
318 index += (offset + sizeof(param_msg.msg_id)*CHAR_BIT)/8 +
319 (((offset + sizeof(param_msg.msg_id)*CHAR_BIT)%8) ? 1 : 0);
321 msg("Message Identifier final Index[%d] ", index);
322 __util_hex_dump(" ", index, encoded_msg);
325 /*3GPP2 C.S0015-A section 4.5.2 User Data*/
328 int message_type = 0, offset = 5, prev_userdata_index;
329 int current_index, i, initial_offset, index_data;
330 EncodeCdmaSmsParamUserData(msgTxt, ¶m_user);
331 encoded_msg[index++] = param_user.param_id;
333 unsigned char *user_data_len = &encoded_msg[index++];
335 prev_userdata_index = index;
337 if (param_user.encoding == 0x01) {
338 encoded_msg[index] = param_user.encoding << 3;
339 encoded_msg[index] = (encoded_msg[index] & (0xF8)) | (message_type >> 5);
341 encoded_msg[index] = message_type << 3;
343 encoded_msg[index] = param_user.encoding << 3;
346 encoded_msg[index] = (encoded_msg[index] & 0xF8) | (param_user.len >> 5);
348 encoded_msg[index] = (param_user.len << 3);
351 current_index = index;
352 initial_offset = offset;
354 for (i = 1; i <= param_user.len; i++) {
355 bitarray_copy((const unsigned char *)¶m_user.CHARi[i-1], 1, 7, (unsigned char *)&encoded_msg[current_index+index_data], offset);
356 offset = (offset + 7) % 8;
357 index_data = (initial_offset + i * 7) / 8;
359 index = index_data + current_index;
362 msg("User Data Index[%d ]:", index);
363 __util_hex_dump(" ", index, encoded_msg);
365 *user_data_len = index - prev_userdata_index;
367 *bearer_data_length = index - bearer_data_previous_index;
368 __util_hex_dump(" ", index, encoded_msg);
371 memset(&data_package, 0x0, sizeof(TelSmsDatapackageInfo_t));
373 data_package.format = TAPI_NETTEXT_NETTYPE_3GPP2;
374 data_package.MsgLength = index;
376 data_package.szData[data_package.MsgLength + 1] = '\0';
378 memcpy(&(data_package.szData), encoded_msg, data_package.MsgLength);
380 msg("Message Length[%d] ", data_package.MsgLength);
382 __util_hex_dump(" ", data_package.MsgLength, data_package.szData);
384 ret = tel_send_sms(handle, &data_package, 0x0, on_resp_send_cdma_msg, NULL);
385 msg("Return Status of CDMA tel_send_sms[%d]", ret);
391 static BOOL DecodeCellBroadcastMsg(int length, char *pPDU)
394 int sn = 0; /* serial number */
395 int msgID; /* message identifier */
396 Sms_coding_scheme dcs;
398 unsigned char page[2];
400 char contents[SMS_CB_SIZE_MAX];
403 unsigned char msgCode;
404 unsigned char updateNumber;
407 msg("pData is Null");
411 msg("cb msg type is %x", pPDU[0]);
412 msg("cb msg len is %x", pPDU[1]);
414 msg("$$$$$$$$$$$$$$$length of cb msg is %d", length);
415 sn = (pPDU[2] << 8) | pPDU[1];
417 gs = (pPDU[2] & 0xC0) >> 6; /* bit 7, bit 6 */
419 msgCode = (((pPDU[2] & 0x3F) << 4) | pPDU[3]) & 0xF0;
421 updateNumber = pPDU[3] & 0x0F; /* bit3, bit2, bit1, bit0 */
423 msgID = pPDU[4] << 4 | pPDU[3];
425 SmsUtilDecodeDCS(&dcs, pPDU[6]);
427 page[0] = pPDU[7] & 0x0F; /* total page */
428 page[1] = (pPDU[7] & 0xF0) >> 4; /* current page */
430 msgLength = length - 2;
432 contents_length = msgLength - 6;
434 if (dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
435 unsigned char inData[SMS_CB_SIZE_MAX + 1];
437 memset(inData, 0x00, SMS_CB_SIZE_MAX + 1);
439 memcpy((void *)inData, (void *)&pPDU[8], contents_length);
440 SmsUtilUnpackGSMCode(contents, &pPDU[8], msgLength);
442 memcpy(contents, &pPDU[8], msgLength);
443 contents[msgLength] = 0;
446 printf("*************************************\n");
447 printf("serical number : 0x%04x \n", sn);
448 printf("Geographical Scope: 0x%x\n", gs);
449 printf("message code : 0x%x\n", msgCode);
450 printf("update Number : 0x%x\n", updateNumber);
451 printf("message identifier : 0x%x\n", msgID);
452 printf("DCS-Commpressed?: %d (1: true)\n", dcs.bCompressed);
453 printf("DCS-coding_group_type: %x\n", dcs.coding_group_type);
454 printf("contents bytes size : %d\n", contents_length);
455 printf("page : (%d /%d) (page /total) \n", page[1], page[0]);
456 printf("contents: %s\n", contents);
457 printf("*************************************\n");
462 static BOOL EncodeSmsSubmitTpdu(MManager *mm, char *diallingNum,
463 int dialNumLen, char *msg, int msg_len)
465 TapiHandle *handle = menu_manager_ref_user_data(mm);
467 TPDU_SMS_SUBMIT tpdu_submit;
469 unsigned char packet[TAPI_NETTEXT_MSG_SIZE_MAX];
471 unsigned char SCA[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1];
475 unsigned char tp_pid = 0; /* replace type (65) */
476 unsigned char tp_dcs; /* class_1(17), class_2(18) */
479 int local_index = 0, ScIndex = 0;
482 unsigned char sca_len = 0;
483 TapiResult_t returnStatus;
485 TelSmsDatapackageInfo_t *pDataPackage = NULL;
487 memset(packet, 0, TAPI_NETTEXT_MSG_SIZE_MAX);
489 /************SCA ADDRESS GET START**************/
491 returnStatus = TelTapiSmsGetSCA(&sc_addr, 0);
492 printf("Service center addr returned from TAPI SCA address %s returnStatus %d\n", sc_addr.szDiallingNum, returnStatus);
493 SmsUtilDecodeAddrField(decodeScaAddr, &sc_addr.szDiallingNum[0], &sc_addr.Ton, &sc_addr.Npi);
494 sca_len = strlen(decodeScaAddr);
496 memcpy(SCA, decodeScaAddr, sca_len);
499 msg("Enter a Valid Service Centre Number or Just Enter:");
500 memset(SCA, 0, sizeof(SCA));
502 ret = read(0, SCA, sizeof(SCA) - 1);
504 msg(" NULL msg can NOT be sent ");
509 pDataPackage = malloc(sizeof(TelSmsDatapackageInfo_t));
513 memset(pDataPackage, 0, sizeof(TelSmsDatapackageInfo_t));
515 sca_len = strlen((char *)SCA) - 1;
517 msg("Decode SCA Address =========");
518 msg("SCA Number :%s, SCA Length :%d ", SCA, sca_len);
519 msg("========================");
521 /* SCA ADDRESS GET END */
523 ScIndex = SmsUtilEncodeAddrField((unsigned char *)pDataPackage->Sca,
524 (char *)SCA, sca_len, 0x00, 0x01);
526 msg("ScIndex is %d", ScIndex);
528 /* TP-MTI, TP-RD, TP-VPF, TP-SRR, TP_UDHI, TP-RP */
529 tpdu_submit.msg_type = SMS_TPDU_SUBMIT;
530 tpdu_submit.rd = FALSE; /* false :accept duplicate msg , true: reject duplicate msg */
531 tpdu_submit.vpf = SMS_VP_RELATIVE;
532 tpdu_submit.srr = FALSE; /* false :A status report is not requested , true: A status report is requested */
533 tpdu_submit.udhi = FALSE; /* false: contains only the short message , true :a Header in addition to the short message */
534 tpdu_submit.rp = FALSE; /* false :TP Reply Path parameter is not set in this SMS SUBMIT, true : TP Reply Path parameter is set in this SMS SUBMIT */
536 packet[local_index] = tpdu_submit.msg_type; /* SUBMIT: bits 0, 1 */
537 packet[local_index] |= tpdu_submit.rd ? 0x04 : 0; /* bit 2 */
538 packet[local_index] |= tpdu_submit.vpf << 3; /* bits 3, 4 */
539 packet[local_index] |= tpdu_submit.srr ? 0x20 : 0; /* bit 5 */
540 packet[local_index] |= tpdu_submit.udhi ? 0x40 : 0; /* bit 6 */
541 packet[local_index] |= tpdu_submit.rp ? 0x80 : 0; /* bit 7 */
544 msg("local_index of message ref is %d, msgref is %d", local_index, tp_mr);
546 packet[local_index++] = tp_mr;
549 local_index += SmsUtilEncodeAddrField(packet + local_index, diallingNum, dialNumLen, 0x01, 0x01);
552 packet[local_index++] = tp_pid;
554 /* TP_DCS (Data Coding Scheme) */
555 tpdu_submit.dcs.bCompressed = FALSE;
556 tpdu_submit.dcs.bmsg_class_set = TRUE;
557 tpdu_submit.dcs.coding_group_type = SMS_CODGRP_SM_GENERAL_DCS;
558 tpdu_submit.dcs.alphabet_type = SMS_ALPHABET_DEFAULT;
559 tpdu_submit.dcs.class_type = SMS_CLASS_1;
561 SmsUtilEncodeDCS(&tp_dcs, &tpdu_submit.dcs);
563 packet[local_index++] = tp_dcs;
566 tpdu_submit.vp.vp_rel_type = SMS_VP_REL_6H;
567 tpdu_submit.vp.vp_type = SMS_VP_RELATIVE;
568 tpdu_submit.vp.vpValue = 0xff;
570 SmsUtilEncodeValidity(&tp_vp, &tpdu_submit.vp);
572 packet[local_index++] = tp_vp;
575 packet[local_index++] = msg_len;
578 if (tpdu_submit.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
580 pos = SmsUtilPackGSMCode(packet + local_index, msg, msg_len);
584 msg("Send packet to phonseSever[%d] -----", local_index);
586 for (i = 0; i < local_index; i++) {
587 msg("[%02x]", packet[i]);
593 memcpy(pDataPackage->szData, packet, local_index);
594 pDataPackage->MsgLength = local_index;
596 msg("***Sending the Message (Api:SendMsg)***");
598 msg("Length : %d", pDataPackage->MsgLength);
600 pDataPackage->format = TAPI_NETTEXT_NETTYPE_3GPP;
601 msg("Format : %d", pDataPackage->format);
603 returnStatus = tel_send_sms(handle, pDataPackage, 0, on_resp_send_msg, NULL);
605 msg("SendMsg : returnStatus=%d requestId=%d", returnStatus, requestId);
614 static int DecodeSmsDeliverTpdu(int tpdu_len, char *pTPDU)
616 TPDU_SMS_DELIVER tpdu_deliver;
617 TmDateTime SCTimeStamp;
619 char diallingNum[SMS_ADDRESS_LEN_MAX + 1];
620 char orgAddr[SMS_ADDRESS_LEN_MAX + 1]; /* originating number */
621 int org_ton, org_npi;
624 /* TP-MTI, TP-MMS, TP-SRI, TP_UDHI, TP-RP */
625 tpdu_deliver.msg_type = SMS_TPDU_DELIVER;
626 tpdu_deliver.mms = (pTPDU[position] & 0x04) ? TRUE : FALSE; /* bit 2 (Message Type Indicator) */
627 tpdu_deliver.sri = (pTPDU[position] & 0x20) ? TRUE : FALSE; /* bit 5 (Status Report Indication) */
628 tpdu_deliver.udhi = (pTPDU[position] & 0x40) ? TRUE : FALSE; /* bit 6 (User Data Header Indicator) */
629 tpdu_deliver.rp = (pTPDU[position] & 0x80) ? TRUE : FALSE; /* bit 7 (Reply Path) */
634 memset(diallingNum, 0, sizeof(diallingNum));
636 orgAddr_len = SmsUtilDecodeAddrField(diallingNum, &pTPDU[position],
638 if (orgAddr_len > SMS_ADDRESS_LEN_MAX - 1)
639 orgAddr_len = SMS_ADDRESS_LEN_MAX - 1;
644 position += orgAddr_len / 2 + 1;
646 position += orgAddr_len / 2;
648 msg("pos = %d, length = %d", position, orgAddr_len);
650 if (org_ton == SMS_TON_INTERNATIONAL) {
652 memcpy(&orgAddr[1], diallingNum, orgAddr_len - 1);
653 orgAddr[orgAddr_len + 1] = '\0';
655 memcpy(orgAddr, diallingNum, orgAddr_len);
656 orgAddr[orgAddr_len] = '\0';
660 tpdu_deliver.pId = pTPDU[position];
665 SmsUtilDecodeDCS(&tpdu_deliver.dcs, pTPDU[position]);
670 SmsUtilDecodeTimeStamp(&pTPDU[position], &SCTimeStamp);
675 tpdu_deliver.udl = pTPDU[position];
677 if (tpdu_deliver.udl > SMS_SMDATA_SIZE_MAX)
678 tpdu_deliver.udl = SMS_SMDATA_SIZE_MAX;
683 tpdu_deliver.userData = malloc(sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
684 if (!tpdu_deliver.userData)
687 memset(tpdu_deliver.userData, 0,
688 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
690 if (tpdu_deliver.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
691 char inData[SMS_SMDATA_SIZE_MAX + 1];
693 memset(inData, 0x00, SMS_SMDATA_SIZE_MAX + 1);
695 memcpy((void *)inData, (void *)&pTPDU[position], tpdu_deliver.udl);
697 SmsUtilUnpackGSMCode(tpdu_deliver.userData, inData,
698 (unsigned char) tpdu_deliver.udl);
701 msg("*************************************");
702 msg("Msg Type: TPDU_DELIVER");
705 msg("RP: Set Reply Path");
706 else if (!tpdu_deliver.rp)
707 msg("RP: Not set Reply Path");
709 if (tpdu_deliver.sri)
710 msg("SRI: A status report shall be returned to the SME");
711 else if (!tpdu_deliver.sri)
712 msg("SRI: A status report shall be not returned to the SME");
714 if (tpdu_deliver.mms)
715 msg("MMS: No more messages are waiting for the MS in this SC");
716 else if (!tpdu_deliver.mms)
717 msg("MMS: More messages are waiting for the MS in this SC");
719 if (tpdu_deliver.udhi)
720 msg("UDHI: Contains a Header in addition to the short message.");
721 else if (!tpdu_deliver.udhi)
722 msg("UDHI: Only short message.");
724 msg("DcsClass : %x (4 means Class None) ", tpdu_deliver.dcs.class_type);
726 msg("From : %10s", orgAddr);
727 msg("Time : %d-%d-%d , %d:%d:%d",
728 SCTimeStamp.year, SCTimeStamp.month,
729 SCTimeStamp.day, SCTimeStamp.hour, SCTimeStamp.minute, SCTimeStamp.second);
730 msg("Message : %s ", tpdu_deliver.userData);
731 msg("*************************************");
733 if (tpdu_deliver.userData)
734 free(tpdu_deliver.userData);
739 static int DecodeSmsStatusReportTpdu(int tpdu_len, char *pTPDU)
741 TPDU_SMS_STATUS_REPORT status_report;
743 TmDateTime SCTimeStamp;
744 TmDateTime DischargeTime;
747 char diallingNum[SMS_ADDRESS_LEN_MAX];
749 char rcpAddr[SMS_ADDRESS_LEN_MAX]; /* recipient number */
750 int rcp_ton, rcp_npi;
754 /* TP-MTI, TP MMS, TP SRQ, TP_UDHI */
756 status_report.msg_type = pTPDU[position] & 0x03; /* bit 0, 1 */
757 status_report.mms = pTPDU[position] & 0x04 ? TRUE : FALSE; /* bit 2 */
758 status_report.srq = pTPDU[position] & 0x20 ? TRUE : FALSE; /* bit 5 */
759 status_report.udhi = pTPDU[position] & 0x40 ? TRUE : FALSE; /* bit 6 */
764 status_report.mr = pTPDU[position];
768 memset(diallingNum, 0, sizeof(diallingNum));
770 SmsUtilDecodeAddrField(diallingNum, &pTPDU[position], &rcp_ton, &rcp_npi);
774 rcpAddr_len = strlen((char *)diallingNum);
776 position += rcpAddr_len / 2 + 1;
778 position += rcpAddr_len / 2;
780 if (rcp_ton == SMS_TON_INTERNATIONAL) {
782 memcpy(&rcpAddr[1], diallingNum, rcpAddr_len);
783 rcpAddr[rcpAddr_len + 1] = '\0';
785 memcpy(rcpAddr, diallingNum, rcpAddr_len);
786 rcpAddr[rcpAddr_len] = '\0';
789 status_report.rcpAddr.DialNumLen = rcpAddr_len;
790 memcpy(status_report.rcpAddr.szDiallingNum, rcpAddr, rcpAddr_len);
791 status_report.rcpAddr.Npi = rcp_npi;
792 status_report.rcpAddr.Ton = rcp_ton;
795 SmsUtilDecodeTimeStamp(&pTPDU[position], &SCTimeStamp);
799 SmsUtilDecodeTimeStamp(&pTPDU[position], &DischargeTime);
803 status_report.status = pTPDU[position];
807 status_report.paraInd = pTPDU[position];
809 mask = status_report.paraInd;
811 if ((mask != 0xFF) && (mask != 0)) {
812 /* Increment only if mask is valid */
817 status_report.pId = pTPDU[position];
823 SmsUtilDecodeDCS(&status_report.dcs, pTPDU[position]);
829 status_report.udl = pTPDU[position];
834 status_report.userData = malloc(sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
835 if (!status_report.userData)
838 memset(status_report.userData, 0,
839 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
841 if (status_report.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
842 char inData[SMS_SMDATA_SIZE_MAX + 1];
844 memset(inData, 0x00, SMS_SMDATA_SIZE_MAX + 1);
846 memcpy((void *)inData, (void *)&pTPDU[position],
849 SmsUtilUnpackGSMCode(status_report.userData, inData,
850 (unsigned char)status_report.udl);
856 msg("*************************************");
857 msg("Msg Type: STATUS_REPORT");
858 if (status_report.mms)
859 msg("MMS: No more messages are waiting for the MS in this SC");
860 else if (!status_report.mms)
861 msg("MMS: More messages are waiting for the MS in this SC");
863 if (status_report.srq)
864 msg("SRQ: the result of an SMS COMMAND ");
865 else if (!status_report.srq)
866 msg("SRQ: the result of a SMS SUBMIT.");
868 if (status_report.udhi)
869 msg("UDHI: Contains a Header in addition to the short message.");
870 else if (!status_report.udhi)
871 msg("UDHI: Only Short Message");
873 msg("STATUS:%x", status_report.status);
874 if (status_report.status == 0x00)
875 msg("STATUS : Short message received by the SME");
876 else if (status_report.status == 0x01)
877 msg("STATUS : Short message forwarded by the SC to the SMEbut the SC is unable to confirm delivery");
878 else if (status_report.status == 0x02)
879 msg("STATUS : Short message replaced by the SC");
881 msg("Recipient Number : %s", rcpAddr);
882 msg("SC Time Stamp : %d-%d-%d , %d:%d:%d",
883 SCTimeStamp.year, SCTimeStamp.month, SCTimeStamp.day,
884 SCTimeStamp.hour, SCTimeStamp.minute, SCTimeStamp.second);
885 msg("Discharge Time : %d-%d-%d , %d:%d:%d",
886 DischargeTime.year, DischargeTime.month, DischargeTime.day,
887 DischargeTime.hour, DischargeTime.minute, DischargeTime.second);
890 msg("Message : %s ", status_report.userData);
892 msg("*************************************");
894 if (status_report.userData)
895 free(status_report.userData);
900 static void __on_noti_3gpp_sms_incoming_msg(TapiHandle *handle, TelSmsDatapackageInfo_t *datapackage,
906 unsigned char diallingNum[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1] = { 0, };
907 unsigned char scaAddr[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 2] = { 0, }; /* Service Center Address */
908 int sca_ton, sca_npi;
912 unsigned char MTI = 0;
913 unsigned char MMS = 0;
914 unsigned char SRI = 0;
915 unsigned char UDHI = 0;
916 unsigned char RP = 0;
918 Sms_coding_scheme dcs;
919 TapiResult_t returnStatus;
924 msgb("event(%s) receive !!", TAPI_NOTI_SMS_INCOM_MSG);
926 memset(diallingNum, 0, sizeof(diallingNum));
928 sca_length = datapackage->Sca[0];
930 sca_ton = (datapackage->Sca[offset + 1] & 0x70) >> 4;
931 sca_npi = datapackage->Sca[offset + 1] & 0x0F;
933 msg("TON %d", sca_ton);
934 msg("NPI %d", sca_npi);
936 /* Modem Send the hex encoded SCA Service center digits*/
937 scaAddr_len = _util_hexstring_to_asciistring(&datapackage->Sca[2], (unsigned char *)diallingNum, sca_length-1);
939 msg("SCA ascii length%d", scaAddr_len);
940 msg("SCA Number:[%s]", diallingNum);
942 if (scaAddr_len > TAPI_NETTEXT_SCADDRESS_LEN_MAX)
943 scaAddr_len = TAPI_NETTEXT_SCADDRESS_LEN_MAX;
945 if (sca_ton == SMS_TON_INTERNATIONAL) {
947 memcpy(&scaAddr[1], diallingNum, scaAddr_len);
949 memcpy(scaAddr, diallingNum, scaAddr_len);
952 msg("Sc address in test app is %s", scaAddr);
954 RP = datapackage->szData[position] & 0x80;
955 UDHI = datapackage->szData[position] & 0x40;
956 SRI = datapackage->szData[position] & 0x20;
957 MMS = datapackage->szData[position] & 0x04;
958 MTI = datapackage->szData[position] & 0x03;
961 msg("UDHI [%x]", UDHI);
962 msg("SRI [%x]", SRI);
963 msg("MMS [%x]", MMS);
964 msg("MTI [%02x]", MTI);
966 tpdu_len = datapackage->MsgLength;
968 pTPDU = malloc(sizeof(unsigned char) * tpdu_len);
972 memcpy(pTPDU, &datapackage->szData[position], tpdu_len);
974 if (MTI == SMS_TPDU_DELIVER) {
975 DecodeSmsDeliverTpdu(tpdu_len, pTPDU);
977 msg("dcs_pos : %d", dcs_pos);
979 SmsUtilDecodeDCS(&dcs, datapackage->szData[position + dcs_pos]);
981 /* Simulating the behaviour of MSG_SERVICE:
982 * Storing only the Class two sms
985 if (dcs.class_type == SMS_CLASS_2) {
986 TelSmsData_t WriteData;
988 msg("dcs type is of class2");
990 memset(&WriteData, 0, sizeof(TelSmsData_t));
992 memcpy(WriteData.SmsData.Sca, datapackage->Sca, sca_length+1);
994 WriteData.SmsData.MsgLength = datapackage->MsgLength;
996 memcpy(WriteData.SmsData.szData, datapackage->szData, datapackage->MsgLength);
998 WriteData.MsgStatus = TAPI_NETTEXT_STATUS_READ;
1000 returnStatus = tel_write_sms_in_sim(handle, &WriteData, on_resp_save_msg, NULL);
1002 msg("returnStatus for tel_write_sms_in_sim(): 0x%x", returnStatus);
1005 } else if (MTI == SMS_TPDU_STATUS_REPORT) {
1006 DecodeSmsStatusReportTpdu(tpdu_len, pTPDU);
1009 TelSmsDatapackageInfo_t *del_report = NULL;
1011 del_report = malloc(sizeof(TelSmsDatapackageInfo_t));
1012 if (del_report == NULL) {
1016 memset(del_report, 0, sizeof(TelSmsDatapackageInfo_t));
1018 memcpy(del_report->Sca, datapackage->Sca, TAPI_SIM_SMSP_ADDRESS_LEN);
1020 del_report->szData[0] = SMS_TPDU_DELIVER_REPORT; /* TP-UDHI[bit6] : 0 */
1021 del_report->szData[1] = 0; /* TP-PI = 0; bit2: TP-UDL bit1: TP-DCS bit0: TP-PID (No option field) */
1022 del_report->MsgLength = 2;
1023 del_report->format = TAPI_NETTEXT_NETTYPE_3GPP;
1025 msg("***receive message (Api:SendDeliverreport)****");
1027 returnStatus = tel_send_sms_deliver_report(handle, del_report,
1028 TAPI_NETTEXT_SENDSMS_SUCCESS, on_resp_DeliverReport_msg, NULL);
1030 msg("returnStatus for tel_send_sms_deliver_report(): 0x%x", returnStatus);
1037 static void __on_noti_3gpp2_sms_incoming_msg(TapiHandle *handle,
1038 TelSmsDatapackageInfo_t *datapackage, void *user_data)
1040 TelSmsDatapackageInfo_t del_report;
1041 TapiResult_t returnStatus;
1043 sms_util_decode_3gpp2(datapackage->MsgLength, datapackage->szData);
1045 memset(&del_report, 0x00, sizeof(del_report));
1046 del_report.format = TAPI_NETTEXT_NETTYPE_3GPP2;
1047 returnStatus = tel_send_sms_deliver_report(handle, &del_report,
1048 TAPI_NETTEXT_SENDSMS_SUCCESS, on_resp_DeliverReport_msg, NULL);
1050 msg("returnStatus for tel_send_sms_deliver_report(): 0x%x", returnStatus);
1053 static void on_noti_sms_incom_msg(TapiHandle *handle, const char *noti_id,
1054 void *data, void *user_data)
1056 TelSmsDatapackageInfo_t *datapackage = data;
1057 if (datapackage == NULL)
1060 if (datapackage->format == TAPI_NETTEXT_NETTYPE_3GPP)
1061 __on_noti_3gpp_sms_incoming_msg(handle, datapackage, user_data);
1062 else if (datapackage->format == TAPI_NETTEXT_NETTYPE_3GPP2)
1063 __on_noti_3gpp2_sms_incoming_msg(handle, datapackage, user_data);
1065 msg("Invalid msg format: %d", datapackage->format);
1068 static void on_noti_sms_cb_incom_msg(TapiHandle *handle, const char *noti_id,
1069 void *data, void *user_data)
1071 TelSmsCbMsg_t *cbMsg = data;
1073 char pPDU[SMS_CB_SIZE_MAX + 3] = { 0, };
1076 msgb("event(%s) receive !!", TAPI_NOTI_SMS_CB_INCOM_MSG);
1078 length = cbMsg->Length;
1079 pPDU[0] = cbMsg->CbMsgType;
1081 memcpy(&(pPDU[2]), cbMsg->szMsgData, SMS_CB_SIZE_MAX + 1);
1083 DecodeCellBroadcastMsg(length, pPDU);
1086 static void on_noti_sms_etws_incom_msg(TapiHandle *handle, const char *noti_id,
1087 void *data, void *user_data)
1089 TelSmsEtwsMsg_t *etwsMsg = data;
1091 char pPDU[TAPI_NETTEXT_ETWS_SIZE_MAX + 3] = { 0, };
1094 msgb("event(%s) receive !!", TAPI_NOTI_SMS_ETWS_INCOM_MSG);
1096 length = etwsMsg->Length;
1097 pPDU[0] = etwsMsg->EtwsMsgType;
1099 memcpy(&(pPDU[2]), etwsMsg->szMsgData, TAPI_NETTEXT_ETWS_SIZE_MAX + 1);
1102 static void on_noti_sms_memory_status(TapiHandle *handle, const char *noti_id,
1103 void *data, void *user_data)
1105 int *memory_status = data;
1108 msgb("event(%s) receive !!", TAPI_NOTI_SMS_MEMORY_STATUS);
1109 msg(" - memory_status = 0x%x", *memory_status);
1112 static void on_noti_sms_ready_status(TapiHandle *handle, const char *noti_id,
1113 void *data, void *user_data)
1115 int *device_ready = data;
1118 msgb("event(%s) receive !!", TAPI_NOTI_SMS_DEVICE_READY);
1119 msg(" - device_ready = %d", *device_ready);
1121 if (TAPI_NETTEXT_READY_STATUS_3GPP == *device_ready)
1122 msg("TAPI_NETTEXT_READY_STATUS_3GPP");
1123 else if (TAPI_NETTEXT_READY_STATUS_3GPP2 == *device_ready)
1124 msg("TAPI_NETTEXT_READY_STATUS_3GPP");
1125 else if (TAPI_NETTEXT_READY_STATUS_3GPP_AND_3GPP2 == *device_ready)
1126 msg("TAPI_NETTEXT_READY_STATUS_3GPP_AND_3GPP2");
1128 msg("TAPI_NETTEXT_READY_STATUS_NONE");
1131 static void on_resp_send_msg(TapiHandle *handle, int result, void *data,
1135 msgb("tel_send_sms() response receive");
1136 msg(" - result = 0x%x", result);
1139 static void on_resp_send_cdma_msg(TapiHandle *handle, int result, void *data,
1143 msgb("CDMA tel_send_sms() response received");
1144 msg(" - result = 0x%x", result);
1147 static void on_resp_read_msg(TapiHandle *handle, int result, void *data,
1150 TelSmsData_t *sim_data;
1151 int scaAddr_len = 0;
1154 char diallingNum[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1] = { 0, };
1155 char scaAddr[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 2] = { 0, }; /* Service Center Address */
1156 int sca_ton, sca_npi;
1160 msg("data is Null");
1164 sim_data = (TelSmsData_t *)data;
1165 msg("SIM Index [%d]", sim_data->SimIndex);
1167 if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_UNREAD)
1168 msg("Msg Staus : received unread msg");
1169 else if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_READ)
1170 msg("Msg Staus : received read msg");
1171 else if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_UNSENT)
1172 msg("Msg Staus : unsent msg");
1174 msg("Msg Staus : [%d]", sim_data->MsgStatus);
1176 msg("First Data [%x]", sim_data->SmsData.szData[0]);
1177 msg("Second Data [%x]", sim_data->SmsData.szData[1]);
1178 msg("Third Data [%x]", sim_data->SmsData.szData[2]);
1179 msg("Fourth Data [%x]", sim_data->SmsData.szData[3]);
1183 memset(diallingNum, 0, sizeof(diallingNum));
1185 SmsUtilDecodeAddrField(diallingNum, (char *)sim_data->SmsData.Sca,
1186 &sca_ton, &sca_npi);
1188 position += 2; /* include Address-Length, Type of Address */
1190 scaAddr_len = strlen((char *)diallingNum);
1191 if (scaAddr_len > TAPI_NETTEXT_SCADDRESS_LEN_MAX - 1)
1192 scaAddr_len = TAPI_NETTEXT_SCADDRESS_LEN_MAX - 1;
1194 if (scaAddr_len % 2)
1195 position += scaAddr_len / 2 + 1;
1197 position += scaAddr_len / 2;
1199 if (sca_ton == SMS_TON_INTERNATIONAL) {
1201 memcpy(&scaAddr[1], diallingNum, scaAddr_len);
1203 memcpy(scaAddr, diallingNum, scaAddr_len);
1206 tpdu_len = sim_data->SmsData.MsgLength;
1208 msg("SCA Number : %s tpdu_len is %d", scaAddr, tpdu_len);
1210 pTPDU = malloc(sizeof(unsigned char) * tpdu_len);
1214 msg("bfor memcopy position is %d", position);
1215 memcpy(pTPDU, & (sim_data->SmsData.szData[0]), tpdu_len);
1216 msg("after memcpy");
1218 DecodeSmsDeliverTpdu(tpdu_len, pTPDU);
1223 static void on_resp_save_msg(TapiHandle *handle, int result, void *data,
1226 int *local_index = data;
1229 msgb("tel_write_sms_in_sim() response receive");
1230 msg(" - result = 0x%x", result);
1231 msg(" - local_index = %d", *local_index);
1234 static void on_resp_delete_msg(TapiHandle *handle, int result, void *data,
1237 int *local_index = data;
1240 msgb("tel_delete_sms_in_sim() response receive");
1241 msg(" - result = 0x%x", result);
1242 msg(" - local_index = %d", *local_index);
1245 static void on_resp_DeliverReport_msg(TapiHandle *handle, int result,
1246 void *data, void *user_data)
1248 int *local_index = data;
1251 msgb("tel_send_sms_deliver_report() response receive");
1252 msg(" - result = 0x%x", result);
1253 msg(" - local_index = %d", *local_index);
1256 static void on_resp_set_sms_sca(TapiHandle *handle, int result, void *data,
1260 msgb("tel_set_sms_sca() response receive");
1261 msg(" - result = 0x%x", result);
1264 static void on_resp_set_sms_cb_config(TapiHandle *handle, int result,
1265 void *data, void *user_data)
1268 msgb("tel_set_sms_cb_config() response receive");
1269 msg(" - result = 0x%x", result);
1272 static void on_resp_set_sms_params(TapiHandle *handle, int result, void *data,
1276 msgb("tel_set_sms_params() response receive");
1277 msg(" - result = 0x%x", result);
1280 static void on_resp_set_mem_status(TapiHandle *handle, int result, void *data,
1284 msgb("tel_set_sms_mem_status() response receive");
1285 msg(" - result = 0x%x", result);
1288 static void on_resp_set_msg_status(TapiHandle *handle, int result, void *data,
1292 msgb("tel_set_sms_message_status() response receive");
1293 msg(" - result = 0x%x", result);
1296 static void on_resp_get_sms_sca(TapiHandle *handle, int result, void *data,
1299 TelSmsAddressInfo_t *scaInfo = data;
1303 msgb("tel_get_sms_sca() response receive");
1304 msg(" - result = 0x%x", result);
1305 msg(" - TON = %d", scaInfo->Ton);
1306 msg(" - NPI = %d", scaInfo->Npi);
1307 msg(" - DialNumLen = %d", scaInfo->DialNumLen);
1310 for (i = 0; i < scaInfo->DialNumLen; i++) {
1311 msg("[%02x]", scaInfo->szDiallingNum[i]);
1317 static void on_resp_get_cb_config(TapiHandle *handle, int result, void *data,
1320 TelSmsCbConfig_t *CBConfig;
1324 msg("pData is Null");
1328 CBConfig = (TelSmsCbConfig_t *)data;
1331 msgb("tel_get_sms_cb_config() response receive");
1332 msg(" - result = 0x%x", result);
1334 msg("=========CB Configuration=========");
1336 /*** CB Enable/Diable ***/
1337 if (CBConfig->CBEnabled == TRUE)
1338 msg("Cell Broadcast Msg Enabled...");
1340 msg("Cell Broadcast Msg Disabled...");
1342 /*** CBMI Count ***/
1343 msg("CBMI Range Count: %d", CBConfig->MsgIdRangeCount);
1346 if (CBConfig->Net3gppType == 0x01) {
1347 msg("Network type is 3gpp\n");
1348 if (CBConfig->MsgIdRangeCount != 0) {
1349 msg("----- CBMI List -----");
1350 for (i = 0; i < CBConfig->MsgIdRangeCount; i++) {
1351 msg("From No.%d - [0x%04x]", i,
1352 CBConfig->MsgIDs[i].Net3gpp.FromMsgId);
1353 msg("To No.%d - [0x%04x]", i, CBConfig->MsgIDs[i].Net3gpp.ToMsgId);
1356 } else if (CBConfig->Net3gppType == 0x02) {
1357 msg("Network type is CDMA\n");
1358 if (CBConfig->MsgIdRangeCount != 0) {
1359 msg("----- CBMI List -----");
1360 for (i = 0; i < CBConfig->MsgIdRangeCount; i++) {
1361 msg("No.%d Service Category - [0x%04x]", i, CBConfig->MsgIDs[i].Net3gpp2.CBCategory);
1362 msg("No.%d Language - [0x%02x]", i, CBConfig->MsgIDs[i].Net3gpp2.CBLanguage);
1363 msg("No.%d Selected - [0x%02x]", i, CBConfig->MsgIDs[i].Net3gpp2.Selected);
1368 msg("==================================");
1371 static void on_resp_get_sms_parameters(TapiHandle *handle, int result,
1372 void *data, void *user_data)
1374 TelSmsParams_t *smsp_param;
1378 msg("data is Null");
1381 smsp_param = (TelSmsParams_t *)data;
1384 msgb("tel_get_sms_parameters() response receive");
1385 msg(" - result = 0x%x", result);
1387 msg("record index is 0x%x", smsp_param->RecordIndex);
1388 msg("record len is 0x%x", smsp_param->RecordLen);
1389 msg("alpha_id len is 0x%x ", (int)smsp_param->AlphaIdLen);
1390 msg("alpha_id is %s ", smsp_param->szAlphaId);
1391 msg("param indicator is 0x%x", smsp_param->ParamIndicator);
1393 for (i = 0; i < (int) smsp_param->TpDestAddr.DialNumLen; i++)
1394 msg("DestAddr = %d [%02x]", i, smsp_param->TpDestAddr.szDiallingNum[i]);
1396 for (i = 0; i < (int) smsp_param->TpSvcCntrAddr.DialNumLen; i++)
1397 msg("SCAddr = %d [%02x]", i, smsp_param->TpSvcCntrAddr.szDiallingNum[i]);
1399 msg("pid 0x%x", smsp_param->TpProtocolId);
1400 msg("dcs is 0x%x", smsp_param->TpDataCodingScheme);
1401 msg("validity is 0x%x", smsp_param->TpValidityPeriod);
1404 static void on_resp_get_paramcnt(TapiHandle *handle, int result, void *data,
1410 msg("data is Null");
1414 RecordCount = (int *)data;
1417 msgb("tel_get_sms_parameter_count() response receive");
1418 msg(" - result = 0x%x", result);
1419 msg(" - In param_count_noti the record count is %d", *RecordCount);
1422 static void on_resp_get_sms_count(TapiHandle *handle, int result, void *data,
1425 static TelSmsStoredMsgCountInfo_t *countInfo;
1426 int loop_counter = 0;
1427 TapiResult_t returnStatus = TAPI_API_SUCCESS;
1430 msg("data is Null");
1434 countInfo = (TelSmsStoredMsgCountInfo_t *)data;
1437 msgb("tel_get_sms_count() response receive");
1438 msg(" - result = 0x%x", result);
1440 if (countInfo->UsedCount != 0x00) { /* if used count is not zero */
1441 msg("Index LIST..........");
1442 for (loop_counter = 0; loop_counter < countInfo->UsedCount;
1444 msg("[%02x]", countInfo->IndexList[loop_counter]);
1445 returnStatus = tel_read_sms_in_sim(handle,
1446 countInfo->IndexList[loop_counter], on_resp_read_msg,
1448 msg("After read msg: returnstatus %d", returnStatus);
1450 msg("In MsgCountNotification total cnt is %d, usedcnt is %dapi_err %d",
1451 countInfo->TotalCount, countInfo->UsedCount, returnStatus);
1454 msg("In MsgCountNotification total cnt is %d, usedcnt is %d",
1455 countInfo->TotalCount, countInfo->UsedCount);
1459 static int SendMessage(MManager *mm, struct menu_data *menu)
1463 char message[512] = { 0, };
1464 char diallingNum[SMS_ADDRESS_LEN_MAX + 1] = { 0, };
1465 int diallingNum_len = 0;
1468 printf("Enter destination Number:\n>> ");
1470 ret = read(0, diallingNum, sizeof(diallingNum) - 1);
1475 } else if (ret == 0) {
1476 printf("No destination Number!!\n");
1479 diallingNum_len = ret - 1;
1480 diallingNum[diallingNum_len] = '\0';
1482 printf("Enter Message\n>> ");
1484 ret = read(0, message, sizeof(message) - 1);
1489 } else if (ret == 0) {
1490 printf("No Message!!\n");
1494 message[msg_len] = '\0';
1496 printf("===========================\n");
1497 printf("To: [%s] (len: %d)\n", diallingNum, diallingNum_len);
1498 printf("Message: [%s]\nMsg Length: [%d]\n", message, msg_len);
1499 printf("===========================\n\n");
1501 EncodeSmsSubmitTpdu(mm, diallingNum, diallingNum_len, message, msg_len);
1506 static int SendMessageCDMA(MManager *mm, struct menu_data *menu)
1510 char message[512] = { 0, };
1511 char diallingNum[SMS_ADDRESS_LEN_MAX + 1] = { 0, };
1512 int diallingNum_len = 0;
1515 printf("Enter destination Number:\n>> ");
1517 ret = read(0, diallingNum, sizeof(diallingNum) - 1);
1522 } else if (ret == 0) {
1523 printf("No destination Number!!\n");
1526 diallingNum_len = ret - 1;
1527 diallingNum[diallingNum_len] = '\0';
1529 printf("Enter Message\n>> ");
1531 ret = read(0, message, sizeof(message) - 1);
1536 } else if (ret == 0) {
1537 printf("No Message!!\n");
1541 message[msg_len] = '\0';
1543 printf("===========================\n");
1544 printf("To: [%s] (len: %d)\n", diallingNum, diallingNum_len);
1545 printf("Message: [%s]\nMsg Length: [%d]\n", message, msg_len);
1546 printf("===========================\n\n");
1548 if (EncodeCdmaSmsSubmitTpdu(mm, diallingNum, diallingNum_len, message, msg_len) == FALSE)
1549 msg("EncodeCdmaSmsSubmitTpdu() failed.");
1554 static int ReadMessage(MManager *mm, struct menu_data *menu)
1556 TapiHandle *handle = menu_manager_ref_user_data(mm);
1560 int returnStatus = 0;
1562 memset(buf, 0, sizeof(buf));
1564 msg("*************************************");
1565 msg("1. SIM Message/RUIM Message");
1567 msg("Select Number:");
1569 ret = read(0, buf, sizeof(buf));
1575 } else if (ret == 0)
1578 selectedNo = atoi(buf);
1579 msg("Selected Num in read message(value is 1) is %d ", selectedNo);
1580 switch (selectedNo) {
1582 msg("***Reading the message in SIM***");
1583 returnStatus = tel_get_sms_count(handle, on_resp_get_sms_count, NULL);
1584 msg("tel_get_sms_count(): 0x%x", returnStatus);
1588 msg("Not supported Menu(%d) !!!", selectedNo);
1595 static int DeleteMessage(MManager *mm, struct menu_data *menu)
1597 TapiHandle *handle = menu_manager_ref_user_data(mm);
1599 int ret, selected_num, index;
1602 TapiResult_t returnStatus;
1604 memset(buf, 0, sizeof(buf));
1606 msg("***Deleting the message(Api:DeleteMsg, GetMsgCount)***");
1608 msg("Select Number:");
1609 msg("1. Delete message at a particular index");
1610 msg("2. Delete all messages");
1612 msg("Select Number:");
1614 ret = read(0, buf, sizeof(buf));
1616 selected_num = atoi(buf);
1617 switch (selected_num) {
1619 msg("Enter delete index >>");
1620 ret = read(0, buf, sizeof(buf));
1625 } else if (ret == 0)
1637 msg("Invalid Number Selected");
1640 msg("index value :%d", index);
1642 returnStatus = tel_delete_sms_in_sim(handle, index, on_resp_delete_msg, NULL);
1643 msg("returnstatus tel_delete_sms_in_sim() is for delete%d ", returnStatus);
1645 msg("Getting SMS Count after Deleting SMS");
1646 returnStatus = tel_get_sms_count(handle, on_resp_get_sms_count, NULL);
1647 msg("returnStatus for tel_get_sms_count() %d", returnStatus);
1653 static int CdmaGetting(MManager *mm, struct menu_data *menu)
1655 TapiHandle *handle = menu_manager_ref_user_data(mm);
1657 int returnStatus = 0;
1658 int ready_status = 0;
1660 selectedNo = atoi(menu->key);
1661 switch (selectedNo) {
1663 msg("***Getting the CB Configuration(Api: GetCBConfig)***");
1664 returnStatus = tel_get_sms_cb_config(handle, on_resp_get_cb_config, NULL);
1665 msg("ReturnStatus[%d] ", returnStatus);
1669 msg("***Getting the SmsCount(Api:GetSmsCount)***");
1670 returnStatus = tel_get_sms_count(handle, on_resp_get_sms_count, NULL);
1671 msg("ReturnStatus[%d]", returnStatus);
1675 msg("***Getting the Sms Ready status(Api:Check_sms_device_status)***");
1676 returnStatus = tel_check_sms_device_status(handle, &ready_status);
1677 msg("API ReturnStatus[%d]", returnStatus);
1678 msg("Ready status = %d", ready_status);
1680 if (TAPI_NETTEXT_READY_STATUS_3GPP == ready_status)
1681 msg("TAPI_NETTEXT_READY_STATUS_3GPP");
1682 else if (TAPI_NETTEXT_READY_STATUS_3GPP2 == ready_status)
1683 msg("TAPI_NETTEXT_READY_STATUS_3GPP");
1684 else if (TAPI_NETTEXT_READY_STATUS_3GPP_AND_3GPP2 == ready_status)
1685 msg("TAPI_NETTEXT_READY_STATUS_3GPP_AND_3GPP2");
1687 msg("TAPI_NETTEXT_READY_STATUS_NONE");
1697 static int Getting(MManager *mm, struct menu_data *menu)
1699 TapiHandle *handle = menu_manager_ref_user_data(mm);
1701 int returnStatus = 0;
1702 int ready_status = 0;
1704 selectedNo = atoi(menu->key);
1706 switch (selectedNo) {
1708 msg("***Getting the SCA(Api: GetSCA)****");
1709 returnStatus = tel_get_sms_sca(handle, 0, on_resp_get_sms_sca, NULL);
1710 msg("returnstatus for tel_get_sms_sca(): 0x %x", returnStatus);
1714 msg("***Getting the CB Configuration(Api: GetCBConfig)***");
1715 returnStatus = tel_get_sms_cb_config(handle, on_resp_get_cb_config, NULL);
1716 msg("ReturnStatus[%d] ", returnStatus);
1720 msg("****Getting the parameter(Api:GetParameter)****");
1721 returnStatus = tel_get_sms_parameters(handle, 0, on_resp_get_sms_parameters, NULL);
1722 msg("ReturnStatus[%d]]", returnStatus);
1726 msg("***Getting the parameterCount(Api:GetParameterCount)***");
1727 returnStatus = tel_get_sms_parameter_count(handle, on_resp_get_paramcnt, NULL);
1728 msg("ReturnStatus[%d]", returnStatus);
1732 msg("***Getting the SmsCount(Api:GetSmsCount)***");
1733 returnStatus = tel_get_sms_count(handle, on_resp_get_sms_count, NULL);
1734 msg("ReturnStatus[%d]", returnStatus);
1738 msg("***Getting the Sms Ready status(Api:Check_sms_device_status)***");
1739 returnStatus = tel_check_sms_device_status(handle, &ready_status);
1740 msg("ReturnStatus[%d]", returnStatus);
1741 msg("Ready status = %d", ready_status);
1743 if (TAPI_NETTEXT_READY_STATUS_3GPP == ready_status)
1744 msg("TAPI_NETTEXT_READY_STATUS_3GPP");
1745 else if (TAPI_NETTEXT_READY_STATUS_3GPP2 == ready_status)
1746 msg("TAPI_NETTEXT_READY_STATUS_3GPP");
1747 else if (TAPI_NETTEXT_READY_STATUS_3GPP_AND_3GPP2 == ready_status)
1748 msg("TAPI_NETTEXT_READY_STATUS_3GPP_AND_3GPP2");
1750 msg("TAPI_NETTEXT_READY_STATUS_NONE");
1761 static int _get_int()
1766 memset(buf, 0, 255);
1767 ret = read(0, buf, 254);
1774 static int CdmaSetting(MManager *mm, struct menu_data *menu)
1776 TapiHandle *handle = menu_manager_ref_user_data(mm);
1781 char MemoryStatus[255] = {0, };
1783 TapiResult_t returnStatus;
1785 settingMenu = atoi(menu->key);
1787 switch (settingMenu) {
1788 case 2: { /* Set CB Enable/Disable */
1789 msg("****Setting the CB configuration(Api:SetCbConfig)****");
1790 CdmaCbSetting(mm, menu);
1794 case 3: { /* Set Memory Full Notification */
1795 msg("Enter Memory Status to be set(1:Memory Available, 2:Memory Full)");
1796 memset(MemoryStatus, 0, sizeof(MemoryStatus));
1797 ret = read(0, MemoryStatus, sizeof(MemoryStatus));
1799 msg(" NULL msg can NOT be sent ");
1803 msg("Memory Status type is %d ", atoi(MemoryStatus));
1804 returnStatus = tel_set_sms_memory_status(handle,
1805 atoi(MemoryStatus), on_resp_set_mem_status, NULL); /* Set to full 0x02-Full, 0x01-available */
1806 msg("api err after memstatus set is is %d", returnStatus);
1810 case 4: { /* Set Stored MsgStaus */
1811 msg("Not suppored in this Test App !!!");
1822 static int Setting(MManager *mm, struct menu_data *menu)
1824 TapiHandle *handle = menu_manager_ref_user_data(mm);
1830 char MemoryStatus[255] = {0, };
1831 char msg_status[10] = {0, };
1832 char index[10] = {0, };
1834 TelSmsCbConfig_t *pCBConfig;
1836 TelSmsParams_t smsParameters = { 0, };
1837 TapiResult_t returnStatus;
1839 settingMenu = atoi(menu->key);
1841 switch (settingMenu) {
1842 case 1: { /* Set Service Center Number */
1843 TelSmsAddressInfo_t sca = {0, };
1844 unsigned char sca_num[TAPI_SIM_SMSP_ADDRESS_LEN + 1];
1845 unsigned int sca_length = 0;
1846 unsigned int additional_len = 0;
1847 unsigned local_index, j;
1849 msg("*** Setting SCA (API: tel_set_sms_sca()) ****");
1852 msg("Enter the SCA NUMBER:");
1853 ret = scanf("%s", sca_num);
1854 if (ret > TAPI_SIM_SMSP_ADDRESS_LEN) {
1855 msg("Entered SCA is INVALID - SCA length cannot be greater than %d", TAPI_SIM_SMSP_ADDRESS_LEN);
1859 sca.Npi = TAPI_SIM_NPI_ISDN_TEL;
1860 sca.Ton = TAPI_SIM_TON_UNKNOWN;
1861 if (sca_num[0] == '+') {
1862 sca.Ton = TAPI_SIM_TON_INTERNATIONAL;
1866 sca_length = strlen((char *)sca_num) - additional_len;
1867 msg("Sca Length:[%d]", sca_length);
1869 if (sca_length % 2 == 0) {
1870 for (local_index = additional_len, j = 0; local_index < sca_length; local_index += 2, j++)
1871 sca.szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
1872 sca.szDiallingNum[(sca_length/2)] = '\0';
1873 sca.DialNumLen = (sca_length/2);
1875 for (local_index = additional_len, j = 0; local_index < sca_length+1; local_index += 2, j++) {
1876 if (local_index == (sca_length - 1))
1877 sca.szDiallingNum[j] = ((0xF0) | (sca_num[local_index] & 0x0F));
1879 sca.szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
1881 sca.szDiallingNum[(sca_length/2)] = sca.szDiallingNum[(sca_length/2)] | 0xF0;
1882 sca.DialNumLen = (sca_length/2)+1;
1884 msg("%d", sca.DialNumLen);
1885 returnStatus = tel_set_sms_sca(handle, &sca, 0, on_resp_set_sms_sca, NULL);
1886 msg("Return status: [%d]", returnStatus);
1890 case 3: { /* Set Deliver Report */
1891 msg("****Setting Deliver Report(Api:SetDeliverReport)****");
1895 case 4: { /* Set CB Enable/Disable */
1896 msg("****Setting the CB configuration(Api:SetCbConfig)****");
1898 pCBConfig = calloc(1, sizeof(TelSmsCbConfig_t));
1902 msg("Enter CB ON/OFF (1: Enable, 0:Disable): ");
1903 pCBConfig->CBEnabled = _get_int();
1905 msg("Enter Max ID Count: ");
1906 pCBConfig->MsgIdMaxCount = _get_int();
1908 msg("Enter MsgIdRangeCount (< 10): ");
1909 pCBConfig->MsgIdRangeCount = _get_int();
1911 if (pCBConfig->MsgIdRangeCount <= 0
1912 || pCBConfig->MsgIdRangeCount >= TAPI_NETTEXT_SMS_CBMI_LIST_SIZE_MAX) {
1913 msg("Bad Range value");
1918 for (i = 0; i < pCBConfig->MsgIdRangeCount; i++) {
1919 msg("Enter %d FromMsgId : ", i + 1);
1920 pCBConfig->MsgIDs[i].Net3gpp.FromMsgId = _get_int();
1922 msg("Enter %d ToMsgId : ", i + 1);
1923 pCBConfig->MsgIDs[i].Net3gpp.ToMsgId = _get_int();
1925 msg("Enter %d Selected : ", i + 1);
1926 pCBConfig->MsgIDs[i].Net3gpp.Selected = _get_int();
1929 pCBConfig->Net3gppType = 0x01;
1931 msg("from sms test setting the cb configuration:CBEnabled:%d, Net3gppType:%d, msgIdRangeCount:%d, From: %d\t To: %d\t Selected: %d",
1932 pCBConfig->CBEnabled, pCBConfig->Net3gppType,
1933 pCBConfig->MsgIdRangeCount,
1934 pCBConfig->MsgIDs[0].Net3gpp.FromMsgId,
1935 pCBConfig->MsgIDs[0].Net3gpp.ToMsgId,
1936 pCBConfig->MsgIDs[0].Net3gpp.Selected);
1938 returnStatus = tel_set_sms_cb_config(handle, pCBConfig,
1939 on_resp_set_sms_cb_config, NULL);
1940 msg("returnStatus after cbconfig set is is [%d]", returnStatus);
1947 unsigned int sca_length;
1948 unsigned char sca_num[TAPI_SIM_SMSP_ADDRESS_LEN + 1];
1949 const char *name = "AlphaID";
1951 smsParameters.RecordIndex = 0x00;
1954 smsParameters.AlphaIdLen = strlen(name);
1955 memcpy(&smsParameters.szAlphaId, name, strlen(name));
1957 /* Param Indicator*/
1958 smsParameters.ParamIndicator = 0xe1;
1960 /* Destination Number */
1961 memset(&smsParameters.TpDestAddr, 0x0, sizeof(TelSmsAddressInfo_t));
1963 smsParameters.TpProtocolId = 3;/* PID */
1964 smsParameters.TpDataCodingScheme = 2;/* DCS */
1965 smsParameters.TpValidityPeriod = 1;/* VP */
1968 msg("Enter the SCA NUMBER:");
1969 ret = scanf("%s", sca_num);
1970 if (ret > TAPI_SIM_SMSP_ADDRESS_LEN)
1971 msg("Entered SCA is INVALID - SCA length cannot be greater than %d", TAPI_SIM_SMSP_ADDRESS_LEN);
1972 } while (ret > TAPI_SIM_SMSP_ADDRESS_LEN);
1974 sca_length = SmsUtilEncodeSca(&(smsParameters.TpSvcCntrAddr), sca_num);
1975 msg("Encoded SCA Address Length[%d]", sca_length);
1977 returnStatus = tel_set_sms_parameters(handle, &smsParameters, on_resp_set_sms_params, NULL);
1978 msg("returnstatus after sparam set is %d", returnStatus);
1982 case 6: { /* Set Memory Full Notification */
1983 msg("Enter Memory Status to be set(1:Memory Available, 2:Memory Full)");
1984 memset(MemoryStatus, 0, sizeof(MemoryStatus));
1985 ret = read(0, MemoryStatus, sizeof(MemoryStatus));
1987 msg(" NULL msg can NOT be sent ");
1990 msg("Memory Status type is %d ", atoi(MemoryStatus));
1991 returnStatus = tel_set_sms_memory_status(handle,
1992 atoi(MemoryStatus), on_resp_set_mem_status, NULL); /* Set to full 0x02-Full, 0x01-available */
1993 msg("api err after memstatus set is is %d", returnStatus);
1997 case 7: { /* Set Stored MsgStaus */
1998 printf("Enter Message index to bet set:\n>> ");
2000 ret = read(0, index, sizeof(index) - 1);
2005 } else if (ret == 0) {
2006 printf("No index!!!\n");
2009 printf("Enter Message status to bet set (0:Read, 1:Unread, "
2010 "2:Sent, 3:Unsent, 4:Delivered, 5:Delivery Unconfirmed, 6:Message Replaced):\n>> ");
2012 ret = read(0, msg_status, sizeof(msg_status) - 1);
2017 } else if (ret == 0) {
2018 printf("No msg_status!!!\n");
2021 msg("Message status set!!! index[%d] msg_status[%d]", atoi(index), atoi(msg_status));
2022 tel_set_sms_message_status(handle, atoi(index), atoi(msg_status), on_resp_set_msg_status, NULL);
2027 msg("Not suppored in this Test App !!!");
2032 msg("Not suppored in this Test App !!!");
2043 static int CdmaCbSetting(MManager *mm, struct menu_data *menu)
2045 TapiHandle *handle = menu_manager_ref_user_data(mm);
2046 TelSmsCbConfig_t *cb_config;
2048 int return_status = 0;
2050 msg("****Setting the CB configuration(Api:SetCbConfig)****");
2052 cb_config = calloc(1, sizeof(TelSmsCbConfig_t));
2056 msg("Enter CB ON/OFF (1: Enable, 0:Disable): ");
2057 cb_config->CBEnabled = _get_int();
2059 msg("Enter Max ID Count: ");
2060 cb_config->MsgIdMaxCount = _get_int();
2062 msg("Enter MsgIdRangeCount (< 10): ");
2063 cb_config->MsgIdRangeCount = _get_int();
2065 if (cb_config->MsgIdRangeCount <= 0 || cb_config->MsgIdRangeCount >= TAPI_NETTEXT_SMS_CBMI_LIST_SIZE_MAX) {
2066 msg("Bad Range value");
2071 for (i = 0; i < cb_config->MsgIdRangeCount; i++) {
2072 msg("Enter %d Service Category : ", i + 1);
2073 cb_config->MsgIDs[i].Net3gpp2.CBCategory = _get_int();/*3GPP2 C.R1001-D v1.0 section 9.3 Service Category Assignments*/
2075 msg("Enter %d Language : ", i + 1);
2076 cb_config->MsgIDs[i].Net3gpp2.CBLanguage = _get_int();
2078 msg("Enter %d Selected : ", i + 1);
2079 cb_config->MsgIDs[i].Net3gpp2.Selected = _get_int();
2082 cb_config->Net3gppType = 0x02; /* CDMA */
2084 msg("CBEnabled:%d, Net3gppType:%d, msgIdRangeCount:%d",
2085 cb_config->CBEnabled, cb_config->Net3gppType, cb_config->MsgIdRangeCount);
2087 return_status = tel_set_sms_cb_config(handle, cb_config, on_resp_set_sms_cb_config, NULL);
2088 msg("returnStatus after cbconfig set is [%d]", return_status);
2094 static struct menu_data menu_sms_getting[] = {
2095 { "1", "Get Service Center Number", NULL, Getting, NULL },
2096 { "2", "Get CB Setting Information", NULL, Getting, NULL },
2097 { "3", "Get SMS Parameters", NULL, Getting, NULL },
2098 { "4", "Get SMS PreferredBearer Information", NULL, Getting, NULL },
2099 { "5", "Get SMS Parameter Count", NULL, Getting, NULL },
2100 { "6", "Get Message Count", NULL, Getting, NULL },
2101 { "7", "Get SMS ready status", NULL, Getting, NULL }, { NULL, NULL , }, };
2103 static struct menu_data menu_cdma_sms_getting[] = {
2104 { "1", "Get CB Setting Information", NULL, CdmaGetting, NULL },
2105 { "2", "Get SMS PreferredBearer Information", NULL, CdmaGetting, NULL },
2106 { "3", "Get Message Count in RUIM", NULL, CdmaGetting, NULL },
2107 { "4", "Get SMS ready status", NULL, CdmaGetting, NULL }, { NULL, NULL , }, };
2109 static struct menu_data menu_sms_setting[] = {
2110 { "1", "Set Service Center Number", NULL, Setting, NULL},
2111 { "2", "Set Preferred Bearer Type", NULL, Setting, NULL},
2112 { "4", "Set CB Enable/Disable", NULL, Setting, NULL},
2113 { "5", "Set SMS Parameters", NULL, Setting, NULL},
2114 { "6", "Set Memory Status", NULL, Setting, NULL},
2115 { "7", "Set Message Status", NULL, Setting, NULL}, { NULL, NULL , }, };
2117 static struct menu_data menu_cdma_sms_setting[] = {
2118 { "1", "Set PreferredBearer Type", NULL, CdmaSetting, NULL },
2119 { "2", "Set CB Enable/Disable", NULL, CdmaSetting, NULL },
2120 { "3", "Set Memory Status", NULL, CdmaSetting, NULL },
2121 { "4", "Set Stored MsgStaus", NULL, CdmaSetting, NULL },
2122 { NULL, NULL , }, };
2124 static struct menu_data menu_sms_wcdma[] = {
2125 { "1", "Send Message", NULL, SendMessage, NULL},
2126 { "2", "Read Message", NULL, ReadMessage, NULL},
2127 { "3", "Delete Message", NULL, DeleteMessage, NULL},
2128 { "4", "Setting", menu_sms_setting, NULL, NULL },
2129 { "5", "Getting SMS Information", menu_sms_getting, NULL, NULL },
2130 { NULL, NULL , }, };
2132 static struct menu_data menu_sms_cdma[] = {
2133 { "1", "Send CDMA Message", NULL, SendMessageCDMA, NULL },
2134 { "2", "Read CDMA Message in RUIM", NULL, ReadMessage, NULL },
2135 { "3", "Delete CDMA Message in RUIM", NULL, DeleteMessage, NULL },
2136 { "4", "Getting CDMA SMS Information", menu_cdma_sms_getting, NULL, NULL },
2137 { "5", "Setting CDMA SMS Information", menu_cdma_sms_setting, NULL, NULL },
2138 { NULL, NULL , }, };
2140 struct menu_data menu_sms[] = { { "1", "3GPP[GSM/WCDMA]", menu_sms_wcdma, NULL, NULL }, {
2141 "2", "3GPP2[CDMA/1xEV-DO]", menu_sms_cdma, NULL, NULL }, { NULL, NULL , }, };
2143 void register_sms_event(TapiHandle *handle)
2148 ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_INCOM_MSG,
2149 on_noti_sms_incom_msg, NULL);
2150 if (ret != TAPI_API_SUCCESS)
2151 msg("event register failed(%d)", ret);
2153 ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_CB_INCOM_MSG,
2154 on_noti_sms_cb_incom_msg, NULL);
2155 if (ret != TAPI_API_SUCCESS)
2156 msg("event register failed(%d)", ret);
2158 ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_ETWS_INCOM_MSG,
2159 on_noti_sms_etws_incom_msg, NULL);
2160 if (ret != TAPI_API_SUCCESS)
2161 msg("event register failed(%d)", ret);
2163 ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_MEMORY_STATUS,
2164 on_noti_sms_memory_status, NULL);
2165 if (ret != TAPI_API_SUCCESS)
2166 msg("event register failed(%d)", ret);
2168 ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_DEVICE_READY,
2169 on_noti_sms_ready_status, NULL);
2170 if (ret != TAPI_API_SUCCESS)
2171 msg("event register failed(%d)", ret);