2 * Telephony test application
4 * Copyright (c) 2012 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 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);
64 static BOOL EncodeCdmaSmsParamTeleservice(int teleservice_id ,ParamTeleserv_t *ParamTeleserv)
68 if(ParamTeleserv == NULL) {
69 printf("[EncodeCdmaSmsParamTeleservice] NULL pointer \n");
73 switch(teleservice_id) {
74 case TELESERVICEID_CPT95:
75 case TELESERVICEID_CMT95:
76 case TELESERVICEID_VMN95:
77 case TELESERVICEID_WAP:
85 ParamTeleserv->param_id = PARAMID_TELESERVICE_ID;
86 ParamTeleserv->param_len = 2;
87 ParamTeleserv->teleserv_id = teleservice_id;
93 static BOOL EncodeCdmaSmsParamDestAddress(int NumberPlan, char* diallingNum ,ParamAddress_t *ParamAddr)
98 if(ParamAddr == NULL || diallingNum == NULL) {
99 printf("[EncodeCdmaSmsParamAddress] NULL pointer \n");
103 length = strlen(diallingNum); //remove CR
105 ParamAddr->param_id = PARAMID_ADDRESS;
106 ParamAddr->len = length;
107 ParamAddr->digit = DIGITMODE_4BITDTMF;
108 ParamAddr->num = NUMMODE_NONE_DATANETWORK;
109 ParamAddr->numtype = NUMBER_TYPE_UNKNOWN;
110 ParamAddr->numplan = NumberPlan;
112 strncpy((char *)ParamAddr->CHARi, diallingNum, length);
115 ParamAddr->param_len = length;
122 static BOOL EncodeCdmaSmsParamCallbackAddress(int NumberPlan, char* diallingNum ,ParamCallback_t *ParamCallback)
127 if(ParamCallback == NULL || diallingNum == NULL) {
128 printf("[EncodeCdmaSmsParamAddress] NULL pointer \n");
132 length = strlen(diallingNum); //remove CR
134 ParamCallback->param_id = PARAMID_CALLBACK;
135 ParamCallback->digit = DIGITMODE_4BITDTMF;
136 ParamCallback->numtype = NUMBER_TYPE_UNKNOWN;
137 ParamCallback->numplan = NumberPlan;
138 ParamCallback->len = length;
139 strncpy((char *)ParamCallback->CHARi, diallingNum, length);
142 ParamCallback->param_len = length;
149 static BOOL EncodeCdmaSmsParamMsgId(int type, ParamMsgId_t *ParamMsg)
153 if(ParamMsg == NULL) {
154 printf("[EncodeCdmaSmsParamMsgId] NULL pointer \n");
158 ParamMsg->param_id = PARAMID_MESSAGE_ID;
159 ParamMsg->param_len =3;
160 ParamMsg->type = type;
161 ParamMsg->msg_id = SmsMsgId++;
168 static BOOL EncodeCdmaSmsParamUserData(char* SendTxt, ParamUserData_t *ParamUser)
173 if(ParamUser == NULL || SendTxt == NULL) {
174 printf("[EncodeCdmaSmsParamUserData] NULL pointer \n");
178 length = strlen(SendTxt);
180 ParamUser->param_id = PARAMID_USER_DATA;
181 ParamUser->encoding = MSGENCODING_7BIT_ASCII;
182 strncpy((char *)ParamUser->CHARi, SendTxt, length);
184 ParamUser->len = length;
186 ParamUser->param_len = length;
194 static BOOL EncodeCdmaSmsSubmitTpdu (char* diallingNum, int dialNumLen,
195 char* msgTxt, int msg_len)
198 ParamTeleserv_t ParamTeleserv = {0,};
199 ParamAddress_t ParamAddr = {0,};
200 ParamMsgId_t ParamMsg = {0,};
201 ParamUserData_t ParamUser = {0,};
206 msg("EncodeCdmaSmsSubmitTpdu Func Enter");
208 TelSmsMsgInfo_t *pDataPackage = malloc(sizeof(TelSmsMsgInfo_t));
209 memset(pDataPackage, 0, sizeof(TelSmsMsgInfo_t));
211 pDataPackage->MsgType = SMS_MESSAGETYPE_SUBMIT;
213 //1 TeleService Identifier
214 EncodeCdmaSmsParamTeleservice(TELESERVICEID_CMT95, &ParamTeleserv);
215 pDataPackage->ParamMask |= SMS_PARAM_TELESERVICE_MASK;
216 memcpy(&pDataPackage->MsgData.OutSubmit.TeleService, &ParamTeleserv.teleserv_id, sizeof(unsigned short));
217 msg("teleservice at TEST APP: 0x%x", pDataPackage->MsgData.OutSubmit.TeleService);
219 //1 Destination Address
220 diallingNum[dialNumLen] = '\0';
221 EncodeCdmaSmsParamDestAddress(NUMBER_PLAN_UNKNOWN, diallingNum, &ParamAddr);
222 pDataPackage->ParamMask |= SMS_PARAM_ADDRESS_MASK;
223 pDataPackage->MsgData.OutSubmit.DstAddr.Digit = ParamAddr.digit;
224 pDataPackage->MsgData.OutSubmit.DstAddr.NumberMode = ParamAddr.num;
225 pDataPackage->MsgData.OutSubmit.DstAddr.NumberType = ParamAddr.numtype;
226 pDataPackage->MsgData.OutSubmit.DstAddr.NumberPlan = ParamAddr.numplan;
227 pDataPackage->MsgData.OutSubmit.DstAddr.szAddrLength = ParamAddr.len;
228 memcpy(pDataPackage->MsgData.OutSubmit.DstAddr.szAddress, ParamAddr.CHARi, ParamAddr.len);
230 //1 Message Identifier
231 EncodeCdmaSmsParamMsgId(MESSAGETYPE_SUBMIT, &ParamMsg);
232 pDataPackage->ParamMask |= SMS_PARAM_MESSAGE_ID_MASK;
233 pDataPackage->MsgData.OutSubmit.MsgId = ParamMsg.type;
234 pDataPackage->MsgType = ParamMsg.type;
237 pDataPackage->ParamMask |= SMS_PARAM_BEARER_REPLY_MASK;
238 pDataPackage->MsgData.OutSubmit.ReplySeqNumber = 1;
242 EncodeCdmaSmsParamCallbackAddress(NUMBER_PLAN_UNKNOWN, CallbackNum, &Paramcallback);
243 pDataPackage->ParamMask |= SMS_PARAM_CALLBACK_MASK;
244 pDataPackage->MsgData.OutSubmit.CallBackNumber.Digit = Paramcallback.digit;
245 pDataPackage->MsgData.OutSubmit.CallBackNumber.NumberType = Paramcallback.numtype;
246 pDataPackage->MsgData.OutSubmit.CallBackNumber.NumberPlan = Paramcallback.numplan;
247 pDataPackage->MsgData.OutSubmit.CallBackNumber.szAddrLength = Paramcallback.len;
248 memcpy(pDataPackage->MsgData.OutSubmit.CallBackNumber.szAddress, Paramcallback.CHARi, Paramcallback.len);
251 msgTxt[msg_len - 1] = '\0';
252 EncodeCdmaSmsParamUserData(msgTxt, &ParamUser);
253 pDataPackage->ParamMask |= SMS_PARAM_USER_DATA_MASK;
254 pDataPackage->MsgData.OutSubmit.MsgEncoding = ParamUser.encoding;
255 pDataPackage->MsgData.OutSubmit.MsgLength = ParamUser.len;
256 memcpy(pDataPackage->MsgData.OutSubmit.szData, ParamUser.CHARi, ParamUser.len);
259 msg("=============== Test App Message =================");
260 msg(" - MsgType: %d", pDataPackage->MsgType);
261 msg(" - ParamMask: 0x%08x", pDataPackage->ParamMask);
263 for (i = 0; i < sizeof(TelSmsMsgInfo_t); i++) {
264 printf("%02x ", *(((unsigned char *) pDataPackage) + i));
265 if ((i + 1) % 8 == 0)
268 if ((i + 1) % 16 == 0)
269 printf("\n%04x: ", i+1);
274 msg("==============================================");
276 returnStatus = tel_send_sms_msg(pDataPackage, 0x26, &requestId); //more to send is false since it is not concatenated.for concatenated send 1
278 msg("tel_send_sms_msg() requestId: %d", requestId);
286 static BOOL DecodeCellBroadcastMsg (int length, char * pPDU)
289 int sn = 0; //serial number
290 int msgID; //message identifier
291 Sms_coding_scheme dcs;
293 unsigned char page[2];
295 char contents[SMS_CB_SIZE_MAX];
298 unsigned char msgCode;
299 unsigned char updateNumber;
306 msg("cb msg type is %x", pPDU[0]);
307 msg("cb msg len is %x", pPDU[1]);
309 msg("$$$$$$$$$$$$$$$length of cb msg is %d", length);
310 sn = (pPDU[2] << 8) | pPDU[1];
312 gs = (pPDU[2] & 0xC0) >> 6; //bit 7, bit 6
314 msgCode = ( ( (pPDU[2] & 0x3F) << 4) | pPDU[3]) & 0xF0;
316 updateNumber = pPDU[3] & 0x0F; //bit3, bit2, bit1, bit0
318 msgID = pPDU[4] << 4 | pPDU[3];
320 SmsUtilDecodeDCS (&dcs, pPDU[6]);
322 page[0] = pPDU[7] & 0x0F; //total page
323 page[1] = (pPDU[7] & 0xF0) >> 4; //current page
325 msgLength = length - 2;
327 contents_length = msgLength - 6;
329 if (dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
330 unsigned char inData[SMS_CB_SIZE_MAX + 1];
332 memset (inData, 0x00, SMS_CB_SIZE_MAX + 1);
334 memcpy ((void*) inData, (void*) &pPDU[8], contents_length);
335 SmsUtilUnpackGSMCode (contents, &pPDU[8], msgLength);
338 memcpy (contents, &pPDU[8], msgLength);
339 contents[msgLength] = 0;
342 printf ("*************************************\n");
343 printf ("serical number : 0x%04x \n", sn);
344 printf ("Geographical Scope: 0x%x\n", gs);
345 printf ("message code : 0x%x\n", msgCode);
346 printf ("update Number : 0x%x\n", updateNumber);
347 printf ("message identifier : 0x%x\n", msgID);
348 printf ("DCS-Commpressed?: %d (1: true)\n", dcs.bCompressed);
349 printf ("DCS-coding_group_type: %x\n", dcs.coding_group_type);
350 printf ("contents bytes size : %d\n", contents_length);
351 printf ("page : (%d /%d) (page /total ) \n", page[1], page[0]);
352 printf ("contents: %s\n", contents);
353 printf ("*************************************\n");
358 static BOOL EncodeSmsSubmitTpdu (MManager *mm, char* diallingNum,
359 int dialNumLen, char* msg, int msg_len)
361 TapiHandle *handle = menu_manager_ref_user_data (mm);
363 TPDU_SMS_SUBMIT tpdu_submit;
365 unsigned char packet[TAPI_NETTEXT_MSG_SIZE_MAX];
367 unsigned char SCA[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 1];
370 // unsigned char tp_mr = 0x03;
372 unsigned char tp_pid = 0; //reaplace type (65)
373 unsigned char tp_dcs; //=17; //class_1(17),class_2(18)
376 int index = 0, ScIndex = 0;
379 unsigned char sca_len = 0;
380 TapiResult_t returnStatus;
382 TelSmsDatapackageInfo_t *pDataPackage = NULL;
384 memset (packet, 0, TAPI_NETTEXT_MSG_SIZE_MAX);
386 /************SCA ADDRESS GET START**************/
388 returnStatus = TelTapiSmsGetSCA(&sc_addr,0);
389 printf("Service center addr returned from TAPI SCA address %s returnStatus %d\n",sc_addr.szDiallingNum,returnStatus);
390 SmsUtilDecodeAddrField(decodeScaAddr, &sc_addr.szDiallingNum[0],&sc_addr.Ton, &sc_addr.Npi);
391 sca_len = strlen( decodeScaAddr );
393 memcpy( SCA, decodeScaAddr, sca_len);
397 memset (SCA, 0, sizeof (SCA));
399 ret = read (0, SCA, sizeof (SCA) - 1);
401 msg(" NULL msg can NOT be sent ");
406 pDataPackage = malloc (sizeof(TelSmsDatapackageInfo_t));
407 memset (pDataPackage, 0, sizeof(TelSmsDatapackageInfo_t));
409 sca_len = strlen ((char *) SCA) - 1;
411 msg("Decode SCA Address =========");
412 msg("SCA Number :%s, SCA Length :%d ", SCA, sca_len);
413 msg("========================");
415 //SCA ADDRESS GET END
421 // index +=SmsUtilEncodeAddrField(packet,SCA, strlen(SCA) ,0x01,0x01);
422 ScIndex = SmsUtilEncodeAddrField ((unsigned char*) pDataPackage->Sca,
423 (char *) SCA, sca_len, 0x01, 0x01);
425 msg("ScIndex is %d", ScIndex);
427 // TP-MTI, TP-RD, TP-VPF, TP-SRR, TP_UDHI, TP-RP
428 tpdu_submit.msg_type = SMS_TPDU_SUBMIT;
429 tpdu_submit.rd = FALSE; //false :accept duplicate msg , true: reject duplicate msg
430 tpdu_submit.vpf = SMS_VP_RELATIVE;
431 tpdu_submit.srr = FALSE; //false :A status report is not requested , true: A status report is requested
432 tpdu_submit.udhi = FALSE; //false: contains only the short message , true :a Header in addition to the short message
433 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
435 packet[index] = tpdu_submit.msg_type; // SUBMIT: bits 0, 1
436 packet[index] |= tpdu_submit.rd ? 0x04 : 0; // bit 2
437 packet[index] |= tpdu_submit.vpf << 3; // bits 3, 4
438 packet[index] |= tpdu_submit.srr ? 0x20 : 0; // bit 5
439 packet[index] |= tpdu_submit.udhi ? 0x40 : 0; // bit 6
440 packet[index] |= tpdu_submit.rp ? 0x80 : 0; // bit 7
443 msg("index of message ref is %d, msgref is %d", index, tp_mr);
445 packet[index++] = tp_mr;
448 index += SmsUtilEncodeAddrField (packet + index, diallingNum, dialNumLen,
451 //msg("DESTINATTION ADDR Encoded =========");
454 packet[index++] = tp_pid;
456 // TP_DCS (Data Coding Scheme)
458 tpdu_submit.dcs.bCompressed = FALSE;
459 tpdu_submit.dcs.bmsg_class_set = TRUE;
460 tpdu_submit.dcs.coding_group_type = SMS_CODGRP_SM_GENERAL_DCS;
461 tpdu_submit.dcs.alphabet_type = SMS_ALPHABET_DEFAULT;
462 tpdu_submit.dcs.class_type = SMS_CLASS_2;
464 SmsUtilEncodeDCS (&tp_dcs, &tpdu_submit.dcs);
466 packet[index++] = tp_dcs;
468 //msg("DCS Encoded:tp_dcs =%d =========",tp_dcs);
472 tpdu_submit.vp.vp_rel_type = SMS_VP_REL_6H;
473 tpdu_submit.vp.vp_type = SMS_VP_RELATIVE;
474 tpdu_submit.vp.vpValue = 0xff;
476 SmsUtilEncodeValidity (&tp_vp, &tpdu_submit.vp);
479 packet[index++] = tp_vp;
480 //msg("Validity Encoded :tp_vp =%d =========",tp_vp);
483 packet[index++] = msg_len;
487 if (tpdu_submit.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
489 pos = SmsUtilPackGSMCode (packet + index, msg, msg_len);
493 msg("Send packet to phonseSever[%d] -----", index);
495 for (i = 0; i < index; i++) {
496 msg("[%02x]", packet[i]);
502 memcpy (pDataPackage->szData, packet, index);
503 pDataPackage->MsgLength = index;
505 msg("***Sending the Message (Api:SendMsg)***");
507 msg("Length : %d", pDataPackage->MsgLength);
509 returnStatus = tel_send_sms (handle, pDataPackage, 0, on_resp_send_msg,
512 msg("SendMsg : returnStatus=%d requestId=%d", returnStatus, requestId);
519 TPDU_SMS_SUBMIT tpdu_submit;
520 unsigned char entered_SCA[SMS_SCADDRESS_LEN_MAX]; //send SMS �Ҷ� ����ϴ� ���� SCA��
523 // unsigned char tp_mr = 0x03;
525 unsigned char tp_pid = 0;//reaplace type (65)
526 unsigned char tp_dcs;//=17; //class_1(17),class_2(18)
529 int index = 0, ScIndex = 0;
531 unsigned char sca_len =0;
532 gboolean returnStatus;
534 int msgLength = 0; /**< Size of array szData (which is actual TPDU message) */
535 unsigned char szData[SMS_MSG_SIZE_MAX]; /**<SMS TPDU message */
537 TelSmsDatapackageInfo_t *pDataPackage= malloc(sizeof(TelSmsDatapackageInfo_t));
539 memset(pDataPackage, 0, sizeof(TelSmsDatapackageInfo_t));
540 memset(szData, 0, SMS_MSG_SIZE_MAX);
542 /************SCA ADDRESS GET START**************/
544 memset(entered_SCA,0,sizeof(entered_SCA));
546 ret = read(0, entered_SCA, sizeof(entered_SCA));
549 msg(" NULL msg can NOT be sent ");
553 sca_len=strlen((char *)entered_SCA)-1;
555 msg("Decode SCA Address =========");
556 msg("SCA Number :%s, SCA Length :%d ",entered_SCA , sca_len);
557 msg("========================");
559 //SCA ADDRESS GET END
562 ScIndex =SmsUtilEncodeAddrField((unsigned char*)pDataPackage->Sca ,(char *)entered_SCA, sca_len ,0x01,0x01);
564 msg("ScIndex is %d", ScIndex);
566 // TP-MTI, TP-RD, TP-VPF, TP-SRR, TP_UDHI, TP-RP
567 tpdu_submit.msg_type = SMS_TPDU_SUBMIT;
568 tpdu_submit.rd =FALSE;//false :accept duplicate msg , true: reject duplicate msg
569 tpdu_submit.vpf = SMS_VP_RELATIVE;
570 tpdu_submit.srr = FALSE;//false :A status report is not requested , true: A status report is requested
571 tpdu_submit.udhi = FALSE;//false: contains only the short message , true :a Header in addition to the short message
572 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
574 szData[index] = tpdu_submit.msg_type;// SUBMIT: bits 0, 1
575 szData[index] |= tpdu_submit.rd? 0x04 : 0;// bit 2
576 szData[index] |= tpdu_submit.vpf << 3;// bits 3, 4
577 szData[index] |= tpdu_submit.srr ? 0x20 : 0;// bit 5
578 szData[index] |= tpdu_submit.udhi? 0x40 : 0;// bit 6
579 szData[index] |= tpdu_submit.rp ? 0x80 : 0;// bit 7
582 msg("index of message ref is %d, msgref is %d",index,tp_mr);
584 szData[index++] = tp_mr;
587 index += SmsUtilEncodeAddrField( szData+index, diallingNum, dialNumLen, 0x02, 0x01);
589 //msg("DESTINATTION ADDR Encoded =========");
592 szData[index++] = tp_pid;
594 // TP_DCS (Data Coding Scheme)
595 tpdu_submit.dcs.bCompressed = FALSE;
596 tpdu_submit.dcs.bmsg_class_set = TRUE;
597 tpdu_submit.dcs.coding_group_type =SMS_CODGRP_SM_GENERAL_DCS;
598 tpdu_submit.dcs.alphabet_type = SMS_ALPHABET_DEFAULT;
599 tpdu_submit.dcs.class_type = SMS_CLASS_2;
601 SmsUtilEncodeDCS(&tp_dcs, &tpdu_submit.dcs);
603 szData[index++] = tp_dcs;
605 //msg("DCS Encoded:tp_dcs =%d =========",tp_dcs);
608 tpdu_submit.vp.vp_rel_type = SMS_VP_REL_6H;
609 tpdu_submit.vp.vp_type = SMS_VP_RELATIVE;
610 tpdu_submit.vp.vpValue =0xff;
612 SmsUtilEncodeValidity(&tp_vp,&tpdu_submit.vp);
615 szData[index++] = tp_vp;
616 //msg("Validity Encoded :tp_vp =%d =========",tp_vp);
619 szData[index++] = msg_len;
622 if (tpdu_submit.dcs.alphabet_type == SMS_ALPHABET_DEFAULT )
625 pos =SmsUtilPackGSMCode( szData + index, msg, msg_len);
629 msg("Send szData to phonseSever[%d] -----", index);
631 for(i=0; i< index; i++ )
633 msg("[%02x]", szData[i]);
639 memcpy( pDataPackage->szData, szData, index);
640 pDataPackage->MsgLength = index;
642 msg("***Sending the Message (Api:SendMsg)***");
643 msg("Length : %d", msgLength);
645 returnStatus = tel_send_sms(handle, pDataPackage, 0, on_resp_send_msg, NULL);
647 msg("SendMsg : returnStatus=0x%x", returnStatus);
654 static int DecodeSmsSubmitTpdu(int pdu_len, char * pPDU)
656 TPDU_SMS_SUBMIT tpdu_submit;
657 unsigned char scaAddr_len =0;
658 int destAddr_len = 0;
659 char diallingNum[SMS_ADDRESS_LEN_MAX];
660 char scaAddr[SMS_SCADDRESS_LEN_MAX]; //service center address
661 char destAddr[SMS_ADDRESS_LEN_MAX];//destination number
662 int sca_ton, sca_npi, dest_ton,dest_npi;
668 memset(diallingNum, 0, sizeof(diallingNum));
670 SmsUtilDecodeAddrField(diallingNum, &pPDU[position],&sca_ton, &sca_npi);
672 position+=2; //include Address-Length, Type of Address
674 scaAddr_len = strlen( (char *)diallingNum );
676 if ( scaAddr_len % 2 )
677 position += scaAddr_len / 2 + 1;
679 position += scaAddr_len / 2;
681 if ( sca_ton == SMS_TON_INTERNATIONAL )
684 memcpy( &scaAddr[1], diallingNum, scaAddr_len );
685 scaAddr[scaAddr_len+1] = '\0';
689 memcpy( scaAddr, diallingNum, scaAddr_len );
690 scaAddr[scaAddr_len] = '\0';
693 //msg(" sca length: %d , sca # : %s", scaAddr_len, scaAddr);
695 /* TP-MTI, TP-RD, TP-VPF, TP-RP, TP_UDHI, TP-SRR */
697 tpdu_submit.msg_type = SMS_TPDU_SUBMIT;// bit 0,1(Message Type Indicator )
698 tpdu_submit.rd = ( pPDU[position] & 0x04 ) ? TRUE : FALSE;// bit 2 (Message Type Indicator)
699 tpdu_submit.vpf =( pPDU[position] & 0x18) >> 3;// bits 3, 4 ( validity period format)
700 tpdu_submit.srr=( pPDU[position] & 0x20 ) ? TRUE : FALSE;// bit 5 (Status Report Request)
701 tpdu_submit.udhi=( pPDU[position] & 0x40 ) ? TRUE : FALSE;// bit 6 (User Data Header Indicator)
702 tpdu_submit.rp = ( pPDU[position] & 0x80 ) ? TRUE : FALSE;// bit 7 (Reply Path)
707 tpdu_submit.mr = pPDU[position];
713 memset(diallingNum, 0, sizeof(diallingNum));
715 SmsUtilDecodeAddrField(diallingNum, &pPDU[position],&dest_ton, &dest_npi);
719 destAddr_len = strlen( (char*) diallingNum );
720 if ( destAddr_len % 2 )
721 position += destAddr_len / 2 + 1;
723 position += destAddr_len / 2;
725 if ( dest_ton == SMS_TON_INTERNATIONAL )
728 memcpy( &destAddr[1], diallingNum, destAddr_len );
729 destAddr[destAddr_len+1] = '\0';
733 memcpy( destAddr, diallingNum, destAddr_len );
734 destAddr[destAddr_len] = '\0';
736 //msg(" dest length: %d , dest # : %s", destAddr_len, destAddr);
738 tpdu_submit.desAddr.DialNumLen= destAddr_len;
739 memcpy(tpdu_submit.desAddr.szDiallingNum, destAddr , destAddr_len);
740 tpdu_submit.desAddr.Npi = dest_npi;
741 tpdu_submit.desAddr.Ton = dest_ton;
745 tpdu_submit.pId = pPDU[position];
749 SmsUtilDecodeDCS( &tpdu_submit.dcs, pPDU[position] );
753 tpdu_submit.vp.vp_type = SMS_VP_RELATIVE; //temp
755 if(tpdu_submit.vp.vp_type == SMS_VP_RELATIVE)
757 tpdu_submit.vp.vpValue = pPDU[position];
758 tpdu_submit.vp.vp_rel_type = SMS_VP_REL_1D;
761 else if (tpdu_submit.vp.vp_type == SMS_VP_ABSOLUTE || tpdu_submit.vp.vp_type == SMS_VP_ENHANCED)
767 tpdu_submit.udl = pPDU[position];
769 if ( tpdu_submit.udl> SMS_SMDATA_SIZE_MAX )
770 tpdu_submit.udl = SMS_SMDATA_SIZE_MAX;
775 tpdu_submit.userData = malloc( sizeof ( unsigned char ) * ( SMS_SMDATA_SIZE_MAX + 1 ) );
777 memset(tpdu_submit.userData, 0, sizeof ( unsigned char ) * ( SMS_SMDATA_SIZE_MAX + 1 ) );
779 if (tpdu_submit.dcs.alphabet_type == SMS_ALPHABET_DEFAULT )
781 char inData[SMS_SMDATA_SIZE_MAX+1];
783 memset( inData, 0x00, SMS_SMDATA_SIZE_MAX + 1 );
785 memcpy( (void*) inData, (void*) &pPDU[position], tpdu_submit.udl );
787 SmsUtilUnpackGSMCode((char *)tpdu_submit.userData, inData, (unsigned char) tpdu_submit.udl);
790 msg("*************************************");
791 msg("Msg Type: TPDU_SUBMIT");
795 msg("RD: Reject Duplicate")
798 else if(!tpdu_submit.rd)
800 msg("RD: Accept Duplicate")
805 msg("SRR: A status report is requested")
808 else if(!tpdu_submit.srr)
810 msg("SRR: A status report is not requested")
815 msg("UDHI: Contains a Header in addition to the short message.")
817 else if(!tpdu_submit.udhi)
819 msg("UDHI: Only Short Message")
824 msg("RP: Set Reply Path")
827 else if(!tpdu_submit.rp)
829 msg("RP: Not set Reply Path")
832 msg("SCA Addr : %s",scaAddr);
833 msg("To : %s" ,destAddr);
834 msg("Message : %s " , tpdu_submit.userData);
835 msg("*************************************");
841 static int DecodeSmsDeliverTpdu (int tpdu_len, char* pTPDU)
843 TPDU_SMS_DELIVER tpdu_deliver;
844 TmDateTime SCTimeStamp;
847 char diallingNum[SMS_ADDRESS_LEN_MAX + 1];
848 char orgAddr[SMS_ADDRESS_LEN_MAX + 1]; //originating number
849 int org_ton, org_npi;
852 /* TP-MTI, TP-MMS, TP-SRI, TP_UDHI, TP-RP */
853 tpdu_deliver.msg_type = SMS_TPDU_DELIVER;
854 tpdu_deliver.mms = (pTPDU[position] & 0x04) ? TRUE : FALSE; // bit 2 (Message Type Indicator)
855 tpdu_deliver.sri = (pTPDU[position] & 0x20) ? TRUE : FALSE; // bit 5 (Status Report Indication)
856 tpdu_deliver.udhi = (pTPDU[position] & 0x40) ? TRUE : FALSE;// bit 6 (User Data Header Indicator)
857 tpdu_deliver.rp = (pTPDU[position] & 0x80) ? TRUE : FALSE;// bit 7 (Reply Path)
863 memset (diallingNum, 0, sizeof (diallingNum));
865 orgAddr_len = SmsUtilDecodeAddrField (diallingNum, &pTPDU[position],
867 if (orgAddr_len > SMS_ADDRESS_LEN_MAX - 1)
868 orgAddr_len = SMS_ADDRESS_LEN_MAX - 1;
873 position += orgAddr_len / 2 + 1;
875 position += orgAddr_len / 2;
877 msg("pos = %d, length = %d", position, orgAddr_len);
879 if (org_ton == SMS_TON_INTERNATIONAL) {
881 memcpy (&orgAddr[1], diallingNum, orgAddr_len - 1);
882 orgAddr[orgAddr_len + 1] = '\0';
885 memcpy (orgAddr, diallingNum, orgAddr_len);
886 orgAddr[orgAddr_len] = '\0';
890 tpdu_deliver.pId = pTPDU[position];
895 SmsUtilDecodeDCS (&tpdu_deliver.dcs, pTPDU[position]);
900 SmsUtilDecodeTimeStamp (&pTPDU[position], &SCTimeStamp);
905 tpdu_deliver.udl = pTPDU[position];
907 if (tpdu_deliver.udl > SMS_SMDATA_SIZE_MAX)
908 tpdu_deliver.udl = SMS_SMDATA_SIZE_MAX;
913 tpdu_deliver.userData = malloc (
914 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
916 memset (tpdu_deliver.userData, 0,
917 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
919 if (tpdu_deliver.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
920 char inData[SMS_SMDATA_SIZE_MAX + 1];
922 memset (inData, 0x00, SMS_SMDATA_SIZE_MAX + 1);
924 memcpy ((void*) inData, (void*) &pTPDU[position], tpdu_deliver.udl);
926 SmsUtilUnpackGSMCode (tpdu_deliver.userData, inData,
927 (unsigned char) tpdu_deliver.udl);
930 msg("*************************************");
931 msg("Msg Type: TPDU_DELIVER");
933 if (tpdu_deliver.rp) {
934 msg("RP: Set Reply Path")
936 else if (!tpdu_deliver.rp) {
937 msg("RP: Not set Reply Path")
940 if (tpdu_deliver.sri) {
941 msg("SRI: A status report shall be returned to the SME")
943 else if (!tpdu_deliver.sri) {
944 msg("SRI: A status report shall be not returned to the SME")
947 if (tpdu_deliver.mms) {
948 msg("MMS: No more messages are waiting for the MS in this SC")
950 else if (!tpdu_deliver.mms) {
951 msg("MMS: More messages are waiting for the MS in this SC")
954 if (tpdu_deliver.udhi) {
955 msg("UDHI: Contains a Header in addition to the short message.")
957 else if (!tpdu_deliver.udhi) {
958 msg("UDHI: Only short message.")
961 msg("DcsClass : %x (4 means Class None) ", tpdu_deliver.dcs.class_type);
963 msg("From : %10s", orgAddr);
964 msg("Time : %d-%d-%d , %d:%d:%d", SCTimeStamp.year, SCTimeStamp.month,
965 SCTimeStamp.day, SCTimeStamp.hour, SCTimeStamp.minute,
967 msg("Message : %s ", tpdu_deliver.userData);
968 msg("*************************************");
974 static BOOL EncodeSmsDeliverReportTpdu()
976 TPDU_SMS_DELIVER_REPORT deliver_report;
977 unsigned char packet[500];
978 TelSmsDatapackageInfo_t * pDataPackage;
979 unsigned char tp_dcs;
980 unsigned char mask=0x69;
984 TelSmsDatapackageInfo_t del_report;
986 memset(&(del_report), 0 , sizeof(TelSmsDatapackageInfo_t));
988 pDataPackage = malloc(sizeof(TelSmsDatapackageInfo_t));
989 memset(pDataPackage, 0, sizeof(TelSmsDatapackageInfo_t));
991 memset(packet, 0, 500);
993 /* TP-MTI , TP-UDHI */
994 deliver_report.msg_type = SMS_TPDU_DELIVER_REPORT;
995 deliver_report.udhi = FALSE;
997 packet[index] = deliver_report.msg_type; //DELIVER REPORT
998 packet[index] |= deliver_report.udhi? 0x40 : 0;//bit 6
1009 deliver_report.paraInd = mask;
1010 packet[index] = deliver_report.paraInd;
1012 if ( ( mask != 0xFF ) && ( mask != 0 ) )
1018 deliver_report.pId = 0x65;
1019 packet[index++] = deliver_report.pId;
1025 deliver_report.dcs.bCompressed = FALSE;
1026 deliver_report.dcs.bmsg_class_set = TRUE;
1027 deliver_report.dcs.coding_group_type =SMS_CODGRP_SM_GENERAL_DCS;
1028 deliver_report.dcs.alphabet_type = SMS_ALPHABET_DEFAULT;
1029 deliver_report.dcs.class_type = SMS_CLASS_2;
1031 SmsUtilEncodeDCS(&tp_dcs, &deliver_report.dcs);
1032 packet[index++] = tp_dcs;
1037 deliver_report.udl =0x00;
1038 packet[index++] = deliver_report.udl;
1042 if (deliver_report.dcs.alphabet_type == SMS_ALPHABET_DEFAULT )
1044 //SmsUtilPackGSMCode( packet + index, msg, msg_len);
1048 msg("EncodeSmsDeliverReportTpdu");
1049 msg("Send packet to phonseSever[%d] -----", index);
1051 for(i=0; i< index; i++ )
1053 msg("[%02x]", packet[i]);
1058 memcpy( del_report.szData, packet, index);
1059 del_report.MsgLength = index;
1060 msg("msgLength :%d",del_report.MsgLength);
1062 tel_send_sms_deliver_report(&del_report,0, &requestId); //madhavi
1063 msg("after send deliver report request id is %d",requestId);
1069 static BOOL DecodeSmsSubmitReportTpdu(int length , char *data)
1072 TPDU_SMS_SUBMIT_REPORT submit_report;
1073 TmDateTime SCTimeStamp;;
1076 unsigned char msgRef, tpdu_len;
1083 msg("pData is Null")
1087 msg("length :%d",length);
1089 for(i=0;i<length;i++)
1090 msg("[%02x]",data[i]);
1092 result = data[position];
1094 msg("In ackrecv (return status) result is %x",result);
1099 msgRef = data[position++];
1100 msg("In ackrecv position :%d msgref is %x",position,msgRef);
1105 tpdu_len = data[position];
1106 msg("In ackrecv position :%d len is %d",position,tpdu_len);
1108 /**** SUBMIT REPORT TPDU PARSING
1111 /* TP-MTI , TP-UDHI */
1112 msg("before TPDU position value:%d",position);
1114 submit_report.msg_type = data[position] & 0x03; //bit 0,1
1115 submit_report.udhi = data[position] & 0x40 ? TRUE : FALSE;//bit 6;
1122 submit_report.fcs = data[position];
1126 /* TP-PI - set to a 1 indicates that a particular optional parameter is present in the fields which follow. */
1127 /* Masking Bit - TP -PID (bit 0), TP-DCS(bit 1), TP-UDL(bit 2) */
1129 submit_report.paraInd = data[position];
1130 mask = submit_report.paraInd;
1133 //msg("Parmeter Indication mask =%x", mask);
1137 SmsUtilDecodeTimeStamp( &data[position], & SCTimeStamp );
1141 if( ( mask != 0xFF ) && ( mask != 0 ) )
1146 submit_report.pId= data[position];
1148 msg("TP-PID :%x", submit_report.pId);
1154 SmsUtilDecodeDCS( &submit_report.dcs, data[position] );
1156 msg("TP-DCS :%x",data[position] );
1162 submit_report.udl = data[position];
1165 msg("TP-UDL :%x",data[position] );
1169 submit_report.userData = malloc( sizeof ( unsigned char ) * ( SMS_SMDATA_SIZE_MAX + 1 ) );
1171 memset(submit_report.userData, 0, sizeof ( unsigned char ) * ( SMS_SMDATA_SIZE_MAX + 1 ) );
1173 if (submit_report.dcs.alphabet_type == SMS_ALPHABET_DEFAULT )
1175 char inData[SMS_SMDATA_SIZE_MAX+1];
1177 memset( inData, 0x00, SMS_SMDATA_SIZE_MAX + 1 );
1179 memcpy( (void*) inData, (void*) &data[position], submit_report.udl );
1181 SmsUtilUnpackGSMCode(submit_report.userData, inData, (unsigned char) submit_report.udl);
1187 msg("*************************************");
1190 msg("SMS SEND FAIL!!")
1192 msg("SMS SEND SUCCESS!!")
1195 msg("Failure Code : %x",submit_report.fcs)
1197 msg("*************************************");
1203 static int DecodeSmsStatusReportTpdu (int tpdu_len, char* pTPDU)
1205 TPDU_SMS_STATUS_REPORT status_report;
1207 TmDateTime SCTimeStamp;
1208 TmDateTime DischargeTime;
1210 int rcpAddr_len = 0;
1211 char diallingNum[SMS_ADDRESS_LEN_MAX];
1213 char rcpAddr[SMS_ADDRESS_LEN_MAX]; //recipient number
1214 int rcp_ton, rcp_npi;
1218 /* TP-MTI, TP MMS, TP SRQ, TP_UDHI */
1220 status_report.msg_type = pTPDU[position] & 0x03; // bit 0,1
1221 status_report.mms = pTPDU[position] & 0x04 ? TRUE : FALSE; // bit 2
1222 status_report.srq = pTPDU[position] & 0x20 ? TRUE : FALSE; //bit 5
1223 status_report.udhi = pTPDU[position] & 0x40 ? TRUE : FALSE; //bit 6
1228 status_report.mr = pTPDU[position];
1233 memset (diallingNum, 0, sizeof (diallingNum));
1235 SmsUtilDecodeAddrField (diallingNum, &pTPDU[position], &rcp_ton, &rcp_npi);
1239 rcpAddr_len = strlen ((char*) diallingNum);
1240 if (rcpAddr_len % 2)
1241 position += rcpAddr_len / 2 + 1;
1243 position += rcpAddr_len / 2;
1245 if (rcp_ton == SMS_TON_INTERNATIONAL) {
1247 memcpy (&rcpAddr[1], diallingNum, rcpAddr_len);
1248 rcpAddr[rcpAddr_len + 1] = '\0';
1251 memcpy (rcpAddr, diallingNum, rcpAddr_len);
1252 rcpAddr[rcpAddr_len] = '\0';
1255 status_report.rcpAddr.DialNumLen = rcpAddr_len;
1256 memcpy (status_report.rcpAddr.szDiallingNum, rcpAddr, rcpAddr_len);
1257 status_report.rcpAddr.Npi = rcp_npi;
1258 status_report.rcpAddr.Ton = rcp_ton;
1261 SmsUtilDecodeTimeStamp (&pTPDU[position], &SCTimeStamp);
1265 SmsUtilDecodeTimeStamp (&pTPDU[position], &DischargeTime);
1269 status_report.status = pTPDU[position];
1273 status_report.paraInd = pTPDU[position];
1275 mask = status_report.paraInd;
1277 if ( (mask != 0xFF) && (mask != 0)) {
1278 /* Increment only if mask is valid */
1283 status_report.pId = pTPDU[position];
1288 SmsUtilDecodeDCS (&status_report.dcs, pTPDU[position]);
1293 status_report.udl = pTPDU[position];
1298 status_report.userData = malloc (
1299 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
1301 memset (status_report.userData, 0,
1302 sizeof(unsigned char) * (SMS_SMDATA_SIZE_MAX + 1));
1304 if (status_report.dcs.alphabet_type == SMS_ALPHABET_DEFAULT) {
1305 char inData[SMS_SMDATA_SIZE_MAX + 1];
1307 memset (inData, 0x00, SMS_SMDATA_SIZE_MAX + 1);
1309 memcpy ((void*) inData, (void*) &pTPDU[position],
1312 SmsUtilUnpackGSMCode (status_report.userData, inData,
1313 (unsigned char) status_report.udl);
1319 msg("*************************************");
1320 msg("Msg Type: STATUS_REPORT");
1321 if (status_report.mms) {
1322 msg("MMS: No more messages are waiting for the MS in this SC")
1324 else if (!status_report.mms) {
1325 msg("MMS: More messages are waiting for the MS in this SC")
1328 if (status_report.srq) {
1329 msg("SRQ: the result of an SMS COMMAND ")
1331 else if (!status_report.srq) {
1332 msg("SRQ: the result of a SMS SUBMIT.")
1335 if (status_report.udhi) {
1336 msg("UDHI: Contains a Header in addition to the short message.")
1338 else if (!status_report.udhi) {
1339 msg("UDHI: Only Short Message")
1342 msg("STATUS:%x", status_report.status);
1343 if (status_report.status == 0x00) {
1344 msg("STATUS : Short message received by the SME")
1346 else if (status_report.status == 0x01) {
1348 "STATUS : Short message forwarded by the SC to the SMEbut the SC is unable to confirm delivery")
1350 else if (status_report.status == 0x02) {
1351 msg("STATUS : Short message replaced by the SC")
1354 msg("Recipient Number : %s", rcpAddr);
1355 msg("SC Time Stamp : %d-%d-%d , %d:%d:%d", SCTimeStamp.year,
1356 SCTimeStamp.month, SCTimeStamp.day, SCTimeStamp.hour,
1357 SCTimeStamp.minute, SCTimeStamp.second);
1358 msg("Discharge Time : %d-%d-%d , %d:%d:%d", DischargeTime.year,
1359 DischargeTime.month, DischargeTime.day, DischargeTime.hour,
1360 DischargeTime.minute, DischargeTime.second);
1363 msg("Message : %s ", status_report.userData);
1365 msg("*************************************");
1370 static void on_noti_sms_incom_msg (TapiHandle *handle, const char *noti_id,
1371 void *data, void *user_data)
1373 int scaAddr_len = 0;
1376 char diallingNum[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1] = { 0, };
1377 char scaAddr[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 2] = { 0, }; //service center address
1378 int sca_ton, sca_npi;
1381 unsigned char MTI = 0;
1382 unsigned char MMS = 0;
1383 unsigned char SRI = 0;
1384 unsigned char UDHI = 0;
1385 unsigned char RP = 0;
1387 Sms_coding_scheme dcs;
1388 TelSmsDatapackageInfo_t * datapackage;
1389 TapiResult_t returnStatus;
1393 msgb("event(%s) receive !!", TAPI_NOTI_SMS_INCOM_MSG);
1395 if (data == NULL ) {
1400 datapackage = (TelSmsDatapackageInfo_t *) data;
1402 memset (diallingNum, 0, sizeof (diallingNum));
1404 SmsUtilDecodeAddrField (diallingNum, (char *) datapackage->Sca, &sca_ton,
1407 scaAddr_len = strlen (diallingNum);
1408 if (scaAddr_len > TAPI_NETTEXT_SCADDRESS_LEN_MAX)
1409 scaAddr_len = TAPI_NETTEXT_SCADDRESS_LEN_MAX;
1411 if (sca_ton == SMS_TON_INTERNATIONAL) {
1413 memcpy (&scaAddr[1], diallingNum, scaAddr_len - 1);
1416 memcpy (scaAddr, diallingNum, scaAddr_len);
1419 msg("Sc address in test app is %s", scaAddr);
1421 RP = datapackage->szData[position] & 0x80;
1422 UDHI = datapackage->szData[position] & 0x40;
1423 SRI = datapackage->szData[position] & 0x20;
1424 MMS = datapackage->szData[position] & 0x04;
1425 MTI = datapackage->szData[position] & 0x03;
1428 msg("UDHI [%x]", UDHI);
1429 msg("SRI [%x]", SRI);
1430 msg("MMS [%x]", MMS);
1431 msg("MTI [%02x]", MTI);
1433 tpdu_len = datapackage->MsgLength;
1435 pTPDU = malloc (sizeof(unsigned char) * tpdu_len);
1437 memcpy (pTPDU, &datapackage->szData[position], tpdu_len);
1439 if (MTI == SMS_TPDU_DELIVER) {
1440 DecodeSmsDeliverTpdu (tpdu_len, pTPDU);
1442 msg("dcs_pos : %d", dcs_pos);
1444 SmsUtilDecodeDCS (&dcs, datapackage->szData[position + dcs_pos]);
1446 //if(dcs.class_type == TAPI_NETTEXT_CLASS_2)
1448 msg("dcs type is of class2");
1449 TelSmsData_t WriteData;
1451 memset (&WriteData, 0, sizeof(TelSmsData_t));
1453 memcpy (WriteData.SmsData.Sca, datapackage->Sca,
1454 TAPI_SIM_SMSP_ADDRESS_LEN);
1456 WriteData.SmsData.MsgLength = datapackage->MsgLength;
1458 memcpy (WriteData.SmsData.szData, datapackage->szData,
1459 datapackage->MsgLength);
1461 WriteData.MsgStatus = TAPI_NETTEXT_STATUS_READ;
1463 returnStatus = tel_write_sms_in_sim (handle, &WriteData,
1464 on_resp_save_msg, NULL );
1466 msg("returnStatus for tel_write_sms_in_sim(): 0x%x", returnStatus);
1470 else if (MTI == SMS_TPDU_STATUS_REPORT) {
1471 DecodeSmsStatusReportTpdu (tpdu_len, pTPDU);
1474 TelSmsDatapackageInfo_t * del_report = NULL;
1476 del_report = malloc (sizeof(TelSmsDatapackageInfo_t));
1478 memset (del_report, 0, sizeof(TelSmsDatapackageInfo_t));
1480 memcpy (del_report->Sca, datapackage->Sca, TAPI_SIM_SMSP_ADDRESS_LEN);
1482 del_report->szData[0] = SMS_TPDU_DELIVER_REPORT; //TP-UDHI[bit6] : 0
1483 del_report->szData[1] = 0;// TP-PI = 0; bit2: TP-UDL bit1: TP-DCS bit0: TP-PID (No option field)
1484 del_report->MsgLength = 2;
1486 msg("***receive message (Api:SendDeliverreport)****");
1488 returnStatus = tel_send_sms_deliver_report (handle, del_report,
1489 TAPI_NETTEXT_SENDSMS_SUCCESS, on_resp_DeliverReport_msg, NULL );
1491 msg("returnStatus for tel_send_sms_deliver_report(): 0x%x", returnStatus);
1498 static void on_noti_sms_cb_incom_msg (TapiHandle *handle, const char *noti_id,
1499 void *data, void *user_data)
1501 TelSmsCbMsg_t *cbMsg = data;
1503 char pPDU[SMS_CB_SIZE_MAX + 3] = { 0, };
1506 msgb("event(%s) receive !!", TAPI_NOTI_SMS_CB_INCOM_MSG);
1508 length = cbMsg->Length;
1509 pPDU[0] = cbMsg->CbMsgType;
1511 memcpy (& (pPDU[2]), cbMsg->szMsgData, SMS_CB_SIZE_MAX + 1);
1513 DecodeCellBroadcastMsg (length, pPDU);
1516 static void on_noti_sms_etws_incom_msg (TapiHandle *handle, const char *noti_id,
1517 void *data, void *user_data)
1519 TelSmsEtwsMsg_t *etwsMsg = data;
1521 char pPDU[TAPI_NETTEXT_ETWS_SIZE_MAX + 3] = { 0, };
1524 msgb("event(%s) receive !!", TAPI_NOTI_SMS_ETWS_INCOM_MSG);
1526 length = etwsMsg->Length;
1527 pPDU[0] = etwsMsg->EtwsMsgType;
1529 memcpy (& (pPDU[2]), etwsMsg->szMsgData, TAPI_NETTEXT_ETWS_SIZE_MAX + 1);
1533 static void on_noti_sms_incom_ex_msg(TapiHandle *handle, const char *noti_id, void *data, void *user_data)
1535 tel_service_object_get_int(notiObj, "ParamMask");
1536 tel_service_object_get_int(notiObj, "MsgType");
1538 switch(tel_service_object_get_int(notiObj, "MsgType"))
1540 case MESSAGETYPE_DELIVER:
1541 /* Origination address */
1542 tel_service_object_get_int(notiObj, "OrigAddr.Digit");
1543 tel_service_object_get_int(notiObj, "OrigAddr.NumberMode");
1544 tel_service_object_get_int(notiObj, "OrigAddr.NumberType");
1545 tel_service_object_get_int(notiObj, "OrigAddr.NumberPlan");
1546 tel_service_object_get_char(notiObj, "OrigAddr.szAddrLength");
1547 tel_service_object_get_string(notiObj, "OrigAddr.szAddress");
1549 /* Origination subaddress */
1550 tel_service_object_get_int(notiObj, "OrigSubAddr.SubType");
1551 tel_service_object_get_char(notiObj, "OrigSubAddr.Odd");
1552 tel_service_object_get_char(notiObj, "OrigSubAddr.szAddrLength");
1553 tel_service_object_get_string(notiObj, "OrigSubAddr.szAddress");
1555 tel_service_object_get_int(notiObj, "TeleService");
1556 tel_service_object_get_int(notiObj, "bBearerReplySeqRequest");
1557 tel_service_object_get_char(notiObj, "ReplySeqNumber");
1558 tel_service_object_get_int(notiObj, "MsgId");
1559 tel_service_object_get_int(notiObj, "MsgEncoding");
1560 tel_service_object_get_int(notiObj, "MsgLength");
1561 tel_service_object_get_string(notiObj, "szData");
1563 /* Message center time stamp */
1564 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.year");
1565 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.month");
1566 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.day");
1567 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.hours");
1568 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.minutes");
1569 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.seconds");
1571 /* Validity period - Absolute */
1572 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.year");
1573 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.month");
1574 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.day");
1575 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.hours");
1576 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.minutes");
1577 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.seconds");
1579 tel_service_object_get_char(notiObj, "ValidityPeriodRel");
1581 /* Deferred delivery time - Absolute (not supported) */
1582 tel_service_object_get_int(notiObj, "DeferredDelTimeAbs.year");
1583 tel_service_object_get_int(notiObj, "DeferredDelTimeAbs.month");
1584 tel_service_object_get_int(notiObj, "DeferredDelTimeAbs.day");
1585 tel_service_object_get_int(notiObj, "DeferredDelTimeAbs.hours");
1586 tel_service_object_get_int(notiObj, "DeferredDelTimeAbs.minutes");
1587 tel_service_object_get_int(notiObj, "DeferredDelTimeAbs.seconds");
1589 /* Deferred delivery time - Relative (not supported) */
1590 tel_service_object_get_char(notiObj, "DeferredDelTimeRel");
1592 tel_service_object_get_int(notiObj, "Priority");
1593 tel_service_object_get_int(notiObj, "Privacy");
1594 tel_service_object_get_char(notiObj, "NumMsg");
1595 tel_service_object_get_int(notiObj, "bUserAckRequest");
1596 tel_service_object_get_int(notiObj, "bDeliveryAckRequest");
1597 tel_service_object_get_int(notiObj, "AlertPriority");
1598 tel_service_object_get_int(notiObj, "MsgLang");
1600 /* Callback number address */
1601 tel_service_object_get_int(notiObj, "CallBackNumer.Digit");
1602 tel_service_object_get_int(notiObj, "CallBackNumer.NumberMode");
1603 tel_service_object_get_int(notiObj, "CallBackNumer.NumberType");
1604 tel_service_object_get_int(notiObj, "CallBackNumer.NumberPlan");
1605 tel_service_object_get_char(notiObj, "CallBackNumer.szAddrLength");
1606 tel_service_object_get_string(notiObj, "CallBackNumer.szAddress");
1608 tel_service_object_get_int(notiObj, "Display");
1612 case MESSAGETYPE_DELIVERY_ACK:
1613 /* Origination address */
1614 tel_service_object_get_int(notiObj, "OrigAddr.Digit");
1615 tel_service_object_get_int(notiObj, "OrigAddr.NumberMode");
1616 tel_service_object_get_int(notiObj, "OrigAddr.NumberType");
1617 tel_service_object_get_int(notiObj, "OrigAddr.NumberPlan");
1618 tel_service_object_get_char(notiObj, "OrigAddr.szAddrLength");
1619 tel_service_object_get_string(notiObj, "OrigAddr.szAddress");
1621 /* Origination subaddress */
1622 tel_service_object_get_int(notiObj, "OrigSubAddr.SubType");
1623 tel_service_object_get_char(notiObj, "OrigSubAddr.Odd");
1624 tel_service_object_get_char(notiObj, "OrigSubAddr.szAddrLength");
1625 tel_service_object_get_char(notiObj, "OrigSubAddr.szAddress");
1627 tel_service_object_get_int(notiObj, "TeleService");
1628 tel_service_object_get_int(notiObj, "bBearerReplySeqRequest");
1629 tel_service_object_get_char(notiObj, "ReplySeqNumber");
1630 tel_service_object_get_int(notiObj, "MsgId");
1631 tel_service_object_get_int(notiObj, "MsgEncoding");
1632 tel_service_object_get_int(notiObj, "MsgLength");
1633 tel_service_object_get_string(notiObj, "szData");
1635 tel_service_object_get_char(notiObj, "UserResponseCode");
1637 /* Message center time stamp */
1638 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.year");
1639 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.month");
1640 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.day");
1641 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.hours");
1642 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.minutes");
1643 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.seconds");
1647 case MESSAGETYPE_USER_ACK:
1648 /* Origination address */
1649 tel_service_object_get_int(notiObj, "OrigAddr.Digit");
1650 tel_service_object_get_int(notiObj, "OrigAddr.NumberMode");
1651 tel_service_object_get_int(notiObj, "OrigAddr.NumberType");
1652 tel_service_object_get_int(notiObj, "OrigAddr.NumberPlan");
1653 tel_service_object_get_char(notiObj, "OrigAddr.szAddrLength");
1654 tel_service_object_get_string(notiObj, "OrigAddr.szAddress");
1656 /* Origination subaddress */
1657 tel_service_object_get_int(notiObj, "OrigSubAddr.SubType");
1658 tel_service_object_get_char(notiObj, "OrigSubAddr.Odd");
1659 tel_service_object_get_char(notiObj, "OrigSubAddr.szAddrLength");
1660 tel_service_object_get_char(notiObj, "OrigSubAddr.szAddress");
1662 tel_service_object_get_int(notiObj, "TeleService");
1663 tel_service_object_get_int(notiObj, "bBearerReplySeqRequest");
1664 tel_service_object_get_char(notiObj, "ReplySeqNumber");
1665 tel_service_object_get_int(notiObj, "MsgId");
1666 tel_service_object_get_int(notiObj, "MsgEncoding");
1667 tel_service_object_get_int(notiObj, "MsgLength");
1668 tel_service_object_get_string(notiObj, "szData");
1670 /* Message center time stamp */
1671 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.year");
1672 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.month");
1673 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.day");
1674 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.hours");
1675 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.minutes");
1676 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.seconds");
1686 static void on_noti_sms_cb_incom_ex_msg(TapiHandle *handle, const char *noti_id, void *data, void *user_data)
1688 tel_service_object_get_string(notiObj, "szData");
1690 /* Message center time stamp */
1691 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.year");
1692 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.month");
1693 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.day");
1694 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.hours");
1695 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.minutes");
1696 tel_service_object_get_int(notiObj, "MessageCenterTimeStamp.seconds");
1698 /* Validity period - Absolute */
1699 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.year");
1700 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.month");
1701 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.day");
1702 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.hours");
1703 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.minutes");
1704 tel_service_object_get_int(notiObj, "ValidityPeriodAbs.seconds");
1706 tel_service_object_get_char(notiObj, "ValidityPeriodRel");
1708 tel_service_object_get_int(notiObj, "Priority");
1709 tel_service_object_get_int(notiObj, "AlertPriority");
1710 tel_service_object_get_int(notiObj, "MsgLang");
1711 tel_service_object_get_int(notiObj, "Display");
1715 static void on_noti_sms_memory_status (TapiHandle *handle, const char *noti_id,
1716 void *data, void *user_data)
1718 int *memory_status = data;
1721 msgb("event(%s) receive !!", TAPI_NOTI_SMS_MEMORY_STATUS);
1722 msg(" - memory_status = 0x%x", *memory_status);
1725 static void on_noti_sms_ready_status (TapiHandle *handle, const char *noti_id,
1726 void *data, void *user_data)
1728 gboolean *device_ready = data;
1731 msgb("event(%s) receive !!", TAPI_NOTI_SMS_DEVICE_READY);
1732 msg(" - device_ready = %s", *device_ready ? "TRUE" : "FALSE");
1735 static void on_resp_send_msg (TapiHandle *handle, int result, void *data,
1739 msgb("tel_send_sms() response receive");
1740 msg(" - result = 0x%x", result);
1743 static void on_resp_read_msg (TapiHandle *handle, int result, void *data,
1746 TelSmsData_t * sim_data;
1747 int scaAddr_len = 0;
1750 char diallingNum[TAPI_NETTEXT_ADDRESS_LEN_MAX + 1] = { 0, };
1751 char scaAddr[TAPI_NETTEXT_SCADDRESS_LEN_MAX + 2] = { 0, }; //service center address
1752 int sca_ton, sca_npi;
1755 if (data == NULL ) {
1756 msg("data is Null");
1760 sim_data = (TelSmsData_t *) data;
1762 if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_UNREAD)
1763 msg("Msg Staus : received unread msg")
1764 else if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_READ)
1765 msg("Msg Staus : received read msg")
1766 else if (sim_data->MsgStatus == TAPI_NETTEXT_STATUS_UNSENT)
1767 msg("Msg Staus : unsent msg")
1769 msg("Msg Staus : [%d]", sim_data->MsgStatus)
1771 msg("First Data [%x]", sim_data->SmsData.szData[0]);
1772 msg("Second Data [%x]", sim_data->SmsData.szData[1]);
1773 msg("Third Data [%x]", sim_data->SmsData.szData[2]);
1774 msg("Fourth Data [%x]", sim_data->SmsData.szData[3]);
1778 memset (diallingNum, 0, sizeof (diallingNum));
1780 SmsUtilDecodeAddrField (diallingNum, (char *) sim_data->SmsData.Sca,
1781 &sca_ton, &sca_npi);
1783 position += 2; //include Address-Length, Type of Address
1785 scaAddr_len = strlen ((char *) diallingNum);
1786 if (scaAddr_len > TAPI_NETTEXT_SCADDRESS_LEN_MAX - 1)
1787 scaAddr_len = TAPI_NETTEXT_SCADDRESS_LEN_MAX - 1;
1789 if (scaAddr_len % 2)
1790 position += scaAddr_len / 2 + 1;
1792 position += scaAddr_len / 2;
1794 if (sca_ton == SMS_TON_INTERNATIONAL) {
1796 memcpy (&scaAddr[1], diallingNum, scaAddr_len);
1799 memcpy (scaAddr, diallingNum, scaAddr_len);
1802 tpdu_len = sim_data->SmsData.MsgLength;
1804 msg("SCA Number : %s tpdu_len is %d", scaAddr, tpdu_len);
1806 pTPDU = malloc (sizeof(unsigned char) * tpdu_len);
1810 msg("bfor memcopy position is %d", position);
1811 memcpy (pTPDU, & (sim_data->SmsData.szData[0]), tpdu_len);
1812 msg("after memcpy");
1814 DecodeSmsDeliverTpdu (tpdu_len, pTPDU);
1819 static void on_resp_save_msg (TapiHandle *handle, int result, void *data,
1825 msgb("tel_write_sms_in_sim() response receive");
1826 msg(" - result = 0x%x", result);
1827 msg(" - index = %d", *index);
1830 static void on_resp_delete_msg (TapiHandle *handle, int result, void *data,
1836 msgb("tel_delete_sms_in_sim() response receive");
1837 msg(" - result = 0x%x", result);
1838 msg(" - index = %d", *index);
1841 static void on_resp_DeliverReport_msg (TapiHandle *handle, int result,
1842 void *data, void *user_data)
1847 msgb("tel_send_sms_deliver_report() response receive");
1848 msg(" - result = 0x%x", result);
1849 msg(" - index = %d", *index);
1852 static void on_resp_set_sms_sca (TapiHandle *handle, int result, void *data,
1856 msgb("tel_set_sms_sca() response receive");
1857 msg(" - result = 0x%x", result);
1860 static void on_resp_set_sms_preferred_bearer (TapiHandle *handle, int result,
1861 void *data, void *user_data)
1864 msgb("tel_set_sms_preferred_bearer() response receive");
1865 msg(" - result = 0x%x", result);
1868 static void on_resp_set_sms_cb_config (TapiHandle *handle, int result,
1869 void *data, void *user_data)
1872 msgb("tel_set_sms_cb_config() response receive");
1873 msg(" - result = 0x%x", result);
1876 static void on_resp_set_sms_params (TapiHandle *handle, int result, void *data,
1880 msgb("tel_set_sms_params() response receive");
1881 msg(" - result = 0x%x", result);
1884 static void on_resp_set_mem_status (TapiHandle *handle, int result, void *data,
1888 msgb("tel_set_sms_mem_status() response receive");
1889 msg(" - result = 0x%x", result);
1892 static void on_resp_get_sms_sca (TapiHandle *handle, int result, void *data,
1895 TelSmsAddressInfo_t *scaInfo = data;
1899 msgb("tel_get_sms_sca() response receive");
1900 msg(" - result = 0x%x", result);
1901 msg(" - TON = %d", scaInfo->Ton);
1902 msg(" - NPI = %d", scaInfo->Npi);
1903 msg(" - DialNumLen = %d", scaInfo->DialNumLen);
1906 for (i = 0; i < scaInfo->DialNumLen; i++) {
1907 msg("[%02x]", scaInfo->szDiallingNum[i]);
1913 static void on_resp_get_cb_config (TapiHandle *handle, int result, void *data,
1916 TelSmsCbConfig_t * CBConfig;
1919 if (data == NULL ) {
1920 msg("pData is Null")
1924 CBConfig = (TelSmsCbConfig_t *) data;
1927 msgb("tel_get_sms_cb_config() response receive");
1928 msg(" - result = 0x%x", result);
1930 msg("=========CB Configuration=========");
1932 /*** CB Enable/Diable ***/
1933 if (CBConfig->CBEnabled == TRUE)
1934 msg("Cell Broadcast Msg Enabled...")
1936 msg("Cell Broadcast Msg Disabled...")
1938 /*** Selected ID ***/
1939 if (CBConfig->Net3gppType == 0x01)
1940 msg("Network type is 3gpp ")
1941 else if (CBConfig->Net3gppType == 0x02)
1942 msg("Network type is CDMA");
1944 /*** CBMI Count ***/
1945 msg("CBMI Range Count: %d \n", CBConfig->MsgIdRangeCount);
1948 if (CBConfig->MsgIdRangeCount != 0) {
1949 msg("----- CBMI List -----");
1950 for (i = 0; i < CBConfig->MsgIdRangeCount; i++) {
1951 msg("From No.%d - [0x%04x]", i,
1952 CBConfig->MsgIDs[i].Net3gpp.FromMsgId);
1953 msg("To No.%d - [0x%04x]", i, CBConfig->MsgIDs[i].Net3gpp.ToMsgId);
1956 msg("==================================");
1959 static void on_resp_get_sms_parameters (TapiHandle *handle, int result,
1960 void *data, void *user_data)
1962 TelSmsParams_t *smsp_param;
1964 if (data == NULL ) {
1968 smsp_param = (TelSmsParams_t *) data;
1971 msgb("tel_get_sms_parameters() response receive");
1972 msg(" - result = 0x%x", result);
1974 msg("record index is 0x%x", smsp_param->RecordIndex);
1975 msg("record len is 0x%x", smsp_param->RecordLen);
1976 msg("alpha_id len is 0x%x ", (int )smsp_param->AlphaIdLen);
1977 msg("alpha_id is %s ", smsp_param->szAlphaId);
1978 msg("param indicator is 0x%x", smsp_param->ParamIndicator);
1979 msg("dest dialling num is %s", smsp_param->TpDestAddr.szDiallingNum);
1980 msg("svcaddr dialling num is %s", smsp_param->TpSvcCntrAddr.szDiallingNum);
1981 msg("pid 0x%x", smsp_param->TpProtocolId);
1982 msg("dcs is 0x%x", smsp_param->TpDataCodingScheme);
1983 msg("validity is 0x%x", smsp_param->TpValidityPeriod);
1986 static void on_resp_get_pref_bearer (TapiHandle *handle, int result, void *data,
1990 msgb("tel_get_sms_preferred_bearer() response receive");
1991 msg(" - result = 0x%x", result);
1994 static void on_resp_get_paramcnt (TapiHandle *handle, int result, void *data,
1999 if (data == NULL ) {
2004 RecordCount = (int *) data;
2007 msgb("tel_get_sms_parameter_count() response receive");
2008 msg(" - result = 0x%x", result);
2009 msg(" - In param_count_noti the record count is %d", *RecordCount);
2012 static void on_resp_get_sms_count (TapiHandle *handle, int result, void *data,
2015 static TelSmsStoredMsgCountInfo_t *countInfo;
2016 int loop_counter = 0;
2017 TapiResult_t returnStatus = TAPI_API_SUCCESS;
2019 if (data == NULL ) {
2024 countInfo = (TelSmsStoredMsgCountInfo_t*) data;
2027 msgb("tel_get_sms_count() response receive");
2028 msg(" - result = 0x%x", result);
2030 if (countInfo->UsedCount != 0x00) //if used count is not zero
2032 msg("Index LIST..........");
2033 for (loop_counter = 0; loop_counter < countInfo->UsedCount;
2035 msg("[%02x]", countInfo->IndexList[loop_counter]);
2036 returnStatus = tel_read_sms_in_sim (handle,
2037 countInfo->IndexList[loop_counter], on_resp_read_msg,
2039 msg("After read msg: returnstatus %d", returnStatus);
2041 msg("In MsgCountNotification total cnt is %d, usedcnt is %dapi_err %d",
2042 countInfo->TotalCount, countInfo->UsedCount, returnStatus);
2045 msg("In MsgCountNotification total cnt is %d, usedcnt is %d",
2046 countInfo->TotalCount, countInfo->UsedCount);
2050 static int SendMessage (MManager *mm, struct menu_data *menu)
2054 char buf[SMS_ADDRESS_LEN_MAX];
2056 char diallingNum[SMS_ADDRESS_LEN_MAX];
2057 int diallingNum_len = 0;
2059 memset (buf, 0, sizeof (buf));
2060 memset (diallingNum, 0, sizeof (diallingNum));
2061 diallingNum_len = 0;
2063 msg("Enter destination Number: ");
2065 ret = read (0, buf, sizeof (buf));
2074 buf[SMS_ADDRESS_LEN_MAX - 1] = '\0';
2075 diallingNum_len = strlen (diallingNum);
2076 memcpy (&diallingNum[diallingNum_len], buf, strlen (buf));
2078 diallingNum_len = strlen (diallingNum); //recalculate
2079 msg("dialling num %s and dialling num len is %d", diallingNum,
2081 diallingNum[diallingNum_len] = 0;
2082 diallingNum_len = diallingNum_len - 1;
2084 msg("Enter Message: ");
2085 memset (message, 0, sizeof (message));
2087 ret = read (0, message, sizeof (message) - 1);
2090 msg(" NULL msg can NOT be sent ");
2093 message[sizeof (message) - 1] = '\0';
2095 msg_len = strlen (message);
2096 message[--msg_len] = 0;
2098 msg("==========================");
2099 msg("To :%s", diallingNum);
2100 msg("Message: %sMsg Length:%d", message, msg_len);
2101 msg("Dialling number Length : %d", diallingNum_len);
2102 msg("==========================\n");
2104 EncodeSmsSubmitTpdu (mm, diallingNum, diallingNum_len, message, msg_len);
2109 static int SendMessageCDMA ()
2113 char buf[512] = { 0, };
2114 char message[512] = { 0, };
2115 char diallingNum[SMS_ADDRESS_LEN_MAX + 1] = { 0, };
2116 int diallingNum_len = 0;
2119 printf ("Enter destination Number:\n>> ");
2122 ret = read (0, buf, sizeof (buf));
2131 buf[SMS_ADDRESS_LEN_MAX - 1] = '\0';
2132 memcpy (diallingNum, buf, sizeof (diallingNum));
2133 diallingNum_len = strlen (diallingNum);
2135 printf ("dialling num [%s], dialling num len [%d]\n", diallingNum,
2137 printf ("Enter Message\n>> ");
2140 ret = read (0, message, sizeof (message) - 1);
2142 printf (" NULL msg can NOT be sent \n");
2145 message[sizeof (message) - 1] = '\0';
2147 msg_len = strlen (message);
2149 printf ("===========================\n");
2150 printf ("To: [%s] (len: %d)\n", diallingNum, diallingNum_len);
2151 printf ("Message: [%s]\nMsg Length: [%d]\n", message, msg_len);
2152 printf ("===========================\n\n");
2154 EncodeCdmaSmsSubmitTpdu (diallingNum, diallingNum_len, message, msg_len);
2155 //EncodeSmsSubmitTpdu(diallingNum, diallingNum_len,message, msg_len) ;
2160 static int ReadMessage (MManager *mm, struct menu_data *menu)
2162 TapiHandle *handle = menu_manager_ref_user_data (mm);
2166 int returnStatus = 0;
2168 memset (buf, 0, sizeof (buf));
2170 msg("*************************************");
2171 msg("1. SIM Message");
2173 msg("Select Number:");
2175 ret = read (0, buf, sizeof (buf));
2185 selectedNo = atoi (buf);
2186 msg("Selected Num in read message(value is 1) is %d ", selectedNo);
2187 switch (selectedNo) {
2190 msg("***Reading the message in SIM***")
2192 returnStatus = tel_get_sms_count (handle, on_resp_get_sms_count,
2194 msg("tel_get_sms_count(): 0x%x", returnStatus)
2199 msg("Not supported Menu(%d) !!!", selectedNo)
2207 static int DeleteMessage (MManager *mm, struct menu_data *menu)
2209 TapiHandle *handle = menu_manager_ref_user_data (mm);
2215 TapiResult_t returnStatus;
2217 memset (buf, 0, sizeof (buf));
2219 msg("Enter delete index >>");
2221 ret = read (0, buf, sizeof (buf));
2231 msg("index value :%d", index);
2233 msg("***Deleting the message(Api:DeleteMsg,GetMsgCount)***");
2235 returnStatus = tel_delete_sms_in_sim (handle, index, on_resp_delete_msg,
2237 msg("returnstatus tel_delete_sms_in_sim() is for delete%d ", returnStatus);
2238 returnStatus = tel_get_sms_count (handle, on_resp_get_sms_count, NULL );
2239 msg("returnStatus for tel_get_sms_count() %d", returnStatus);
2245 static int Getting (MManager *mm, struct menu_data *menu)
2247 TapiHandle *handle = menu_manager_ref_user_data (mm);
2249 int returnStatus = 0;
2250 gboolean bReadyStatus = FALSE;
2252 selectedNo = atoi (menu->key);
2254 switch (selectedNo) {
2256 msg("***Getting the SCA(Api: GetSCA)****")
2258 returnStatus = tel_get_sms_sca (handle, 0, on_resp_get_sms_sca,
2260 msg("returnstatus for tel_get_sms_sca(): 0x %x", returnStatus)
2266 msg("***Getting the CB Configuration(Api: GetCBConfig)***")
2268 returnStatus = tel_get_sms_cb_config (handle, on_resp_get_cb_config,
2270 msg("ReturnStatus[%d] ", returnStatus)
2276 msg("****Getting the parameter(Api:GetParameter)****")
2278 returnStatus = tel_get_sms_parameters (handle, 0,
2279 on_resp_get_sms_parameters, NULL );
2280 msg("ReturnStatus[%d]]", returnStatus)
2286 msg("***Getting preferrredBearer(Api:GetPreferredBearer)***")
2288 returnStatus = tel_get_sms_preferred_bearer (handle,
2289 on_resp_get_pref_bearer, NULL );
2290 msg("ReturnStatus[%d]", returnStatus)
2296 msg("***Getting the parameterCount(Api:GetParameterCount)***")
2298 returnStatus = tel_get_sms_parameter_count (handle,
2299 on_resp_get_paramcnt, NULL );
2300 msg("ReturnStatus[%d]", returnStatus)
2305 msg("***Getting the SmsCount(Api:GetSmsCount)***")
2307 returnStatus = tel_get_sms_count (handle, on_resp_get_sms_count,
2309 msg("ReturnStatus[%d]", returnStatus)
2316 "***Getting the Sms Ready status(Api:Check_sms_device_status)***")
2318 returnStatus = tel_check_sms_device_status (handle, &bReadyStatus);
2319 msg("ReturnStatus[%d]", returnStatus)
2321 msg("Ready status = %s", bReadyStatus ? "TRUE" : "FALSE")
2334 static int _get_int()
2339 memset (buf, 0, 255);
2340 ret = read (0, buf, 254);
2347 static int Setting (MManager *mm, struct menu_data *menu)
2349 TapiHandle *handle = menu_manager_ref_user_data (mm);
2355 char MemoryStatus[255] = { 0, }; //2006/8/8
2356 char bearerType[255] = { 0, }; //2006/8/8
2358 TelSmsCbConfig_t *pCBConfig;
2360 TelSmsParams_t smsParameters = { 0, };
2361 TapiResult_t returnStatus;
2363 settingMenu = atoi (menu->key);
2365 switch (settingMenu) {
2366 case 1: //Set Service Center Number
2368 msg("*** Setting SCA (API: tel_set_sms_sca()) ****");
2369 TelSmsAddressInfo_t sca = {0, };
2370 unsigned char sca_num[TAPI_SIM_SMSP_ADDRESS_LEN + 1];
2371 unsigned int sca_length = 0;
2372 unsigned int additional_len = 0;
2376 msg("Enter the SCA NUMBER:");
2377 ret = scanf("%s", sca_num);
2378 if (ret > TAPI_SIM_SMSP_ADDRESS_LEN) {
2379 msg("Entered SCA is INVALID - SCA length cannot be greater than %d", TAPI_SIM_SMSP_ADDRESS_LEN);
2382 sca.Npi = TAPI_SIM_NPI_ISDN_TEL;
2383 sca.Ton = TAPI_SIM_TON_UNKNOWN;
2384 if (sca_num[0] == '+') {
2385 sca.Ton = TAPI_SIM_TON_INTERNATIONAL;
2388 sca_length = strlen((char *)sca_num) - additional_len;
2389 if (sca_length % 2 == 0) {
2390 for (index = additional_len, j = 0; index < sca_length; index += 2, j++)
2391 sca.szDiallingNum[j] = ((sca_num[index+1]-'0') << 4) | (sca_num[index]-'0');
2393 for (index = additional_len, j = 0; index < sca_length; index += 2, j++) {
2394 if (index == (sca_length - 1))
2395 sca.szDiallingNum[j] = ((0xF0) | (sca_num[index]-'0'));
2397 sca.szDiallingNum[j] = ((sca_num[index+1]-'0') << 4) | (sca_num[index]-'0');
2400 sca.szDiallingNum[(sca_length+1)/2] = '\0';
2401 sca.DialNumLen = strlen((char *)sca.szDiallingNum);
2402 msg("%d", sca.DialNumLen);
2403 returnStatus = tel_set_sms_sca (handle, &sca, 0, on_resp_set_sms_sca, NULL);
2404 msg("Return status: [%d]", returnStatus);
2409 msg("****Setting the BearerType(Api:SetPreferredBearer)****");
2411 msg("Enter Bearer Type(1:PD, 2:CS, 3:PDP 4:CSP):");
2413 memset (bearerType, 0, sizeof (bearerType));
2415 ret = read (0, bearerType, sizeof (bearerType));
2417 msg(" NULL msg can NOT be sent ");
2420 msg("Set Preferred Bearer : bearerType =%d ", atoi (bearerType));
2422 returnStatus = tel_set_sms_preferred_bearer (handle,
2423 atoi (bearerType), on_resp_set_sms_preferred_bearer, NULL );
2424 msg("returnStatus after prefbearer set is %d", returnStatus);
2429 case 3: //Set Deliver Report
2431 msg("****Setting Deliver Report(Api:SetDeliverReport)****");
2432 //EncodeSmsDeliverReportTpdu();
2436 case 4: //Set CB Enable/Disable
2438 msg("****Setting the CB configuration(Api:SetCbConfig)****");
2440 pCBConfig = calloc (1, sizeof(TelSmsCbConfig_t));
2444 msg("Enter CB ON/OFF (1: Enable, 0:Disable): ");
2445 pCBConfig->CBEnabled = _get_int();
2447 msg("Enter Max ID Count: ");
2448 pCBConfig->MsgIdMaxCount = _get_int();
2450 msg("Enter MsgIdRangeCount ( < 10 ): ");
2451 pCBConfig->MsgIdRangeCount = _get_int();
2453 if (pCBConfig->MsgIdRangeCount <= 0
2454 || pCBConfig->MsgIdRangeCount >= TAPI_NETTEXT_GSM_SMS_CBMI_LIST_SIZE_MAX) {
2455 msg("Bad Range value");
2460 for (i = 0; i < pCBConfig->MsgIdRangeCount; i++) {
2461 msg("Enter %d FromMsgId : ", i + 1);
2462 pCBConfig->MsgIDs[i].Net3gpp.FromMsgId = _get_int();
2464 msg("Enter %d ToMsgId : ", i + 1);
2465 pCBConfig->MsgIDs[i].Net3gpp.ToMsgId = _get_int();
2467 msg("Enter %d Selected : ", i + 1);
2468 pCBConfig->MsgIDs[i].Net3gpp.Selected = _get_int();
2471 pCBConfig->Net3gppType = 0x01;
2474 "from sms test setting the cb configuration:CBEnabled:%d,Net3gppType:%d,msgIdRangeCount:%d,From: %d\t To: %d\t Selected: %d",
2475 pCBConfig->CBEnabled, pCBConfig->Net3gppType,
2476 pCBConfig->MsgIdRangeCount,
2477 pCBConfig->MsgIDs[0].Net3gpp.FromMsgId,
2478 pCBConfig->MsgIDs[0].Net3gpp.ToMsgId,
2479 pCBConfig->MsgIDs[0].Net3gpp.Selected);
2481 returnStatus = tel_set_sms_cb_config (handle, pCBConfig,
2482 on_resp_set_sms_cb_config, NULL );
2483 msg("returnStatus after cbconfig set is is [%d]", returnStatus);
2491 char* num = "0103001408";
2492 char* sca = "8210911111";
2494 msg("****Setting Parameters(Api:SetParameters)****");
2496 smsParameters.RecordIndex = 0x00;
2497 smsParameters.RecordLen = 31;
2498 smsParameters.AlphaIdLen = 3;
2499 memcpy (&smsParameters.szAlphaId, name, strlen (name));
2501 smsParameters.ParamIndicator = 0xe0;
2502 smsParameters.TpDestAddr.DialNumLen = 10;
2503 smsParameters.TpDestAddr.Ton = 1;
2504 smsParameters.TpDestAddr.Npi = 1;
2506 smsParameters.TpSvcCntrAddr.DialNumLen = 10;
2507 smsParameters.TpSvcCntrAddr.Ton = 1;
2508 smsParameters.TpSvcCntrAddr.Npi = 1;
2510 memcpy (smsParameters.TpDestAddr.szDiallingNum, num, strlen (num));
2511 memcpy (smsParameters.TpSvcCntrAddr.szDiallingNum, sca,
2513 smsParameters.TpProtocolId = 3;
2514 smsParameters.TpDataCodingScheme = 2;
2515 smsParameters.TpValidityPeriod = 1;
2517 returnStatus = tel_set_sms_parameters (handle, &smsParameters,
2518 on_resp_set_sms_params, NULL );
2519 msg("returnstatus after sparam set is %d", returnStatus);
2524 case 6: //Set Memory Full Notification
2527 "Enter Memory Status to be set(1:Memory Available, 2:Memory Full)");
2528 memset (MemoryStatus, 0, sizeof (MemoryStatus));
2529 ret = read (0, MemoryStatus, sizeof (MemoryStatus));
2531 msg(" NULL msg can NOT be sent ");
2534 msg("Memory Status type is %d ", atoi (MemoryStatus));
2535 returnStatus = tel_set_sms_memory_status (handle,
2536 atoi (MemoryStatus), on_resp_set_mem_status, NULL ); //Set to full 0x02-Full, 0x01-available
2537 msg("api err after memstatus set is is %d", returnStatus);
2541 case 7: //Set Stored MsgStaus
2548 //TapiReadNetText(index, &CurMsgStauts, &DataPackage);
2549 returnStatus = tel_read_sms_in_sim(index,&requestId);//To avoid mismatch of prototypes
2550 msg("returnStatus after read is is %d",returnStatus);
2552 msg("Before set status : index = %d, CurMsgStauts=%d",index,msgStauts);
2554 returnStatus = tel_set_sms_message_status(index, msgStauts,&requestId);
2555 msg("returnStatus after msgstatus set is %d",returnStatus);
2557 //tel_nettext_read(index, &CurMsgStauts, &DataPackage);
2558 returnStatus = tel_read_sms_in_sim(index,&requestId);//To avoid mismatch of prototypes
2559 msg("returnStatus after read is %d",returnStatus);
2561 msg("Not suppored in this Test App !!!");
2565 // JYGU returnStatus =tel_set_sms_device_status();
2566 msg("Not suppored in this Test App !!!");
2572 returnStatus =tel_check_sms_device_status(&status);
2575 msg("Device Ready");
2579 msg("Device Not Ready");
2581 msg("returnStatus after read is %d",returnStatus);
2583 msg("Not suppored in this Test App !!!");
2592 static struct menu_data menu_sms_getting[] = { { "1",
2593 "Get Service Center Number", NULL, Getting, NULL }, { "2",
2594 "Get CB Setting Information", NULL, Getting, NULL }, { "3",
2595 "Get SMS Parameters", NULL, Getting, NULL }, { "4",
2596 "Get SMS PreferredBearer Information (Not supported)", NULL, Getting,
2597 NULL }, { "5", "Get SMS Parameter Count", NULL, Getting, NULL }, { "6",
2598 "Get Message Count", NULL, Getting, NULL }, { "7",
2599 "Get SMS ready status", NULL, Getting, NULL }, { NULL, NULL , }, };
2601 static struct menu_data menu_sms_setting[] =
2602 { { "1", "Set Service Center Number", NULL, Setting, NULL }, { "2",
2603 "Set PreferredBearer Type", NULL, Setting, NULL }, { "3",
2604 "Set Deliver Report", NULL, Setting, NULL }, { "4",
2605 "Set CB Enable/Disable", NULL, Setting, NULL }, { "5",
2606 "Set SMS Parameters", NULL, Setting, NULL }, { "6",
2607 "Set Memory Status", NULL, Setting, NULL }, { "7",
2608 "Set Stored MsgStaus", NULL, Setting, NULL }, { "8",
2609 "Set Device Ready", NULL, Setting, NULL }, { "9",
2610 "Check Device Status", NULL, Setting, NULL }, { NULL, NULL , }, };
2612 static struct menu_data menu_sms_wcdma[] = { { "1", "Send Message", NULL,
2613 SendMessage, NULL }, { "2", "Read Message", NULL, ReadMessage, NULL }, {
2614 "3", "Delete Message", NULL, DeleteMessage, NULL }, { "4",
2615 "Delete All Message", NULL, NULL, NULL }, //DeleteAllMessage
2616 { "5", "Setting", menu_sms_setting, NULL, NULL }, { "6",
2617 "Getting SMS Information", menu_sms_getting, NULL, NULL }, {
2620 static struct menu_data menu_sms_cdma[] = { { "1", "Send Message", NULL,
2621 SendMessageCDMA, NULL }, { NULL, NULL , }, };
2623 struct menu_data menu_sms[] = { { "1", "WCDMA", menu_sms_wcdma, NULL, NULL }, {
2624 "2", "CDMA", menu_sms_cdma, NULL, NULL }, { NULL, NULL , }, };
2626 void register_sms_event (TapiHandle *handle)
2631 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_INCOM_MSG,
2632 on_noti_sms_incom_msg, NULL );
2633 if (ret != TAPI_API_SUCCESS) {
2634 msg("event register failed(%d)", ret);
2637 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_CB_INCOM_MSG,
2638 on_noti_sms_cb_incom_msg, NULL );
2639 if (ret != TAPI_API_SUCCESS) {
2640 msg("event register failed(%d)", ret);
2643 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_ETWS_INCOM_MSG,
2644 on_noti_sms_etws_incom_msg, NULL );
2645 if (ret != TAPI_API_SUCCESS) {
2646 msg("event register failed(%d)", ret);
2649 // ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_INCOM_EX_MSG, on_noti_sms_incom_ex_msg, NULL);
2650 // ret = tel_register_noti_event(handle, TAPI_NOTI_SMS_CB_INCOM_EX_MSG, on_noti_sms_cb_incom_ex_msg, NULL);
2652 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_MEMORY_STATUS,
2653 on_noti_sms_memory_status, NULL );
2654 if (ret != TAPI_API_SUCCESS) {
2655 msg("event register failed(%d)", ret);
2658 ret = tel_register_noti_event (handle, TAPI_NOTI_SMS_DEVICE_READY,
2659 on_noti_sms_ready_status, NULL );
2660 if (ret != TAPI_API_SUCCESS) {
2661 msg("event register failed(%d)", ret);