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 <tapi_common.h>
30 #include <TapiUtility.h>
31 #include <ITapiNetText.h>
39 unsigned int SmsMsgId = 0;
40 unsigned char tp_mr = 0x00;
42 const char *cmdString[] = { "TAPI_SERVICE_SMS_SEND_UMTS_MSG",
43 "TAPI_SERVICE_SMS_READ_MSG", "TAPI_SERVICE_SMS_SAVE_MSG",
44 "TAPI_SERVICE_SMS_DELETE_MSG", "TAPI_SERVICE_SMS_GET_COUNT",
45 "TAPI_SERVICE_SMS_GET_SCA", "TAPI_SERVICE_SMS_SET_SCA",
46 "TAPI_SERVICE_SMS_GET_CB_CONFIG", "TAPI_SERVICE_SMS_SET_CB_CONFIG",
47 "TAPI_SERVICE_SMS_SET_MEM_STATUS", "TAPI_SERVICE_SMS_GET_PREF_BEARER",
48 "TAPI_SERVICE_SMS_SET_PREF_BEARER",
49 "TAPI_SERVICE_SMS_SET_DELIVERY_REPORT",
50 "TAPI_SERVICE_SMS_SET_MSG_STATUS", "TAPI_SERVICE_SMS_GET_PARAMS",
51 "TAPI_SERVICE_SMS_SET_PARAMS", "TAPI_SERVICE_SMS_GET_PARAMCNT",
52 "TAPI_SERVICE_SMS_SEND_CDMA_MSG" };
54 static void on_resp_send_msg (TapiHandle *handle, int result, void *data,
56 static void on_resp_read_msg (TapiHandle *handle, int result, void *data,
58 static void on_resp_save_msg (TapiHandle *handle, int result, void *data,
60 static void on_resp_DeliverReport_msg (TapiHandle *handle, int result,
61 void *data, void *user_data);
62 int _util_hexstring_to_asciistring(const unsigned char *hex_string, unsigned char *ascii_string,int hex_len);
64 unsigned int SmsUtilEncodeSca(TelSmsAddressInfo_t *sca, unsigned char *sca_num);
66 int _util_hexstring_to_asciistring(const unsigned char *hex_string, unsigned char *ascii_string,int hex_len)
70 if(hex_string[hex_len-1]>>4 == 0x0f ) {
71 ascii_len = (hex_len * 2 ) -1;
73 ascii_len = (hex_len * 2 );
76 for (i =0; i < ascii_len; i++ ) {
78 ascii_string[i]= (hex_string[i/2] & 0x0f)+ '0';
80 ascii_string[i]=((hex_string[i/2] >> 4 ))+ '0';
83 ascii_string[ascii_len]='\0';
87 unsigned int SmsUtilEncodeSca(TelSmsAddressInfo_t *sca, unsigned char *sca_num)
89 unsigned int sca_length = 0;
90 unsigned int additional_len = 0;
91 unsigned local_index, j;
93 sca->Npi = TAPI_SIM_NPI_ISDN_TEL;
94 sca->Ton = TAPI_SIM_TON_UNKNOWN;
95 if (sca_num[0] == '+') {
96 sca->Ton = TAPI_SIM_TON_INTERNATIONAL;
99 sca_length = strlen((char *)sca_num) - additional_len;
100 if (sca_length % 2 == 0) {
101 for (local_index = additional_len, j = 0; local_index < sca_length; local_index += 2, j++)
102 sca->szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
104 for (local_index = additional_len, j = 0; local_index < sca_length; local_index += 2, j++) {
105 if (local_index == (sca_length - 1))
106 sca->szDiallingNum[j] = ((0xF0) | (sca_num[local_index] & 0x0F));
108 sca->szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
111 sca->szDiallingNum[(sca_length+1)/2] = '\0';
112 sca->DialNumLen = (sca_length+1)/2;
114 return sca->DialNumLen;
118 static BOOL EncodeCdmaSmsSubmitTpdu (char* diallingNum, int dialNumLen,
119 char* msgTxt, int msg_len)
124 static BOOL DecodeCellBroadcastMsg (int length, char * pPDU)
127 int sn = 0; //serial number
128 int msgID; //message identifier
129 Sms_coding_scheme dcs;
131 unsigned char page[2];
133 char contents[SMS_CB_SIZE_MAX];
136 unsigned char msgCode;
137 unsigned char updateNumber;
144 msg("cb msg type is %x", pPDU[0]);
145 msg("cb msg len is %x", pPDU[1]);
147 msg("$$$$$$$$$$$$$$$length of cb msg is %d", length);
148 sn = (pPDU[2] << 8) | pPDU[1];
150 gs = (pPDU[2] & 0xC0) >> 6; //bit 7, bit 6
152 msgCode = ( ( (pPDU[2] & 0x3F) << 4) | pPDU[3]) & 0xF0;
154 updateNumber = pPDU[3] & 0x0F; //bit3, bit2, bit1, bit0
156 msgID = pPDU[4] << 4 | pPDU[3];
158 SmsUtilDecodeDCS (&dcs, pPDU[6]);
160 page[0] = pPDU[7] & 0x0F; //total page
161 page[1] = (pPDU[7] & 0xF0) >> 4; //current page
163 msgLength = length - 2;
165 contents_length = msgLength - 6;
167 if (dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
168 unsigned char inData[SMS_CB_SIZE_MAX + 1];
170 memset (inData, 0x00, SMS_CB_SIZE_MAX + 1);
172 memcpy ((void*) inData, (void*) &pPDU[8], contents_length);
173 SmsUtilUnpackGSMCode (contents, &pPDU[8], msgLength);
176 memcpy (contents, &pPDU[8], msgLength);
177 contents[msgLength] = 0;
180 printf ("*************************************\n");
181 printf ("serical number : 0x%04x \n", sn);
182 printf ("Geographical Scope: 0x%x\n", gs);
183 printf ("message code : 0x%x\n", msgCode);
184 printf ("update Number : 0x%x\n", updateNumber);
185 printf ("message identifier : 0x%x\n", msgID);
186 printf ("DCS-Commpressed?: %d (1: true)\n", dcs.bCompressed);
187 printf ("DCS-coding_group_type: %x\n", dcs.coding_group_type);
188 printf ("contents bytes size : %d\n", contents_length);
189 printf ("page : (%d /%d) (page /total ) \n", page[1], page[0]);
190 printf ("contents: %s\n", contents);
191 printf ("*************************************\n");
196 static BOOL EncodeSmsSubmitTpdu (MManager *mm, char* diallingNum,
197 int dialNumLen, char* msg, int msg_len)
199 TapiHandle *handle = menu_manager_ref_user_data (mm);
201 TPDU_SMS_SUBMIT tpdu_submit;
203 unsigned char packet[TAPI_NETTEXT_MSG_SIZE_MAX];
205 unsigned char SCA[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 1];
207 unsigned char tp_pid = 0; //reaplace type (65)
208 unsigned char tp_dcs; //=17; //class_1(17),class_2(18)
211 int local_index = 0, ScIndex = 0;
214 unsigned char sca_len = 0;
215 TapiResult_t returnStatus;
217 TelSmsDatapackageInfo_t *pDataPackage = NULL;
221 memset (packet, 0, TAPI_NETTEXT_MSG_SIZE_MAX);
223 /************SCA ADDRESS GET START**************/
225 returnStatus = TelTapiSmsGetSCA(&sc_addr,0);
226 printf("Service center addr returned from TAPI SCA address %s returnStatus %d\n",sc_addr.szDiallingNum,returnStatus);
227 SmsUtilDecodeAddrField(decodeScaAddr, &sc_addr.szDiallingNum[0],&sc_addr.Ton, &sc_addr.Npi);
228 sca_len = strlen( decodeScaAddr );
230 memcpy( SCA, decodeScaAddr, sca_len);
234 memset (SCA, 0, sizeof (SCA));
236 ret = read (0, SCA, sizeof (SCA) - 1);
238 msg(" NULL msg can NOT be sent ");
243 pDataPackage = malloc (sizeof(TelSmsDatapackageInfo_t));
244 memset (pDataPackage, 0, sizeof(TelSmsDatapackageInfo_t));
246 sca_len = strlen ((char *) SCA) - 1;
248 msg("Decode SCA Address =========");
249 msg("SCA Number :%s, SCA Length :%d ", SCA, sca_len);
250 msg("========================");
252 //SCA ADDRESS GET END
258 ScIndex = SmsUtilEncodeAddrField ((unsigned char*) pDataPackage->Sca,
259 (char *) SCA, sca_len, 0x01, 0x01);
261 msg("ScIndex is %d", ScIndex);
263 // TP-MTI, TP-RD, TP-VPF, TP-SRR, TP_UDHI, TP-RP
264 tpdu_submit.msg_type = SMS_TPDU_SUBMIT;
265 tpdu_submit.rd = FALSE; //false :accept duplicate msg , true: reject duplicate msg
266 tpdu_submit.vpf = SMS_VP_RELATIVE;
267 tpdu_submit.srr = FALSE; //false :A status report is not requested , true: A status report is requested
268 tpdu_submit.udhi = FALSE; //false: contains only the short message , true :a Header in addition to the short message
269 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
271 packet[local_index] = tpdu_submit.msg_type; // SUBMIT: bits 0, 1
272 packet[local_index] |= tpdu_submit.rd ? 0x04 : 0; // bit 2
273 packet[local_index] |= tpdu_submit.vpf << 3; // bits 3, 4
274 packet[local_index] |= tpdu_submit.srr ? 0x20 : 0; // bit 5
275 packet[local_index] |= tpdu_submit.udhi ? 0x40 : 0; // bit 6
276 packet[local_index] |= tpdu_submit.rp ? 0x80 : 0; // bit 7
279 msg("local_index of message ref is %d, msgref is %d", local_index, tp_mr);
281 packet[local_index++] = tp_mr;
284 local_index += SmsUtilEncodeAddrField (packet + local_index, diallingNum, dialNumLen, 0x01, 0x01);
286 //msg("DESTINATTION ADDR Encoded =========");
289 packet[local_index++] = tp_pid;
291 // TP_DCS (Data Coding Scheme)
293 tpdu_submit.dcs.bCompressed = FALSE;
294 tpdu_submit.dcs.bmsg_class_set = TRUE;
295 tpdu_submit.dcs.coding_group_type = SMS_CODGRP_SM_GENERAL_DCS;
296 tpdu_submit.dcs.alphabet_type = SMS_ALPHABET_DEFAULT;
297 tpdu_submit.dcs.class_type = SMS_CLASS_2;
299 SmsUtilEncodeDCS (&tp_dcs, &tpdu_submit.dcs);
301 packet[local_index++] = tp_dcs;
303 //msg("DCS Encoded:tp_dcs =%d =========",tp_dcs);
307 tpdu_submit.vp.vp_rel_type = SMS_VP_REL_6H;
308 tpdu_submit.vp.vp_type = SMS_VP_RELATIVE;
309 tpdu_submit.vp.vpValue = 0xff;
311 SmsUtilEncodeValidity (&tp_vp, &tpdu_submit.vp);
314 packet[local_index++] = tp_vp;
315 //msg("Validity Encoded :tp_vp =%d =========",tp_vp);
318 packet[local_index++] = msg_len;
322 if (tpdu_submit.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
324 pos = SmsUtilPackGSMCode (packet + local_index, msg, msg_len);
328 msg("Send packet to phonseSever[%d] -----", local_index);
330 for (i = 0; i < local_index; i++) {
331 msg("[%02x]", packet[i]);
337 memcpy (pDataPackage->szData, packet, local_index);
338 pDataPackage->MsgLength = local_index;
340 msg("***Sending the Message (Api:SendMsg)***");
342 msg("Length : %d", pDataPackage->MsgLength);
344 returnStatus = tel_send_sms (handle, pDataPackage, 0, on_resp_send_msg,
347 msg("SendMsg : returnStatus=%d requestId=%d", returnStatus, requestId);
356 static int DecodeSmsDeliverTpdu (int tpdu_len, char* pTPDU)
358 TPDU_SMS_DELIVER tpdu_deliver;
359 TmDateTime SCTimeStamp;
361 char diallingNum[SMS_ADDRESS_LEN_MAX + 1];
362 char orgAddr[SMS_ADDRESS_LEN_MAX + 1]; //originating number
363 int org_ton, org_npi;
366 /* TP-MTI, TP-MMS, TP-SRI, TP_UDHI, TP-RP */
367 tpdu_deliver.msg_type = SMS_TPDU_DELIVER;
368 tpdu_deliver.mms = (pTPDU[position] & 0x04) ? TRUE : FALSE; // bit 2 (Message Type Indicator)
369 tpdu_deliver.sri = (pTPDU[position] & 0x20) ? TRUE : FALSE; // bit 5 (Status Report Indication)
370 tpdu_deliver.udhi = (pTPDU[position] & 0x40) ? TRUE : FALSE;// bit 6 (User Data Header Indicator)
371 tpdu_deliver.rp = (pTPDU[position] & 0x80) ? TRUE : FALSE;// bit 7 (Reply Path)
377 memset (diallingNum, 0, sizeof (diallingNum));
379 orgAddr_len = SmsUtilDecodeAddrField (diallingNum, &pTPDU[position],
381 if (orgAddr_len > SMS_ADDRESS_LEN_MAX - 1)
382 orgAddr_len = SMS_ADDRESS_LEN_MAX - 1;
387 position += orgAddr_len / 2 + 1;
389 position += orgAddr_len / 2;
391 msg("pos = %d, length = %d", position, orgAddr_len);
393 if (org_ton == SMS_TON_INTERNATIONAL) {
395 memcpy (&orgAddr[1], diallingNum, orgAddr_len - 1);
396 orgAddr[orgAddr_len + 1] = '\0';
399 memcpy (orgAddr, diallingNum, orgAddr_len);
400 orgAddr[orgAddr_len] = '\0';
404 tpdu_deliver.pId = pTPDU[position];
409 SmsUtilDecodeDCS (&tpdu_deliver.dcs, pTPDU[position]);
414 SmsUtilDecodeTimeStamp (&pTPDU[position], &SCTimeStamp);
419 tpdu_deliver.udl = pTPDU[position];
421 if (tpdu_deliver.udl > SMS_SMDATA_SIZE_MAX)
422 tpdu_deliver.udl = SMS_SMDATA_SIZE_MAX;
427 tpdu_deliver.userData = malloc (
428 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
430 memset (tpdu_deliver.userData, 0,
431 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
433 if (tpdu_deliver.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
434 char inData[SMS_SMDATA_SIZE_MAX + 1];
436 memset (inData, 0x00, SMS_SMDATA_SIZE_MAX + 1);
438 memcpy ((void*) inData, (void*) &pTPDU[position], tpdu_deliver.udl);
440 SmsUtilUnpackGSMCode (tpdu_deliver.userData, inData,
441 (unsigned char) tpdu_deliver.udl);
444 msg("*************************************");
445 msg("Msg Type: TPDU_DELIVER");
447 if (tpdu_deliver.rp) {
448 msg("RP: Set Reply Path")
450 else if (!tpdu_deliver.rp) {
451 msg("RP: Not set Reply Path")
454 if (tpdu_deliver.sri) {
455 msg("SRI: A status report shall be returned to the SME")
457 else if (!tpdu_deliver.sri) {
458 msg("SRI: A status report shall be not returned to the SME")
461 if (tpdu_deliver.mms) {
462 msg("MMS: No more messages are waiting for the MS in this SC")
464 else if (!tpdu_deliver.mms) {
465 msg("MMS: More messages are waiting for the MS in this SC")
468 if (tpdu_deliver.udhi) {
469 msg("UDHI: Contains a Header in addition to the short message.")
471 else if (!tpdu_deliver.udhi) {
472 msg("UDHI: Only short message.")
475 msg("DcsClass : %x (4 means Class None) ", tpdu_deliver.dcs.class_type);
477 msg("From : %10s", orgAddr);
478 msg("Time : %d-%d-%d , %d:%d:%d", SCTimeStamp.year, SCTimeStamp.month,
479 SCTimeStamp.day, SCTimeStamp.hour, SCTimeStamp.minute,
481 msg("Message : %s ", tpdu_deliver.userData);
482 msg("*************************************");
489 static int DecodeSmsStatusReportTpdu (int tpdu_len, char* pTPDU)
491 TPDU_SMS_STATUS_REPORT status_report;
493 TmDateTime SCTimeStamp;
494 TmDateTime DischargeTime;
497 char diallingNum[SMS_ADDRESS_LEN_MAX];
499 char rcpAddr[SMS_ADDRESS_LEN_MAX]; //recipient number
500 int rcp_ton, rcp_npi;
504 /* TP-MTI, TP MMS, TP SRQ, TP_UDHI */
506 status_report.msg_type = pTPDU[position] & 0x03; // bit 0,1
507 status_report.mms = pTPDU[position] & 0x04 ? TRUE : FALSE; // bit 2
508 status_report.srq = pTPDU[position] & 0x20 ? TRUE : FALSE; //bit 5
509 status_report.udhi = pTPDU[position] & 0x40 ? TRUE : FALSE; //bit 6
514 status_report.mr = pTPDU[position];
519 memset (diallingNum, 0, sizeof (diallingNum));
521 SmsUtilDecodeAddrField (diallingNum, &pTPDU[position], &rcp_ton, &rcp_npi);
525 rcpAddr_len = strlen ((char*) diallingNum);
527 position += rcpAddr_len / 2 + 1;
529 position += rcpAddr_len / 2;
531 if (rcp_ton == SMS_TON_INTERNATIONAL) {
533 memcpy (&rcpAddr[1], diallingNum, rcpAddr_len);
534 rcpAddr[rcpAddr_len + 1] = '\0';
537 memcpy (rcpAddr, diallingNum, rcpAddr_len);
538 rcpAddr[rcpAddr_len] = '\0';
541 status_report.rcpAddr.DialNumLen = rcpAddr_len;
542 memcpy (status_report.rcpAddr.szDiallingNum, rcpAddr, rcpAddr_len);
543 status_report.rcpAddr.Npi = rcp_npi;
544 status_report.rcpAddr.Ton = rcp_ton;
547 SmsUtilDecodeTimeStamp (&pTPDU[position], &SCTimeStamp);
551 SmsUtilDecodeTimeStamp (&pTPDU[position], &DischargeTime);
555 status_report.status = pTPDU[position];
559 status_report.paraInd = pTPDU[position];
561 mask = status_report.paraInd;
563 if ( (mask != 0xFF) && (mask != 0)) {
564 /* Increment only if mask is valid */
569 status_report.pId = pTPDU[position];
574 SmsUtilDecodeDCS (&status_report.dcs, pTPDU[position]);
579 status_report.udl = pTPDU[position];
584 status_report.userData = malloc (
585 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
587 memset (status_report.userData, 0,
588 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
590 if (status_report.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
591 char inData[SMS_SMDATA_SIZE_MAX + 1];
593 memset (inData, 0x00, SMS_SMDATA_SIZE_MAX + 1);
595 memcpy ((void*) inData, (void*) &pTPDU[position],
598 SmsUtilUnpackGSMCode (status_report.userData, inData,
599 (unsigned char) status_report.udl);
605 msg("*************************************");
606 msg("Msg Type: STATUS_REPORT");
607 if (status_report.mms) {
608 msg("MMS: No more messages are waiting for the MS in this SC")
610 else if (!status_report.mms) {
611 msg("MMS: More messages are waiting for the MS in this SC")
614 if (status_report.srq) {
615 msg("SRQ: the result of an SMS COMMAND ")
617 else if (!status_report.srq) {
618 msg("SRQ: the result of a SMS SUBMIT.")
621 if (status_report.udhi) {
622 msg("UDHI: Contains a Header in addition to the short message.")
624 else if (!status_report.udhi) {
625 msg("UDHI: Only Short Message")
628 msg("STATUS:%x", status_report.status);
629 if (status_report.status == 0x00) {
630 msg("STATUS : Short message received by the SME")
632 else if (status_report.status == 0x01) {
634 "STATUS : Short message forwarded by the SC to the SMEbut the SC is unable to confirm delivery")
636 else if (status_report.status == 0x02) {
637 msg("STATUS : Short message replaced by the SC")
640 msg("Recipient Number : %s", rcpAddr);
641 msg("SC Time Stamp : %d-%d-%d , %d:%d:%d", SCTimeStamp.year,
642 SCTimeStamp.month, SCTimeStamp.day, SCTimeStamp.hour,
643 SCTimeStamp.minute, SCTimeStamp.second);
644 msg("Discharge Time : %d-%d-%d , %d:%d:%d", DischargeTime.year,
645 DischargeTime.month, DischargeTime.day, DischargeTime.hour,
646 DischargeTime.minute, DischargeTime.second);
649 msg("Message : %s ", status_report.userData);
651 msg("*************************************");
657 static void on_noti_sms_incom_msg (TapiHandle *handle, const char *noti_id,
658 void *data, void *user_data)
660 TelSmsDatapackageInfo_t *datapackage = data;
665 char diallingNum[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1] = { 0, };
666 char scaAddr[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 2] = { 0, }; //service center address
667 int sca_ton, sca_npi;
672 unsigned char MTI = 0;
673 unsigned char MMS = 0;
674 unsigned char SRI = 0;
675 unsigned char UDHI = 0;
676 unsigned char RP = 0;
678 Sms_coding_scheme dcs;
679 TapiResult_t returnStatus;
680 TelSmsData_t WriteData;
681 TelSmsDatapackageInfo_t * del_report = NULL;
683 if (datapackage == NULL) {
688 msgb("event(%s) receive !!", TAPI_NOTI_SMS_INCOM_MSG);
690 memset (diallingNum, 0, sizeof (diallingNum));
692 sca_length = datapackage->Sca[0];
694 sca_ton = (datapackage->Sca[offset +1] & 0x70) >> 4;
695 sca_npi = datapackage->Sca[offset +1] & 0x0F;
697 msg("TON %d", sca_ton);
698 msg("NPI %d", sca_npi);
700 /* Modem Send the hex encoded SCA Service center digits*/
701 scaAddr_len = _util_hexstring_to_asciistring(&datapackage->Sca[2], (unsigned char *) diallingNum, sca_length-1);
703 msg("SCA ascii length%d", scaAddr_len);
704 msg("SCA Number:[%s]", diallingNum);
706 if (scaAddr_len > TAPI_NETTEXT_SCADDRESS_LEN_MAX)
707 scaAddr_len = TAPI_NETTEXT_SCADDRESS_LEN_MAX;
709 if (sca_ton == SMS_TON_INTERNATIONAL) {
711 memcpy (&scaAddr[1], diallingNum, scaAddr_len - 1);
714 memcpy (scaAddr, diallingNum, scaAddr_len);
717 msg("Sc address in test app is %s", scaAddr);
719 RP = datapackage->szData[position] & 0x80;
720 UDHI = datapackage->szData[position] & 0x40;
721 SRI = datapackage->szData[position] & 0x20;
722 MMS = datapackage->szData[position] & 0x04;
723 MTI = datapackage->szData[position] & 0x03;
726 msg("UDHI [%x]", UDHI);
727 msg("SRI [%x]", SRI);
728 msg("MMS [%x]", MMS);
729 msg("MTI [%02x]", MTI);
731 tpdu_len = datapackage->MsgLength;
733 pTPDU = malloc (sizeof(unsigned char) * tpdu_len);
735 memcpy (pTPDU, &datapackage->szData[position], tpdu_len);
737 if (MTI == SMS_TPDU_DELIVER) {
738 DecodeSmsDeliverTpdu (tpdu_len, pTPDU);
740 msg("dcs_pos : %d", dcs_pos);
742 SmsUtilDecodeDCS (&dcs, datapackage->szData[position + dcs_pos]);
744 if (dcs.class_type == SMS_CLASS_2) {
745 msg("dcs type is of class2");
747 memset (&WriteData, 0, sizeof(TelSmsData_t));
749 memcpy (WriteData.SmsData.Sca, datapackage->Sca,
750 TAPI_SIM_SMSP_ADDRESS_LEN);
752 WriteData.SmsData.MsgLength = datapackage->MsgLength;
754 memcpy (WriteData.SmsData.szData, datapackage->szData,
755 datapackage->MsgLength);
757 WriteData.MsgStatus = TAPI_NETTEXT_STATUS_READ;
758 WriteData.SmsData.format = TAPI_NETTEXT_NETTYPE_3GPP;
760 returnStatus = tel_write_sms_in_sim (handle, &WriteData,
761 on_resp_save_msg, NULL );
763 msg("returnStatus for tel_write_sms_in_sim(): 0x%x", returnStatus);
767 else if (MTI == SMS_TPDU_STATUS_REPORT) {
768 DecodeSmsStatusReportTpdu (tpdu_len, pTPDU);
770 del_report = malloc (sizeof(TelSmsDatapackageInfo_t));
772 memset (del_report, 0, sizeof(TelSmsDatapackageInfo_t));
774 memcpy (del_report->Sca, datapackage->Sca, TAPI_SIM_SMSP_ADDRESS_LEN);
776 del_report->szData[0] = SMS_TPDU_DELIVER_REPORT; //TP-UDHI[bit6] : 0
777 del_report->szData[1] = 0;// TP-PI = 0; bit2: TP-UDL bit1: TP-DCS bit0: TP-PID (No option field)
778 del_report->MsgLength = 2;
779 del_report->format = TAPI_NETTEXT_NETTYPE_3GPP;
781 msg("***receive message (Api:SendDeliverreport)****");
783 returnStatus = tel_send_sms_deliver_report (handle, del_report,
784 TAPI_NETTEXT_SENDSMS_SUCCESS, on_resp_DeliverReport_msg, NULL );
786 msg("returnStatus for tel_send_sms_deliver_report(): 0x%x", returnStatus);
794 static void on_noti_sms_cb_incom_msg (TapiHandle *handle, const char *noti_id,
795 void *data, void *user_data)
797 TelSmsCbMsg_t *cbMsg = data;
799 char pPDU[SMS_CB_SIZE_MAX + 3] = { 0, };
802 msgb("event(%s) receive !!", TAPI_NOTI_SMS_CB_INCOM_MSG);
804 length = cbMsg->Length;
805 pPDU[0] = cbMsg->CbMsgType;
807 memcpy (& (pPDU[2]), cbMsg->szMsgData, SMS_CB_SIZE_MAX + 1);
809 DecodeCellBroadcastMsg (length, pPDU);
812 static void on_noti_sms_etws_incom_msg (TapiHandle *handle, const char *noti_id,
813 void *data, void *user_data)
815 TelSmsEtwsMsg_t *etwsMsg = data;
817 char pPDU[TAPI_NETTEXT_ETWS_SIZE_MAX + 3] = { 0, };
820 msgb("event(%s) receive !!", TAPI_NOTI_SMS_ETWS_INCOM_MSG);
822 length = etwsMsg->Length;
823 pPDU[0] = etwsMsg->EtwsMsgType;
825 memcpy (& (pPDU[2]), etwsMsg->szMsgData, TAPI_NETTEXT_ETWS_SIZE_MAX + 1);
830 static void on_noti_sms_memory_status (TapiHandle *handle, const char *noti_id,
831 void *data, void *user_data)
833 int *memory_status = data;
836 msgb("event(%s) receive !!", TAPI_NOTI_SMS_MEMORY_STATUS);
837 msg(" - memory_status = 0x%x", *memory_status);
840 static void on_noti_sms_ready_status (TapiHandle *handle, const char *noti_id,
841 void *data, void *user_data)
843 gboolean *device_ready = data;
846 msgb("event(%s) receive !!", TAPI_NOTI_SMS_DEVICE_READY);
847 msg(" - device_ready = %s", *device_ready ? "TRUE" : "FALSE");
850 static void on_resp_send_msg (TapiHandle *handle, int result, void *data,
854 msgb("tel_send_sms() response receive");
855 msg(" - result = 0x%x", result);
858 static void on_resp_read_msg (TapiHandle *handle, int result, void *data,
861 TelSmsData_t * sim_data;
865 char diallingNum[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1] = { 0, };
866 char scaAddr[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 2] = { 0, }; //service center address
867 int sca_ton, sca_npi;
875 sim_data = (TelSmsData_t *) data;
877 if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_UNREAD)
878 msg("Msg Staus : received unread msg")
879 else if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_READ)
880 msg("Msg Staus : received read msg")
881 else if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_UNSENT)
882 msg("Msg Staus : unsent msg")
884 msg("Msg Staus : [%d]", sim_data->MsgStatus)
886 msg("First Data [%x]", sim_data->SmsData.szData[0]);
887 msg("Second Data [%x]", sim_data->SmsData.szData[1]);
888 msg("Third Data [%x]", sim_data->SmsData.szData[2]);
889 msg("Fourth Data [%x]", sim_data->SmsData.szData[3]);
893 memset (diallingNum, 0, sizeof (diallingNum));
895 SmsUtilDecodeAddrField (diallingNum, (char *) sim_data->SmsData.Sca,
898 position += 2; //include Address-Length, Type of Address
900 scaAddr_len = strlen ((char *) diallingNum);
901 if (scaAddr_len > TAPI_NETTEXT_SCADDRESS_LEN_MAX - 1)
902 scaAddr_len = TAPI_NETTEXT_SCADDRESS_LEN_MAX - 1;
905 position += scaAddr_len / 2 + 1;
907 position += scaAddr_len / 2;
909 if (sca_ton == SMS_TON_INTERNATIONAL) {
911 memcpy (&scaAddr[1], diallingNum, scaAddr_len);
914 memcpy (scaAddr, diallingNum, scaAddr_len);
917 tpdu_len = sim_data->SmsData.MsgLength;
919 msg("SCA Number : %s tpdu_len is %d", scaAddr, tpdu_len);
921 pTPDU = malloc (sizeof(unsigned char) * tpdu_len);
925 msg("bfor memcopy position is %d", position);
926 memcpy (pTPDU, & (sim_data->SmsData.szData[0]), tpdu_len);
929 DecodeSmsDeliverTpdu (tpdu_len, pTPDU);
934 static void on_resp_save_msg (TapiHandle *handle, int result, void *data,
937 int *local_index = data;
940 msgb("tel_write_sms_in_sim() response receive");
941 msg(" - result = 0x%x", result);
942 msg(" - local_index = %d", *local_index);
945 static void on_resp_delete_msg (TapiHandle *handle, int result, void *data,
948 int *local_index = data;
951 msgb("tel_delete_sms_in_sim() response receive");
952 msg(" - result = 0x%x", result);
953 msg(" - local_index = %d", *local_index);
956 static void on_resp_DeliverReport_msg (TapiHandle *handle, int result,
957 void *data, void *user_data)
959 int *local_index = data;
962 msgb("tel_send_sms_deliver_report() response receive");
963 msg(" - result = 0x%x", result);
964 msg(" - local_index = %d", *local_index);
967 static void on_resp_set_sms_sca (TapiHandle *handle, int result, void *data,
971 msgb("tel_set_sms_sca() response receive");
972 msg(" - result = 0x%x", result);
975 static void on_resp_set_sms_cb_config (TapiHandle *handle, int result,
976 void *data, void *user_data)
979 msgb("tel_set_sms_cb_config() response receive");
980 msg(" - result = 0x%x", result);
983 static void on_resp_set_sms_params (TapiHandle *handle, int result, void *data,
987 msgb("tel_set_sms_params() response receive");
988 msg(" - result = 0x%x", result);
991 static void on_resp_set_mem_status (TapiHandle *handle, int result, void *data,
995 msgb("tel_set_sms_mem_status() response receive");
996 msg(" - result = 0x%x", result);
999 static void on_resp_get_sms_sca (TapiHandle *handle, int result, void *data,
1002 TelSmsAddressInfo_t *scaInfo = data;
1006 msgb("tel_get_sms_sca() response receive");
1007 msg(" - result = 0x%x", result);
1008 msg(" - TON = %d", scaInfo->Ton);
1009 msg(" - NPI = %d", scaInfo->Npi);
1010 msg(" - DialNumLen = %d", scaInfo->DialNumLen);
1013 for (i = 0; i < scaInfo->DialNumLen; i++) {
1014 msg("[%02x]", scaInfo->szDiallingNum[i]);
1020 static void on_resp_get_cb_config (TapiHandle *handle, int result, void *data,
1023 TelSmsCbConfig_t * CBConfig;
1026 if (data == NULL ) {
1027 msg("pData is Null")
1031 CBConfig = (TelSmsCbConfig_t *) data;
1034 msgb("tel_get_sms_cb_config() response receive");
1035 msg(" - result = 0x%x", result);
1037 msg("=========CB Configuration=========");
1039 /*** CB Enable/Diable ***/
1040 if (CBConfig->CBEnabled == TRUE)
1041 msg("Cell Broadcast Msg Enabled...")
1043 msg("Cell Broadcast Msg Disabled...")
1045 /*** Selected ID ***/
1046 if (CBConfig->Net3gppType == 0x01)
1047 msg("Network type is 3gpp ")
1048 else if (CBConfig->Net3gppType == 0x02)
1049 msg("Network type is CDMA");
1051 /*** CBMI Count ***/
1052 msg("CBMI Range Count: %d \n", CBConfig->MsgIdRangeCount);
1055 if (CBConfig->MsgIdRangeCount != 0) {
1056 msg("----- CBMI List -----");
1057 for (i = 0; i < CBConfig->MsgIdRangeCount; i++) {
1058 msg("From No.%d - [0x%04x]", i,
1059 CBConfig->MsgIDs[i].Net3gpp.FromMsgId);
1060 msg("To No.%d - [0x%04x]", i, CBConfig->MsgIDs[i].Net3gpp.ToMsgId);
1063 msg("==================================");
1066 static void on_resp_get_sms_parameters (TapiHandle *handle, int result,
1067 void *data, void *user_data)
1069 TelSmsParams_t *smsp_param;
1072 if (data == NULL ) {
1076 smsp_param = (TelSmsParams_t *) data;
1079 msgb("tel_get_sms_parameters() response receive");
1080 msg(" - result = 0x%x", result);
1082 msg("record index is 0x%x", smsp_param->RecordIndex);
1083 msg("record len is 0x%x", smsp_param->RecordLen);
1084 msg("alpha_id len is 0x%x ", (int )smsp_param->AlphaIdLen);
1085 msg("alpha_id is %s ", smsp_param->szAlphaId);
1086 msg("param indicator is 0x%x", smsp_param->ParamIndicator);
1088 for (i = 0; i < (int) smsp_param->TpDestAddr.DialNumLen; i++)
1089 msg("DestAddr = %d [%02x]", i, smsp_param->TpDestAddr.szDiallingNum[i]);
1091 for (i = 0; i < (int) smsp_param->TpSvcCntrAddr.DialNumLen; i++)
1092 msg("SCAddr = %d [%02x]", i, smsp_param->TpSvcCntrAddr.szDiallingNum[i]);
1094 msg("pid 0x%x", smsp_param->TpProtocolId);
1095 msg("dcs is 0x%x", smsp_param->TpDataCodingScheme);
1096 msg("validity is 0x%x", smsp_param->TpValidityPeriod);
1099 static void on_resp_get_paramcnt (TapiHandle *handle, int result, void *data,
1104 if (data == NULL ) {
1109 RecordCount = (int *) data;
1112 msgb("tel_get_sms_parameter_count() response receive");
1113 msg(" - result = 0x%x", result);
1114 msg(" - In param_count_noti the record count is %d", *RecordCount);
1117 static void on_resp_get_sms_count (TapiHandle *handle, int result, void *data,
1120 static TelSmsStoredMsgCountInfo_t *countInfo;
1121 int loop_counter = 0;
1122 TapiResult_t returnStatus = TAPI_API_SUCCESS;
1124 if (data == NULL ) {
1129 countInfo = (TelSmsStoredMsgCountInfo_t*) data;
1132 msgb("tel_get_sms_count() response receive");
1133 msg(" - result = 0x%x", result);
1135 if (countInfo->UsedCount != 0x00) //if used count is not zero
1137 msg("Index LIST..........");
1138 for (loop_counter = 0; loop_counter < countInfo->UsedCount;
1140 msg("[%02x]", countInfo->IndexList[loop_counter]);
1141 returnStatus = tel_read_sms_in_sim (handle,
1142 countInfo->IndexList[loop_counter], on_resp_read_msg,
1144 msg("After read msg: returnstatus %d", returnStatus);
1146 msg("In MsgCountNotification total cnt is %d, usedcnt is %dapi_err %d",
1147 countInfo->TotalCount, countInfo->UsedCount, returnStatus);
1150 msg("In MsgCountNotification total cnt is %d, usedcnt is %d",
1151 countInfo->TotalCount, countInfo->UsedCount);
1155 static int SendMessage (MManager *mm, struct menu_data *menu)
1159 char buf[SMS_ADDRESS_LEN_MAX];
1161 char diallingNum[SMS_ADDRESS_LEN_MAX];
1162 int diallingNum_len = 0;
1164 memset (buf, 0, sizeof (buf));
1165 memset (diallingNum, 0, sizeof (diallingNum));
1166 diallingNum_len = 0;
1168 msg("Enter destination Number: ");
1170 ret = read (0, buf, sizeof (buf));
1179 buf[SMS_ADDRESS_LEN_MAX - 1] = '\0';
1180 diallingNum_len = strlen (diallingNum);
1181 memcpy (&diallingNum[diallingNum_len], buf, strlen (buf));
1183 diallingNum_len = strlen (diallingNum); //recalculate
1184 msg("dialling num %s and dialling num len is %d", diallingNum,
1186 diallingNum[diallingNum_len] = 0;
1187 diallingNum_len = diallingNum_len - 1;
1189 msg("Enter Message: ");
1190 memset (message, 0, sizeof (message));
1192 ret = read (0, message, sizeof (message) - 1);
1195 msg(" NULL msg can NOT be sent ");
1198 message[sizeof (message) - 1] = '\0';
1200 msg_len = strlen (message);
1201 message[--msg_len] = 0;
1203 msg("==========================");
1204 msg("To :%s", diallingNum);
1205 msg("Message: %sMsg Length:%d", message, msg_len);
1206 msg("Dialling number Length : %d", diallingNum_len);
1207 msg("==========================\n");
1209 EncodeSmsSubmitTpdu (mm, diallingNum, diallingNum_len, message, msg_len);
1214 static int SendMessageCDMA ()
1218 char buf[512] = { 0, };
1219 char message[512] = { 0, };
1220 char diallingNum[SMS_ADDRESS_LEN_MAX + 1] = { 0, };
1221 int diallingNum_len = 0;
1224 printf ("Enter destination Number:\n>> ");
1227 ret = read (0, buf, sizeof (buf));
1236 buf[SMS_ADDRESS_LEN_MAX - 1] = '\0';
1237 memcpy (diallingNum, buf, sizeof (diallingNum));
1238 diallingNum_len = strlen (diallingNum);
1240 printf ("dialling num [%s], dialling num len [%d]\n", diallingNum,
1242 printf ("Enter Message\n>> ");
1245 ret = read (0, message, sizeof (message) - 1);
1247 printf (" NULL msg can NOT be sent \n");
1250 message[sizeof (message) - 1] = '\0';
1252 msg_len = strlen (message);
1254 printf ("===========================\n");
1255 printf ("To: [%s] (len: %d)\n", diallingNum, diallingNum_len);
1256 printf ("Message: [%s]\nMsg Length: [%d]\n", message, msg_len);
1257 printf ("===========================\n\n");
1259 EncodeCdmaSmsSubmitTpdu (diallingNum, diallingNum_len, message, msg_len);
1260 //EncodeSmsSubmitTpdu(diallingNum, diallingNum_len,message, msg_len) ;
1265 static int ReadMessage (MManager *mm, struct menu_data *menu)
1267 TapiHandle *handle = menu_manager_ref_user_data (mm);
1271 int returnStatus = 0;
1273 memset (buf, 0, sizeof (buf));
1275 msg("*************************************");
1276 msg("1. SIM Message");
1278 msg("Select Number:");
1280 ret = read (0, buf, sizeof (buf));
1290 selectedNo = atoi (buf);
1291 msg("Selected Num in read message(value is 1) is %d ", selectedNo);
1292 switch (selectedNo) {
1295 msg("***Reading the message in SIM***")
1297 returnStatus = tel_get_sms_count (handle, on_resp_get_sms_count,
1299 msg("tel_get_sms_count(): 0x%x", returnStatus)
1304 msg("Not supported Menu(%d) !!!", selectedNo)
1312 static int DeleteMessage (MManager *mm, struct menu_data *menu)
1314 TapiHandle *handle = menu_manager_ref_user_data (mm);
1320 TapiResult_t returnStatus;
1322 memset (buf, 0, sizeof (buf));
1324 msg("Enter delete index >>");
1326 ret = read (0, buf, sizeof (buf));
1335 local_index = atoi (buf);
1336 msg("index value :%d", local_index);
1338 msg("***Deleting the message(Api:DeleteMsg,GetMsgCount)***");
1340 returnStatus = tel_delete_sms_in_sim (handle, local_index, on_resp_delete_msg,
1342 msg("returnstatus tel_delete_sms_in_sim() is for delete%d ", returnStatus);
1343 returnStatus = tel_get_sms_count (handle, on_resp_get_sms_count, NULL );
1344 msg("returnStatus for tel_get_sms_count() %d", returnStatus);
1350 static int Getting (MManager *mm, struct menu_data *menu)
1352 TapiHandle *handle = menu_manager_ref_user_data (mm);
1354 int returnStatus = 0;
1355 gboolean bReadyStatus = FALSE;
1357 selectedNo = atoi (menu->key);
1359 switch (selectedNo) {
1361 msg("***Getting the SCA(Api: GetSCA)****")
1363 returnStatus = tel_get_sms_sca (handle, 0, on_resp_get_sms_sca,
1365 msg("returnstatus for tel_get_sms_sca(): 0x %x", returnStatus)
1371 msg("***Getting the CB Configuration(Api: GetCBConfig)***")
1373 returnStatus = tel_get_sms_cb_config (handle, on_resp_get_cb_config,
1375 msg("ReturnStatus[%d] ", returnStatus)
1381 msg("****Getting the parameter(Api:GetParameter)****")
1383 returnStatus = tel_get_sms_parameters (handle, 0,
1384 on_resp_get_sms_parameters, NULL );
1385 msg("ReturnStatus[%d]]", returnStatus)
1391 msg("***Getting the parameterCount(Api:GetParameterCount)***")
1393 returnStatus = tel_get_sms_parameter_count (handle,
1394 on_resp_get_paramcnt, NULL );
1395 msg("ReturnStatus[%d]", returnStatus)
1400 msg("***Getting the SmsCount(Api:GetSmsCount)***")
1402 returnStatus = tel_get_sms_count (handle, on_resp_get_sms_count,
1404 msg("ReturnStatus[%d]", returnStatus)
1411 "***Getting the Sms Ready status(Api:Check_sms_device_status)***")
1413 returnStatus = tel_check_sms_device_status (handle, &bReadyStatus);
1414 msg("ReturnStatus[%d]", returnStatus)
1416 msg("Ready status = %s", bReadyStatus ? "TRUE" : "FALSE")
1429 static int _get_int()
1434 memset (buf, 0, 255);
1435 ret = read (0, buf, 254);
1442 static int Setting (MManager *mm, struct menu_data *menu)
1444 TapiHandle *handle = menu_manager_ref_user_data (mm);
1450 char MemoryStatus[255] = { 0, }; //2006/8/8
1452 TelSmsCbConfig_t *pCBConfig;
1454 TelSmsParams_t smsParameters = { 0, };
1455 TapiResult_t returnStatus;
1457 settingMenu = atoi (menu->key);
1459 switch (settingMenu) {
1460 case 1: //Set Service Center Number
1462 TelSmsAddressInfo_t sca = {0, };
1463 unsigned char sca_num[TAPI_SIM_SMSP_ADDRESS_LEN + 1];
1464 unsigned int sca_length = 0;
1465 unsigned int additional_len = 0;
1466 unsigned local_index, j;
1468 msg("*** Setting SCA (API: tel_set_sms_sca()) ****");
1471 msg("Enter the SCA NUMBER:");
1472 ret = scanf("%s", sca_num);
1473 if (ret > TAPI_SIM_SMSP_ADDRESS_LEN) {
1474 msg("Entered SCA is INVALID - SCA length cannot be greater than %d", TAPI_SIM_SMSP_ADDRESS_LEN);
1477 sca.Npi = TAPI_SIM_NPI_ISDN_TEL;
1478 sca.Ton = TAPI_SIM_TON_UNKNOWN;
1479 if (sca_num[0] == '+') {
1480 sca.Ton = TAPI_SIM_TON_INTERNATIONAL;
1483 sca_length = strlen((char *)sca_num) - additional_len;
1484 msg("Sca Length:[%d]", sca_length);
1486 if (sca_length % 2 == 0) {
1487 for (local_index = additional_len, j = 0; local_index < sca_length; local_index += 2, j++)
1488 sca.szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
1489 sca.szDiallingNum[(sca_length/2)] = '\0';
1490 sca.DialNumLen = (sca_length/2);
1492 for (local_index = additional_len, j = 0; local_index < sca_length+1; local_index += 2, j++) {
1493 if (local_index == (sca_length - 1))
1494 sca.szDiallingNum[j] = ((0xF0) | (sca_num[local_index] & 0x0F));
1496 sca.szDiallingNum[j] = ((sca_num[local_index+1] & 0X0F) << 4) | (sca_num[local_index] & 0x0F);
1498 sca.szDiallingNum[(sca_length/2)] = sca.szDiallingNum[(sca_length/2)] | 0xF0;
1499 sca.DialNumLen = (sca_length/2)+1;
1501 msg("%d", sca.DialNumLen);
1502 returnStatus = tel_set_sms_sca (handle, &sca, 0, on_resp_set_sms_sca, NULL);
1503 msg("Return status: [%d]", returnStatus);
1507 case 3: //Set Deliver Report
1509 msg("****Setting Deliver Report(Api:SetDeliverReport)****");
1510 //EncodeSmsDeliverReportTpdu();
1514 case 4: //Set CB Enable/Disable
1516 msg("****Setting the CB configuration(Api:SetCbConfig)****");
1518 pCBConfig = calloc (1, sizeof(TelSmsCbConfig_t));
1522 msg("Enter CB ON/OFF (1: Enable, 0:Disable): ");
1523 pCBConfig->CBEnabled = _get_int();
1525 msg("Enter Max ID Count: ");
1526 pCBConfig->MsgIdMaxCount = _get_int();
1528 msg("Enter MsgIdRangeCount ( < 10 ): ");
1529 pCBConfig->MsgIdRangeCount = _get_int();
1531 if (pCBConfig->MsgIdRangeCount <= 0
1532 || pCBConfig->MsgIdRangeCount >= TAPI_NETTEXT_SMS_CBMI_LIST_SIZE_MAX) {
1533 msg("Bad Range value");
1538 for (i = 0; i < pCBConfig->MsgIdRangeCount; i++) {
1539 msg("Enter %d FromMsgId : ", i + 1);
1540 pCBConfig->MsgIDs[i].Net3gpp.FromMsgId = _get_int();
1542 msg("Enter %d ToMsgId : ", i + 1);
1543 pCBConfig->MsgIDs[i].Net3gpp.ToMsgId = _get_int();
1545 msg("Enter %d Selected : ", i + 1);
1546 pCBConfig->MsgIDs[i].Net3gpp.Selected = _get_int();
1549 pCBConfig->Net3gppType = 0x01;
1552 "from sms test setting the cb configuration:CBEnabled:%d,Net3gppType:%d,msgIdRangeCount:%d,From: %d\t To: %d\t Selected: %d",
1553 pCBConfig->CBEnabled, pCBConfig->Net3gppType,
1554 pCBConfig->MsgIdRangeCount,
1555 pCBConfig->MsgIDs[0].Net3gpp.FromMsgId,
1556 pCBConfig->MsgIDs[0].Net3gpp.ToMsgId,
1557 pCBConfig->MsgIDs[0].Net3gpp.Selected);
1559 returnStatus = tel_set_sms_cb_config (handle, pCBConfig,
1560 on_resp_set_sms_cb_config, NULL );
1561 msg("returnStatus after cbconfig set is is [%d]", returnStatus);
1568 unsigned int sca_length;
1569 unsigned char sca_num[TAPI_SIM_SMSP_ADDRESS_LEN + 1];
1570 const char* name = "AlphaID";
1572 smsParameters.RecordIndex = 0x00;
1575 smsParameters.AlphaIdLen = strlen(name);
1576 memcpy(&smsParameters.szAlphaId, name, strlen(name));
1578 /* Param Indicator*/
1579 smsParameters.ParamIndicator = 0xe1;
1581 /* Destination Number */
1582 memset(&smsParameters.TpDestAddr, 0x0, sizeof(TelSmsAddressInfo_t));
1584 smsParameters.TpProtocolId = 3;/* PID */
1585 smsParameters.TpDataCodingScheme = 2;/* DCS */
1586 smsParameters.TpValidityPeriod = 1;/* VP */
1589 msg("Enter the SCA NUMBER:");
1590 ret = scanf("%s", sca_num);
1591 if (ret > TAPI_SIM_SMSP_ADDRESS_LEN)
1592 msg("Entered SCA is INVALID - SCA length cannot be greater than %d", TAPI_SIM_SMSP_ADDRESS_LEN);
1593 } while(ret > TAPI_SIM_SMSP_ADDRESS_LEN);
1595 sca_length = SmsUtilEncodeSca(&(smsParameters.TpSvcCntrAddr), sca_num);
1596 msg("Encoded SCA Address Length[%d]", sca_length);
1598 returnStatus = tel_set_sms_parameters (handle, &smsParameters, on_resp_set_sms_params, NULL );
1599 msg("returnstatus after sparam set is %d", returnStatus);
1603 case 6: //Set Memory Full Notification
1606 "Enter Memory Status to be set(1:Memory Available, 2:Memory Full)");
1607 memset (MemoryStatus, 0, sizeof (MemoryStatus));
1608 ret = read (0, MemoryStatus, sizeof (MemoryStatus));
1610 msg(" NULL msg can NOT be sent ");
1613 msg("Memory Status type is %d ", atoi (MemoryStatus));
1614 returnStatus = tel_set_sms_memory_status (handle,
1615 atoi (MemoryStatus), on_resp_set_mem_status, NULL ); //Set to full 0x02-Full, 0x01-available
1616 msg("api err after memstatus set is is %d", returnStatus);
1620 case 7: //Set Stored MsgStaus
1622 msg("Not suppored in this Test App !!!");
1626 // JYGU returnStatus =tel_set_sms_device_status();
1627 msg("Not suppored in this Test App !!!");
1631 msg("Not suppored in this Test App !!!");
1640 static struct menu_data menu_sms_getting[] = { { "1",
1641 "Get Service Center Number", NULL, Getting, NULL }, { "2",
1642 "Get CB Setting Information", NULL, Getting, NULL }, { "3",
1643 "Get SMS Parameters", NULL, Getting, NULL }, { "4",
1644 "Get SMS PreferredBearer Information (Not supported)", NULL, Getting,
1645 NULL }, { "5", "Get SMS Parameter Count", NULL, Getting, NULL }, { "6",
1646 "Get Message Count", NULL, Getting, NULL }, { "7",
1647 "Get SMS ready status", NULL, Getting, NULL }, { NULL, NULL , }, };
1649 static struct menu_data menu_sms_setting[] =
1650 { { "1", "Set Service Center Number", NULL, Setting, NULL }, { "2",
1651 "Set PreferredBearer Type (Not supported)", NULL, Setting, NULL }, { "3",
1652 "Set Deliver Report", NULL, Setting, NULL }, { "4",
1653 "Set CB Enable/Disable", NULL, Setting, NULL }, { "5",
1654 "Set SMS Parameters", NULL, Setting, NULL }, { "6",
1655 "Set Memory Status", NULL, Setting, NULL }, { "7",
1656 "Set Stored MsgStaus", NULL, Setting, NULL }, { "8",
1657 "Set Device Ready", NULL, Setting, NULL }, { "9",
1658 "Check Device Status", NULL, Setting, NULL }, { NULL, NULL , }, };
1660 static struct menu_data menu_sms_wcdma[] = { { "1", "Send Message", NULL,
1661 SendMessage, NULL }, { "2", "Read Message", NULL, ReadMessage, NULL }, {
1662 "3", "Delete Message", NULL, DeleteMessage, NULL }, { "4",
1663 "Delete All Message", NULL, NULL, NULL }, //DeleteAllMessage
1664 { "5", "Setting", menu_sms_setting, NULL, NULL }, { "6",
1665 "Getting SMS Information", menu_sms_getting, NULL, NULL }, {
1668 static struct menu_data menu_sms_cdma[] = { { "1", "Send Message", NULL,
1669 SendMessageCDMA, NULL }, { NULL, NULL , }, };
1671 struct menu_data menu_sms[] = { { "1", "WCDMA", menu_sms_wcdma, NULL, NULL }, {
1672 "2", "CDMA", menu_sms_cdma, NULL, NULL }, { NULL, NULL , }, };
1674 void register_sms_event (TapiHandle *handle)
1679 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_INCOM_MSG,
1680 on_noti_sms_incom_msg, NULL );
1681 if (ret != TAPI_API_SUCCESS) {
1682 msg("event register failed(%d)", ret);
1685 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_CB_INCOM_MSG,
1686 on_noti_sms_cb_incom_msg, NULL );
1687 if (ret != TAPI_API_SUCCESS) {
1688 msg("event register failed(%d)", ret);
1691 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_ETWS_INCOM_MSG,
1692 on_noti_sms_etws_incom_msg, NULL );
1693 if (ret != TAPI_API_SUCCESS) {
1694 msg("event register failed(%d)", ret);
1697 // ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_INCOM_EX_MSG, on_noti_sms_incom_ex_msg, NULL);
1698 // ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_CB_INCOM_EX_MSG, on_noti_sms_cb_incom_ex_msg, NULL);
1700 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_MEMORY_STATUS,
1701 on_noti_sms_memory_status, NULL );
1702 if (ret != TAPI_API_SUCCESS) {
1703 msg("event register failed(%d)", ret);
1706 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_DEVICE_READY,
1707 on_noti_sms_ready_status, NULL );
1708 if (ret != TAPI_API_SUCCESS) {
1709 msg("event register failed(%d)", ret);