FreeCalypso > hg > fc-magnetite
comparison src/aci2/aci/cmh_smsr.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 26 Sep 2016 00:29:36 +0000 |
| parents | |
| children | e9e72ec7b318 |
comparison
equal
deleted
inserted
replaced
| 2:c41a534f33c6 | 3:93999a60b835 |
|---|---|
| 1 /* | |
| 2 +----------------------------------------------------------------------------- | |
| 3 | Project : GSM-PS (6147) | |
| 4 | Modul : CMH_SMSR | |
| 5 +----------------------------------------------------------------------------- | |
| 6 | Copyright 2002 Texas Instruments Berlin, AG | |
| 7 | All rights reserved. | |
| 8 | | |
| 9 | This file is confidential and a trade secret of Texas | |
| 10 | Instruments Berlin, AG | |
| 11 | The receipt of or possession of this file does not convey | |
| 12 | any rights to reproduce or disclose its contents or to | |
| 13 | manufacture, use, or sell anything it may describe, in | |
| 14 | whole, or in part, without the specific written consent of | |
| 15 | Texas Instruments Berlin, AG. | |
| 16 +----------------------------------------------------------------------------- | |
| 17 | Purpose : This module defines the functions which are responsible | |
| 18 | for the responses of the protocol stack adapter for | |
| 19 | the short message service. | |
| 20 +----------------------------------------------------------------------------- | |
| 21 */ | |
| 22 | |
| 23 #ifndef CMH_SMSR_C | |
| 24 #define CMH_SMSR_C | |
| 25 #endif | |
| 26 | |
| 27 #include "aci_all.h" | |
| 28 /*==== INCLUDES ===================================================*/ | |
| 29 #include "aci_cmh.h" | |
| 30 #include "ati_cmd.h" | |
| 31 #include "aci_cmd.h" | |
| 32 | |
| 33 #ifdef FAX_AND_DATA | |
| 34 #include "aci_fd.h" | |
| 35 #endif /* of #ifdef FAX_AND_DATA */ | |
| 36 | |
| 37 #ifdef UART | |
| 38 #include "dti.h" | |
| 39 #include "dti_conn_mng.h" | |
| 40 #endif | |
| 41 | |
| 42 #include "aci.h" | |
| 43 #include "aci_lst.h" | |
| 44 #include "aci_mem.h" | |
| 45 #include "psa.h" | |
| 46 #include "psa_sms.h" | |
| 47 #include "psa_mmi.h" | |
| 48 #include "psa_cc.h" | |
| 49 | |
| 50 #include "cmh.h" | |
| 51 #include "cmh_sms.h" | |
| 52 #include "psa_sim.h" | |
| 53 #include "cmh_sim.h" | |
| 54 #include "psa_util.h" | |
| 55 #include "Phb.h" | |
| 56 | |
| 57 #ifdef SIM_TOOLKIT | |
| 58 #include "psa_sat.h" | |
| 59 #include "cmh_sat.h" | |
| 60 #endif /* of SIM_TOOLKIT */ | |
| 61 | |
| 62 #if (defined (MFW) AND !defined (FF_MMI_RIV)) OR defined (_CONC_TESTING_) OR defined (SMI) | |
| 63 #include "conc_sms.h" | |
| 64 #endif /* ##if (defined (MFW) AND !defined (FF_MMI_RIV)) OR defined (_CONC_TESTING_) OR defined (SMI)*/ | |
| 65 | |
| 66 #ifdef _CONC_TESTING_ | |
| 67 #include "aci_mfw.h" | |
| 68 #endif | |
| 69 | |
| 70 | |
| 71 /*==== CONSTANTS ==================================================*/ | |
| 72 | |
| 73 /* TP-User-Data-Header-Indicator (TP-UDHI) */ | |
| 74 #define UDHI_MASK 0x40 | |
| 75 #define UDHI_PRESENT 0x40 | |
| 76 #define UDHI_ABSENT 0x00 | |
| 77 | |
| 78 /*==== TYPES ======================================================*/ | |
| 79 | |
| 80 /*==== EXPORT =====================================================*/ | |
| 81 | |
| 82 /*==== VARIABLES ==================================================*/ | |
| 83 | |
| 84 EXTERN T_ACI_LIST *set_prm_list; | |
| 85 | |
| 86 /*==== FUNCTIONS ==================================================*/ | |
| 87 LOCAL BOOL cmhSMS_cpySTtoSM(T_ACI_CMGL_SM *p_sm,T_MNSMS_READ_CNF * mnsms_read_cnf); | |
| 88 | |
| 89 /* help function for cmhSMS_SMRead to inform user in case of | |
| 90 * CCD decoding error with SMS | |
| 91 * for this case the T_ACI_SMS_STAT has been extended with a value | |
| 92 * of SMS_STAT_Invalid = -2 (e.g to tell BMI to emit "INVALID MESSAGE") */ | |
| 93 LOCAL void cmhSMS_invalidSMS_notification_to_user(T_MNSMS_READ_CNF * mnsms_read_cnf) | |
| 94 { | |
| 95 UBYTE idx = 0; | |
| 96 T_ACI_AT_CMD cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 97 T_ACI_CMD_SRC ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 98 | |
| 99 TRACE_FUNCTION ("cmhSMS_SMRead_invalidSMS_notification_to_user()"); | |
| 100 if (smsShrdPrm.pDecMsg->stat EQ SMS_STAT_Invalid) | |
| 101 { | |
| 102 switch( smsShrdPrm.smsEntStat.curCmd ) | |
| 103 { | |
| 104 case ( AT_CMD_CMGR ): | |
| 105 { | |
| 106 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 107 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 108 if (smsShrdPrm.rplyCB.cmgr NEQ NULL) | |
| 109 { | |
| 110 smsShrdPrm.rplyCB.cmgr( smsShrdPrm.pDecMsg, NULL ); | |
| 111 } | |
| 112 R_AT ( RAT_OK, ownBuf) ( cmdBuf ); | |
| 113 break; | |
| 114 } | |
| 115 case ( AT_CMD_CMGL ): | |
| 116 { | |
| 117 R_AT ( RAT_CMGL, smsShrdPrm.smsEntStat.entOwn ) ( smsShrdPrm.pDecMsg ); /* intermediate result */ | |
| 118 if (mnsms_read_cnf->rec_next NEQ SMS_RECORD_NOT_EXIST) | |
| 119 { | |
| 120 psaSMS_ReadReq ( smsShrdPrm.mem1, mnsms_read_cnf->rec_next, | |
| 121 smsShrdPrm.rdMode, cmglStat ); | |
| 122 } | |
| 123 break; | |
| 124 } | |
| 125 } | |
| 126 } | |
| 127 else | |
| 128 { | |
| 129 /* | |
| 130 * SMS decoding failed, but the status has not been set to SMS_STAT_Invalid | |
| 131 */ | |
| 132 TRACE_FUNCTION ("cmhSMS_SMRead_invalidSMS_notification_to_MFW(): [ERR] status not SMS_STAT_Invalid !"); | |
| 133 } | |
| 134 } | |
| 135 | |
| 136 | |
| 137 #ifdef SIM_TOOLKIT | |
| 138 LOCAL void cmhSMS_SATResult (T_ACI_SAT_TERM_RESP *p_resp_data, | |
| 139 USHORT cause) | |
| 140 { | |
| 141 if (GET_CAUSE_ORIGIN_ENTITY(cause) EQ SMSCP_ORIGINATING_ENTITY) | |
| 142 { /* CP-CAUSE */ | |
| 143 p_resp_data->add_content = GET_CAUSE_VALUE(cause) | 0x80; | |
| 144 psaSAT_SendTrmResp( RSLT_NTW_UNAB_PROC, p_resp_data ); | |
| 145 } | |
| 146 else | |
| 147 { /* RP-CAUSE or other */ | |
| 148 if (GET_CAUSE_ORIGIN_ENTITY(cause) EQ SMSRP_ORIGINATING_ENTITY) | |
| 149 p_resp_data->add_content = GET_CAUSE_VALUE(cause); | |
| 150 else | |
| 151 p_resp_data->add_content = ADD_NO_CAUSE; | |
| 152 psaSAT_SendTrmResp( RSLT_SMS_ERR, p_resp_data); | |
| 153 } | |
| 154 } | |
| 155 #endif /* #ifdef SIM_TOOLKIT */ | |
| 156 | |
| 157 /* | |
| 158 +-------------------------------------------------------------------+ | |
| 159 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 160 | STATE : code ROUTINE : cmhSMS_CBMIndication | | |
| 161 +-------------------------------------------------------------------+ | |
| 162 | |
| 163 PURPOSE : This function is used to notify the command handler of | |
| 164 the receiving of a cell broadcast message. | |
| 165 */ | |
| 166 GLOBAL SHORT cmhSMS_CBMIndication ( T_MMI_CBCH_IND * mmi_cbch_ind ) | |
| 167 { | |
| 168 USHORT sn; /* serial number */ | |
| 169 USHORT mid; /* message identifier */ | |
| 170 UBYTE dcs; /* data coding scheme */ | |
| 171 UBYTE page; /* actual page number */ | |
| 172 UBYTE pages; /* total number of pages */ | |
| 173 T_ACI_CBM_DATA msg; /* cell broadcast message data */ | |
| 174 UBYTE idx; | |
| 175 | |
| 176 TRACE_FUNCTION ("cmhSMS_CBMIndication ()"); | |
| 177 | |
| 178 /* | |
| 179 *----------------------------------------------------------------- | |
| 180 * process parameters for new message indication | |
| 181 *----------------------------------------------------------------- | |
| 182 */ | |
| 183 sn = ( ( SHORT )mmi_cbch_ind->cbch_msg[0] << 8 ) + | |
| 184 mmi_cbch_ind->cbch_msg[1]; | |
| 185 mid = ( ( SHORT )mmi_cbch_ind->cbch_msg[2] << 8 ) + | |
| 186 mmi_cbch_ind->cbch_msg[3]; | |
| 187 dcs = mmi_cbch_ind->cbch_msg[4]; | |
| 188 page = ( mmi_cbch_ind->cbch_msg[5] & 0xF0 ) >> 4; | |
| 189 pages = ( mmi_cbch_ind->cbch_msg[5] & 0x0F ); | |
| 190 | |
| 191 /* | |
| 192 *----------------------------------------------------------------- | |
| 193 * process message data, expanding from 7 to 8 bit | |
| 194 *----------------------------------------------------------------- | |
| 195 */ | |
| 196 cmhSMS_expdSmsCb ( dcs, | |
| 197 &mmi_cbch_ind->cbch_msg[CBCH_HEAD_LEN], | |
| 198 (UBYTE)(mmi_cbch_ind->cbch_len - CBCH_HEAD_LEN), | |
| 199 msg.data, &msg.len ); | |
| 200 | |
| 201 /* | |
| 202 *----------------------------------------------------------------- | |
| 203 * new message indication | |
| 204 *----------------------------------------------------------------- | |
| 205 */ | |
| 206 #ifdef FF_MMI_RIV | |
| 207 { | |
| 208 T_ACI_CMGF_MOD sms_input_mode = CMGF_MOD_NotPresent; | |
| 209 | |
| 210 qAT_PlusCMGF (CMD_SRC_LCL, &sms_input_mode); | |
| 211 if (sms_input_mode EQ CMGF_MOD_Pdu) | |
| 212 { | |
| 213 rAT_PlusCBMPdu (mmi_cbch_ind); | |
| 214 } | |
| 215 else | |
| 216 { | |
| 217 R_AT( RAT_CBM, CMD_SRC_LCL ) | |
| 218 ( sn, mid, dcs, page, pages, &msg ); | |
| 219 } | |
| 220 } | |
| 221 #else | |
| 222 R_AT( RAT_CBM, CMD_SRC_LCL ) | |
| 223 ( sn, mid, dcs, page, pages, &msg ); | |
| 224 #endif | |
| 225 | |
| 226 /* If the SMS shared params indicate no valid source interested in | |
| 227 * the SMS indications, the indication is buffered */ /* Issue 25033 */ | |
| 228 if( smsShrdPrm.smsSrcId EQ CMD_SRC_NONE ) | |
| 229 { | |
| 230 #ifdef DTI | |
| 231 T_CNMI_IND ind; | |
| 232 | |
| 233 memcpy (&ind.cbm, mmi_cbch_ind, sizeof(T_MMI_CBCH_IND)); | |
| 234 cmd_addCnmiNtry ( CNMI_CBM, &ind ); | |
| 235 #endif | |
| 236 } | |
| 237 else | |
| 238 { | |
| 239 #ifdef FF_ATI | |
| 240 /* tell any remote source */ | |
| 241 for( idx = CMD_SRC_LCL+1; idx < CMD_SRC_MAX; idx++ ) | |
| 242 { | |
| 243 if (IS_SRC_USED (idx)) | |
| 244 { | |
| 245 R_AT( RAT_CBM, idx ) ( mmi_cbch_ind ); | |
| 246 } | |
| 247 } | |
| 248 #endif | |
| 249 } | |
| 250 | |
| 251 return 0; | |
| 252 } | |
| 253 | |
| 254 | |
| 255 /* | |
| 256 +-------------------------------------------------------------------+ | |
| 257 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 258 | STATE : code ROUTINE : cmhSMS_SMSInitState | | |
| 259 +-------------------------------------------------------------------+ | |
| 260 | |
| 261 PURPOSE : This function is used to handle the | |
| 262 SMS_STATE_INITIALISING state. | |
| 263 */ | |
| 264 GLOBAL SHORT cmhSMS_SMSInitState ( T_MNSMS_MESSAGE_IND * mnsms_message_ind ) | |
| 265 { | |
| 266 #if defined SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 267 T_ACI_CMGL_SM sm; | |
| 268 T_ACI_SMS_STOR mem; /* holds message storage */ | |
| 269 UBYTE retCode = TRUE; | |
| 270 UBYTE msg_type; | |
| 271 #endif /* SMI OR defined MFW */ | |
| 272 | |
| 273 #ifdef _CONC_TESTING_ | |
| 274 #ifndef NTRACE | |
| 275 char trcBuf[80]; | |
| 276 char *writeP; | |
| 277 int count; | |
| 278 USHORT offset; | |
| 279 | |
| 280 TRACE_EVENT_P1("initstate:rec_num: %d", mnsms_message_ind->rec_num); | |
| 281 TRACE_EVENT_P1("initstate:status: %d", mnsms_message_ind->status); | |
| 282 offset = mnsms_message_ind->sms_sdu.o_buf>>3; | |
| 283 writeP = trcBuf; | |
| 284 for (count=offset; count<offset+20; count++) | |
| 285 { | |
| 286 writeP += sprintf (writeP, " %02X", mnsms_message_ind->sms_sdu.buf[count]); | |
| 287 } | |
| 288 TRACE_EVENT("buf: "); | |
| 289 *writeP = '\0'; | |
| 290 TRACE_EVENT(trcBuf); | |
| 291 | |
| 292 writeP = trcBuf; | |
| 293 for (; count<offset+40; count++) | |
| 294 { | |
| 295 writeP += sprintf (writeP, " %02X", mnsms_message_ind->sms_sdu.buf[count]); | |
| 296 } | |
| 297 *writeP = '\0'; | |
| 298 TRACE_EVENT(trcBuf); | |
| 299 #endif | |
| 300 #endif | |
| 301 | |
| 302 | |
| 303 TRACE_FUNCTION ("cmhSMS_SMSInitState()"); | |
| 304 | |
| 305 | |
| 306 switch (mnsms_message_ind->mem_type) | |
| 307 { | |
| 308 case MEM_ME: | |
| 309 if (mnsms_message_ind->rec_num NEQ SMS_RECORD_NOT_EXIST) | |
| 310 { | |
| 311 smsShrdPrm.aci_sms_parameter.meUsed++; | |
| 312 } | |
| 313 if (smsShrdPrm.aci_sms_parameter.meTotal EQ 0) | |
| 314 { | |
| 315 smsShrdPrm.aci_sms_parameter.meTotal = mnsms_message_ind->rec_max; | |
| 316 } | |
| 317 break; | |
| 318 case MEM_SM: | |
| 319 if (mnsms_message_ind->rec_num NEQ SMS_RECORD_NOT_EXIST) | |
| 320 { | |
| 321 smsShrdPrm.aci_sms_parameter.simUsed++; | |
| 322 TRACE_EVENT_P1("simUsed: %d", smsShrdPrm.aci_sms_parameter.simUsed); | |
| 323 } | |
| 324 if (smsShrdPrm.aci_sms_parameter.simTotal EQ 0) | |
| 325 { | |
| 326 smsShrdPrm.aci_sms_parameter.simTotal = mnsms_message_ind->rec_max; | |
| 327 TRACE_EVENT_P1("simTotal: %d", smsShrdPrm.aci_sms_parameter.simTotal); | |
| 328 } | |
| 329 break; | |
| 330 default: | |
| 331 TRACE_EVENT("wrong memtype"); | |
| 332 } | |
| 333 | |
| 334 #if defined SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 335 cmhSMS_getMemCmh ( mnsms_message_ind->mem_type, &mem ); | |
| 336 cmhSMS_SMSQueryType (&mnsms_message_ind->sms_sdu , &msg_type); | |
| 337 memset(&sm,0,sizeof(T_ACI_CMGL_SM) ); | |
| 338 if(msg_type NEQ TP_MTI_SMS_STATUS_REP) | |
| 339 { | |
| 340 retCode = cmhSMS_cpyMsgInd ( &sm, mnsms_message_ind); | |
| 341 } | |
| 342 if (retCode EQ FALSE) | |
| 343 { | |
| 344 TRACE_EVENT("cmhSMS_SMSInitState():[ERR] decoding of SMS"); | |
| 345 if (sm.stat NEQ SMS_STAT_Invalid) | |
| 346 { | |
| 347 TRACE_EVENT("cmhSMS_SMSInitState():[ERR] SMS decoding failed, but status not SMS_STAT_Invalid"); | |
| 348 } | |
| 349 } | |
| 350 | |
| 351 #if defined FF_MMI_RIV | |
| 352 /* in case of RIV MMI: check if SMBS is enabled for sending also PDU data */ | |
| 353 if(smsShrdPrm.perccmgf_smbs_mode EQ PERC_SMBS_MOD_ENABLE) | |
| 354 { | |
| 355 rAT_PlusCMTPdu (mnsms_message_ind); | |
| 356 } | |
| 357 #endif /* FF_MMI_RIV */ | |
| 358 | |
| 359 R_AT( RAT_CMTI, CMD_SRC_LCL ) | |
| 360 (mem, sm.msg_ref, &sm); | |
| 361 #endif /* defined SMI OR defined MFW OR defined FF_MMI_RIV */ | |
| 362 | |
| 363 return 0; | |
| 364 } | |
| 365 | |
| 366 | |
| 367 /* | |
| 368 +-------------------------------------------------------------------+ | |
| 369 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 370 | STATE : code ROUTINE : cmhSMS_SMSDelCnf | | |
| 371 +-------------------------------------------------------------------+ | |
| 372 | |
| 373 PURPOSE : This function is used to handle MNSMS_DELETE_CNF primitive. | |
| 374 */ | |
| 375 GLOBAL SHORT cmhSMS_SMSDelCnf ( T_MNSMS_DELETE_CNF * mnsms_delete_cnf ) | |
| 376 { | |
| 377 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 378 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 379 T_ACI_CMD_SRC srcId; /* Hold the request Source ID */ | |
| 380 | |
| 381 #ifdef _CONC_TESTING_ | |
| 382 | |
| 383 T_CONC_INIT_RETURN ret; | |
| 384 | |
| 385 #endif | |
| 386 | |
| 387 TRACE_FUNCTION ("cmhSMS_SMSDelCnf()"); | |
| 388 | |
| 389 /*-------------------------------------------------------------------------* | |
| 390 * In R99 one more flag is added in CMGD command which is used to delete * | |
| 391 * multiple messages of the same status ( READ, UNSENT, SENT etc ). * | |
| 392 * For this purpose the setting of global variables are done, once * | |
| 393 * the it is confirmed that all the messages of the same status are * | |
| 394 * deleted. * | |
| 395 *-------------------------------------------------------------------------*/ | |
| 396 | |
| 397 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 398 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 399 srcId = smsShrdPrm.smsEntStat.entOwn; | |
| 400 | |
| 401 #if defined SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 402 SET_OWNBUF_CONC; | |
| 403 #endif /*#if defined SMI OR defined MFW*/ | |
| 404 | |
| 405 | |
| 406 if(smsShrdPrm.status > CMGD_DEL_INDEX) | |
| 407 { | |
| 408 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 409 } | |
| 410 | |
| 411 if (IS_CAUSE_INVALID(mnsms_delete_cnf->cause)) /* no error */ | |
| 412 { | |
| 413 /* Check if the mnsms_delete_req for deleting messages of particular | |
| 414 status returned indicating no messages of requested status. Note | |
| 415 that in this case also we return OK to the user */ | |
| 416 if(mnsms_delete_cnf->rec_num NEQ 0) | |
| 417 { | |
| 418 switch (mnsms_delete_cnf->mem_type) | |
| 419 { | |
| 420 case MEM_ME: | |
| 421 smsShrdPrm.aci_sms_parameter.meUsed--; | |
| 422 break; | |
| 423 case MEM_SM: | |
| 424 smsShrdPrm.aci_sms_parameter.simUsed--; | |
| 425 break; | |
| 426 default: | |
| 427 TRACE_EVENT("wrong memtype"); | |
| 428 return AT_FAIL; | |
| 429 } | |
| 430 } | |
| 431 /*-----------------------------------------------------------------------* | |
| 432 * The below code is the new code added on 07/08/2003 due to the new * | |
| 433 * flag for CMGD command as mentioned in R99. This flag handles the * | |
| 434 * deletion of multiple messages. The deletion of concatination is * | |
| 435 * handled with different way other than handling normal indexed * | |
| 436 * messages. The deletion of normal concatination messages is done as * | |
| 437 * in the exiting code. But deletion of concatination message is handled * | |
| 438 * in the different way when delete flag is greater than ZERO. If the * | |
| 439 * delete flag in CMGD command is greater than ZERO, then there is no * | |
| 440 * concatination check is done. After receiving the response from SMS * | |
| 441 * with the deleted messages number, then we will do the concatination * | |
| 442 * check. If CONC_NEEDED flag is set, then we will clear the * | |
| 443 * concatinated list from the ACI. If CONC_NOT_NEEDED is set then check * | |
| 444 * for the next record values, if it is greater than ZERO then send one * | |
| 445 * more request for SMS to delete that message and repeat the above * | |
| 446 * process untill ACI recive's the next record values as ZERO. * | |
| 447 *-----------------------------------------------------------------------*/ | |
| 448 | |
| 449 if( smsShrdPrm.status > CMGD_DEL_INDEX AND | |
| 450 mnsms_delete_cnf->rec_num NEQ 0) | |
| 451 { | |
| 452 #ifdef _CONC_TESTING_ | |
| 453 /*-----------------------------------------------------------------* | |
| 454 * Check for the concatination * | |
| 455 *-----------------------------------------------------------------*/ | |
| 456 | |
| 457 ret= concSMS_initDeleteFromMem (srcId, mnsms_delete_cnf->rec_num); | |
| 458 | |
| 459 if( ret EQ CONC_NEEDED ) | |
| 460 { | |
| 461 SET_CONC; | |
| 462 concSMS_DeleteConcList(); | |
| 463 } | |
| 464 #endif | |
| 465 if ( mnsms_delete_cnf->delete_rec_next NEQ 0 ) | |
| 466 { | |
| 467 cmhSMS_SendDelete_Req (mnsms_delete_cnf->delete_rec_next, | |
| 468 smsShrdPrm.status); | |
| 469 return 0; | |
| 470 } | |
| 471 } | |
| 472 /*-----------------------------------------------------------------------* | |
| 473 * Reset the command context * | |
| 474 *-----------------------------------------------------------------------*/ | |
| 475 | |
| 476 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 477 smsShrdPrm.smsEntStat.entOwn = CMD_SRC_NONE; | |
| 478 smsShrdPrm.owner = OWN_NONE; | |
| 479 | |
| 480 /*-----------------------------------------------------------------------* | |
| 481 * The below code is used to handle the existing way where there is no * | |
| 482 * delete falg is set ( i.e. delete flag == 0 ) * | |
| 483 *-----------------------------------------------------------------------*/ | |
| 484 | |
| 485 #if defined SMI OR defined MFW OR defined FF_MMI_RIV | |
| 486 if (ownBuf EQ CMD_SRC_LCL) | |
| 487 { | |
| 488 if( smsShrdPrm.status EQ CMGD_DEL_INDEX ) | |
| 489 { | |
| 490 #ifdef _CONC_TESTING_ | |
| 491 if (!ISSET_CONC) | |
| 492 { | |
| 493 #endif /* _CONC_TESTING_ */ | |
| 494 TRACE_EVENT("you just erased a normal SMS !"); | |
| 495 if(smsShrdPrm.rplyCB.cmgd NEQ NULL) | |
| 496 { | |
| 497 smsShrdPrm.rplyCB.cmgd( ); | |
| 498 } | |
| 499 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 500 #ifdef _CONC_TESTING_ | |
| 501 } | |
| 502 else | |
| 503 { | |
| 504 /*-----------------------------------------------------------------* | |
| 505 * Looks just about the same BUT: ISSET_CONC could be unsent * | |
| 506 * in RAT_CMGD, so let this after checking ISSET_CONC * | |
| 507 *-----------------------------------------------------------------*/ | |
| 508 | |
| 509 if(smsShrdPrm.rplyCB.cmgd NEQ NULL) | |
| 510 { | |
| 511 smsShrdPrm.rplyCB.cmgd( ); | |
| 512 } | |
| 513 } | |
| 514 #endif /* _CONC_TESTING_ */ | |
| 515 } | |
| 516 else | |
| 517 { | |
| 518 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 519 if(smsShrdPrm.rplyCB.cmgd NEQ NULL) | |
| 520 { | |
| 521 smsShrdPrm.rplyCB.cmgd( ); | |
| 522 } | |
| 523 | |
| 524 #if defined FF_MMI_RIV | |
| 525 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 526 #else | |
| 527 /* GPF-MMI */ | |
| 528 #ifdef _CONC_TESTING_ | |
| 529 if (!ISSET_CONC) | |
| 530 #endif /* _CONC_TESTING_ */ | |
| 531 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 532 } | |
| 533 #endif | |
| 534 } | |
| 535 else /* if (ownBuf EQ CMD_SRC_LCL) */ | |
| 536 #endif /*defined MFW OR defined FF_MMI_RIV*/ | |
| 537 { | |
| 538 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 539 } | |
| 540 } | |
| 541 else | |
| 542 { | |
| 543 /*-----------------------------------------------------------------------* | |
| 544 * Reset the command context * | |
| 545 *-----------------------------------------------------------------------*/ | |
| 546 | |
| 547 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 548 smsShrdPrm.smsEntStat.entOwn = CMD_SRC_NONE; | |
| 549 smsShrdPrm.owner = OWN_NONE; | |
| 550 | |
| 551 if (smsShrdPrm.errorCB NEQ NULL) | |
| 552 { | |
| 553 smsShrdPrm.errorCB | |
| 554 ( | |
| 555 cmdBuf, | |
| 556 cmhSMS_GetCmsFromSms(mnsms_delete_cnf->cause), | |
| 557 NULL | |
| 558 ); | |
| 559 } | |
| 560 else | |
| 561 { | |
| 562 R_AT ( RAT_CMS, ownBuf ) ( cmdBuf, cmhSMS_GetCmsFromSms(mnsms_delete_cnf->cause), NULL ); | |
| 563 } | |
| 564 } | |
| 565 /* Reset status flag to CMGD_DEL_INDEX = 0 */ | |
| 566 smsShrdPrm.status = CMGD_DEL_INDEX; | |
| 567 return 0; | |
| 568 } | |
| 569 | |
| 570 | |
| 571 /* | |
| 572 +-------------------------------------------------------------------+ | |
| 573 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 574 | STATE : code ROUTINE : cmhSMS_SMSStoCnf | | |
| 575 +-------------------------------------------------------------------+ | |
| 576 | |
| 577 PURPOSE : This function is used to handle MNSMS_STORE_CNF primitive. | |
| 578 */ | |
| 579 GLOBAL SHORT cmhSMS_SMSStoCnf ( T_MNSMS_STORE_CNF * mnsms_store_cnf ) | |
| 580 { | |
| 581 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 582 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 583 | |
| 584 TRACE_FUNCTION ("cmhSMS_SMSStoCnf()"); | |
| 585 | |
| 586 /* | |
| 587 *----------------------------------------------------------------- | |
| 588 * reset the command context | |
| 589 *----------------------------------------------------------------- | |
| 590 */ | |
| 591 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 592 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 593 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 594 | |
| 595 #ifdef _CONC_TESTING_ | |
| 596 /* this is only for testing */ | |
| 597 SET_OWNBUF_CONC; | |
| 598 #endif | |
| 599 | |
| 600 smsShrdPrm.smsEntStat.entOwn = CMD_SRC_NONE; | |
| 601 smsShrdPrm.owner = OWN_NONE; | |
| 602 | |
| 603 /* Check for current cmd is CMGMDU */ | |
| 604 if ( cmdBuf EQ AT_CMD_P_CMGMDU ) | |
| 605 { | |
| 606 if (IS_CAUSE_INVALID(mnsms_store_cnf->cause)) | |
| 607 { | |
| 608 #if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 609 if (ownBuf EQ CMD_SRC_LCL) | |
| 610 { | |
| 611 if(smsShrdPrm.rplyCB.cmgmdu NEQ NULL) | |
| 612 { | |
| 613 smsShrdPrm.rplyCB.cmgmdu(); | |
| 614 } | |
| 615 } | |
| 616 else | |
| 617 #endif /*#if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ */ | |
| 618 { | |
| 619 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 620 } | |
| 621 } | |
| 622 else | |
| 623 { | |
| 624 if ( ownBuf NEQ CMD_SRC_LCL ) | |
| 625 R_AT ( RAT_CMS, ownBuf ) | |
| 626 ( | |
| 627 cmdBuf, | |
| 628 cmhSMS_GetCmsFromSms(mnsms_store_cnf->cause), | |
| 629 NULL | |
| 630 ); | |
| 631 return -1; | |
| 632 } | |
| 633 } | |
| 634 else if (IS_CAUSE_INVALID(mnsms_store_cnf->cause)) | |
| 635 { | |
| 636 switch (mnsms_store_cnf->mem_type) | |
| 637 { | |
| 638 case MEM_ME: | |
| 639 smsShrdPrm.aci_sms_parameter.meUsed++; | |
| 640 break; | |
| 641 case MEM_SM: | |
| 642 smsShrdPrm.aci_sms_parameter.simUsed++; | |
| 643 break; | |
| 644 default: | |
| 645 TRACE_EVENT("incorrect memtype"); | |
| 646 return AT_FAIL; | |
| 647 } | |
| 648 #ifdef FF_ATI | |
| 649 /* "internal storage" handling -> storing from CNMI-buf to SIM/MS */ | |
| 650 if( smsShrdPrm.uiInternalSmsStorage NEQ CMD_SRC_NONE ) | |
| 651 { | |
| 652 if(mnsms_store_cnf->cause NEQ SMS_NO_ERROR) | |
| 653 { | |
| 654 TRACE_EVENT("cmhSMS_SMSStoCnf() : error at internal SMS storaging"); | |
| 655 cmd_clearCnmiBuf(); /* clear CNMI buffer */ | |
| 656 smsShrdPrm.uiInternalSmsStorage = CMD_SRC_NONE; | |
| 657 return -1; | |
| 658 } | |
| 659 | |
| 660 /* storing was succesful -> clear the stored msg. in CNMI buf */ | |
| 661 cmd_clearFirstCnmiMessage(); | |
| 662 | |
| 663 /* try with the next msg. in CNMI-buf */ | |
| 664 if( cmd_storeNextCnmiBufMsgToSim() NEQ TRUE ) /* do nothing if no more Msg's in CNMI buffer */ | |
| 665 { /* no more messagees could be sent */ | |
| 666 smsShrdPrm.uiInternalSmsStorage = CMD_SRC_NONE; | |
| 667 } | |
| 668 return 0; /* returns immediately if internal storage is running */ | |
| 669 } | |
| 670 #endif /* FF_ATI */ | |
| 671 #if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 672 if (ownBuf EQ CMD_SRC_LCL) | |
| 673 { | |
| 674 if(smsShrdPrm.rplyCB.cmgw NEQ NULL) | |
| 675 { | |
| 676 smsShrdPrm.rplyCB.cmgw( mnsms_store_cnf->rec_num, 1 ); | |
| 677 } | |
| 678 #if defined FF_MMI_RIV | |
| 679 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 680 #else | |
| 681 /* GPF-MMI */ | |
| 682 if (!ISSET_CONC) | |
| 683 { | |
| 684 TRACE_EVENT("you just wrote a normal SMS !"); | |
| 685 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 686 } | |
| 687 #endif /*#if !defined FF_MMI_RIV*/ | |
| 688 } | |
| 689 else | |
| 690 #endif /*#if defined MFW OR defined FF_MMI_RIV*/ | |
| 691 { | |
| 692 R_AT ( RAT_CMGW, ownBuf ) ( mnsms_store_cnf->rec_num ); | |
| 693 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 694 /* inform BMI */ | |
| 695 cmh_logRslt ( ownBuf, RAT_OK, AT_CMD_CMGW, mnsms_store_cnf->rec_num, -1, -1 ); | |
| 696 } | |
| 697 } | |
| 698 else | |
| 699 { | |
| 700 if( smsShrdPrm.uiInternalSmsStorage NEQ CMD_SRC_NONE ) | |
| 701 { | |
| 702 smsShrdPrm.uiInternalSmsStorage = CMD_SRC_NONE; | |
| 703 return 0; | |
| 704 } | |
| 705 | |
| 706 if (ownBuf EQ CMD_SRC_LCL) | |
| 707 { | |
| 708 if (smsShrdPrm.errorCB NEQ NULL) | |
| 709 { | |
| 710 smsShrdPrm.errorCB | |
| 711 ( | |
| 712 cmdBuf, | |
| 713 cmhSMS_GetCmsFromSms(mnsms_store_cnf->cause), | |
| 714 NULL | |
| 715 ); | |
| 716 } | |
| 717 } | |
| 718 else | |
| 719 { | |
| 720 R_AT ( RAT_CMS, ownBuf ) | |
| 721 ( | |
| 722 cmdBuf, | |
| 723 cmhSMS_GetCmsFromSms(mnsms_store_cnf->cause), | |
| 724 NULL | |
| 725 ); | |
| 726 } | |
| 727 } | |
| 728 return 0; | |
| 729 } | |
| 730 | |
| 731 | |
| 732 | |
| 733 /* | |
| 734 +-------------------------------------------------------------------+ | |
| 735 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 736 | STATE : code ROUTINE : cmhSMS_SMSSbmCnf | | |
| 737 +-------------------------------------------------------------------+ | |
| 738 | |
| 739 PURPOSE : This function is used to handle MNSMS_SUBMIT_CNF primitive. | |
| 740 */ | |
| 741 GLOBAL SHORT cmhSMS_SMSSbmCnf ( T_MNSMS_SUBMIT_CNF * mnsms_submit_cnf ) | |
| 742 { | |
| 743 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 744 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 745 #ifdef SIM_TOOLKIT | |
| 746 T_ACI_SAT_TERM_RESP resp_data; | |
| 747 #endif | |
| 748 | |
| 749 | |
| 750 #ifdef _CONC_TESTING_ | |
| 751 #ifndef NTRACE | |
| 752 char trcBuf[80]; | |
| 753 char *writeP; | |
| 754 int count; | |
| 755 USHORT offset; | |
| 756 | |
| 757 TRACE_EVENT_P1("cause: %d", mnsms_submit_cnf->cause); | |
| 758 offset = mnsms_submit_cnf->sms_sdu.o_buf>>3; | |
| 759 writeP = trcBuf; | |
| 760 for (count=offset; count<offset+20; count++) | |
| 761 { | |
| 762 writeP += sprintf (writeP, " %02X", mnsms_submit_cnf->sms_sdu.buf[count]); | |
| 763 } | |
| 764 TRACE_EVENT("buf: "); | |
| 765 *writeP = '\0'; | |
| 766 TRACE_EVENT(trcBuf); | |
| 767 | |
| 768 writeP = trcBuf; | |
| 769 for (; count<offset+40; count++) | |
| 770 { | |
| 771 writeP += sprintf (writeP, " %02X", mnsms_submit_cnf->sms_sdu.buf[count]); | |
| 772 } | |
| 773 *writeP = '\0'; | |
| 774 TRACE_EVENT(trcBuf); | |
| 775 #endif | |
| 776 #endif | |
| 777 | |
| 778 TRACE_FUNCTION ("cmhSMS_SMSSbmCnf()"); | |
| 779 | |
| 780 /* | |
| 781 *----------------------------------------------------------------- | |
| 782 * reset the command context | |
| 783 *----------------------------------------------------------------- | |
| 784 */ | |
| 785 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 786 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 787 | |
| 788 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 789 | |
| 790 #ifdef _CONC_TESTING_ | |
| 791 /* this is only for testing */ | |
| 792 SET_OWNBUF_CONC; | |
| 793 #endif | |
| 794 smsShrdPrm.smsEntStat.entOwn = CMD_SRC_NONE; | |
| 795 smsShrdPrm.owner = OWN_NONE; | |
| 796 | |
| 797 #ifdef SIM_TOOLKIT | |
| 798 psaSAT_InitTrmResp( &resp_data ); | |
| 799 #endif | |
| 800 | |
| 801 if (IS_CAUSE_INVALID(mnsms_submit_cnf->cause)) | |
| 802 { | |
| 803 smsShrdPrm.aci_sms_parameter.snd_msg_ref = mnsms_submit_cnf->tp_mr; | |
| 804 switch (cmdBuf) | |
| 805 { | |
| 806 case( AT_CMD_CMSS ): | |
| 807 #if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 808 if (ownBuf EQ CMD_SRC_LCL) | |
| 809 { | |
| 810 if(smsShrdPrm.rplyCB.cmss NEQ NULL) | |
| 811 { | |
| 812 smsShrdPrm.rplyCB.cmss( mnsms_submit_cnf->tp_mr, 1 ); | |
| 813 } | |
| 814 #if defined FF_MMI_RIV | |
| 815 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 816 #else | |
| 817 if (!ISSET_CONC) | |
| 818 { | |
| 819 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 820 } | |
| 821 #endif /* FF_MMI_RIV */ | |
| 822 } | |
| 823 else /* if (ownBuf EQ CMD_SRC_LCL) */ | |
| 824 #endif /*#if defined MFW OR defined FF_MMI_RIV*/ | |
| 825 { | |
| 826 R_AT ( RAT_CMSS, ownBuf ) ( mnsms_submit_cnf ); | |
| 827 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 828 /* inform BMI */ | |
| 829 cmh_logRslt ( ownBuf, RAT_OK, AT_CMD_CMSS, mnsms_submit_cnf->rec_num, -1, -1 ); | |
| 830 } | |
| 831 break; | |
| 832 case( AT_CMD_CMGS ): | |
| 833 #if defined (SIM_TOOLKIT) | |
| 834 if (ownBuf EQ OWN_SAT) | |
| 835 { | |
| 836 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
| 837 break; | |
| 838 } | |
| 839 #endif | |
| 840 if (mnsms_submit_cnf->rec_num NEQ SMS_RECORD_NOT_EXIST) | |
| 841 { | |
| 842 switch (mnsms_submit_cnf->mem_type) | |
| 843 { | |
| 844 case MEM_ME: | |
| 845 smsShrdPrm.aci_sms_parameter.meUsed++; | |
| 846 break; | |
| 847 case MEM_SM: | |
| 848 smsShrdPrm.aci_sms_parameter.simUsed++; | |
| 849 break; | |
| 850 default: | |
| 851 TRACE_EVENT("incorrect memtype"); | |
| 852 return AT_FAIL; | |
| 853 } | |
| 854 } | |
| 855 #if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 856 if (ownBuf EQ CMD_SRC_LCL) | |
| 857 { | |
| 858 if(smsShrdPrm.rplyCB.cmgs NEQ NULL) | |
| 859 { | |
| 860 smsShrdPrm.rplyCB.cmgs( mnsms_submit_cnf->tp_mr, 1 ); | |
| 861 } | |
| 862 #if defined FF_MMI_RIV | |
| 863 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 864 #else | |
| 865 if (!ISSET_CONC) | |
| 866 { | |
| 867 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 868 } | |
| 869 #endif /* FF_MMI_RIV */ | |
| 870 } | |
| 871 else /* if (ownBuf EQ CMD_SRC_LCL) */ | |
| 872 #endif /*#if defined MFW OR defined FF_MMI_RIV*/ | |
| 873 { | |
| 874 R_AT ( RAT_CMGS, ownBuf ) ( mnsms_submit_cnf ); | |
| 875 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 876 /* inform BMI */ | |
| 877 cmh_logRslt ( ownBuf, RAT_OK, AT_CMD_CMGS, mnsms_submit_cnf->rec_num, -1, -1 ); | |
| 878 } | |
| 879 } /* switch */ | |
| 880 } | |
| 881 else /* if (mnsms_submit_cnf->rslt_type EQ SMS_RT_NON) */ | |
| 882 { | |
| 883 #if defined (SIM_TOOLKIT) | |
| 884 if (ownBuf EQ OWN_SAT) | |
| 885 { | |
| 886 cmhSMS_SATResult (&resp_data, mnsms_submit_cnf->cause); | |
| 887 } | |
| 888 #endif | |
| 889 /* MSMSMS */ | |
| 890 if (ownBuf EQ CMD_SRC_LCL) | |
| 891 { | |
| 892 if (smsShrdPrm.errorCB NEQ NULL) | |
| 893 { | |
| 894 smsShrdPrm.errorCB | |
| 895 ( | |
| 896 cmdBuf, | |
| 897 cmhSMS_GetCmsFromSms(mnsms_submit_cnf->cause), | |
| 898 NULL | |
| 899 ); | |
| 900 } | |
| 901 } | |
| 902 else | |
| 903 { | |
| 904 R_AT ( RAT_CMS, ownBuf ) | |
| 905 ( | |
| 906 cmdBuf, | |
| 907 cmhSMS_GetCmsFromSms(mnsms_submit_cnf->cause), | |
| 908 NULL | |
| 909 ); | |
| 910 } | |
| 911 } | |
| 912 return 0; | |
| 913 } | |
| 914 | |
| 915 /* | |
| 916 +-------------------------------------------------------------------+ | |
| 917 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 918 | STATE : code ROUTINE : cmhSMS_SMSCmdCnf | | |
| 919 +-------------------------------------------------------------------+ | |
| 920 | |
| 921 PURPOSE : This function is used to handle MNSMS_COMMAND_CNF primitive. | |
| 922 */ | |
| 923 GLOBAL SHORT cmhSMS_SMSCmdCnf ( T_MNSMS_COMMAND_CNF * mnsms_command_cnf ) | |
| 924 { | |
| 925 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 926 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 927 #ifdef SIM_TOOLKIT | |
| 928 T_ACI_SAT_TERM_RESP resp_data; | |
| 929 psaSAT_InitTrmResp( &resp_data ); | |
| 930 #endif | |
| 931 | |
| 932 TRACE_FUNCTION ("cmhSMS_SMSCmdCnf()"); | |
| 933 | |
| 934 | |
| 935 /* | |
| 936 *----------------------------------------------------------------- | |
| 937 * reset the command context | |
| 938 *----------------------------------------------------------------- | |
| 939 */ | |
| 940 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 941 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 942 | |
| 943 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 944 | |
| 945 smsShrdPrm.smsEntStat.entOwn = CMD_SRC_NONE; | |
| 946 smsShrdPrm.owner = OWN_NONE; | |
| 947 | |
| 948 if (IS_CAUSE_INVALID(mnsms_command_cnf->cause)) | |
| 949 { | |
| 950 #ifdef _CONC_TESTING_ | |
| 951 /* this is only for testing */ | |
| 952 SET_OWNBUF_CONC; | |
| 953 #endif | |
| 954 | |
| 955 #if defined (SIM_TOOLKIT) | |
| 956 if (ownBuf EQ OWN_SAT) | |
| 957 { | |
| 958 psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data ); | |
| 959 } | |
| 960 #endif | |
| 961 #if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 962 if (ownBuf EQ CMD_SRC_LCL) | |
| 963 { | |
| 964 if(smsShrdPrm.rplyCB.cmgc NEQ NULL) | |
| 965 { | |
| 966 smsShrdPrm.rplyCB.cmgc( mnsms_command_cnf->tp_mr ); | |
| 967 } | |
| 968 #if defined FF_MMI_RIV | |
| 969 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 970 #else | |
| 971 if (!ISSET_CONC) | |
| 972 { | |
| 973 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 974 } | |
| 975 #endif /*!defined FF_MMI_RIV*/ | |
| 976 } | |
| 977 else /* if (ownBuf EQ CMD_SRC_LCL) */ | |
| 978 #endif /*defined MFW OR defined FF_MMI_RIV*/ | |
| 979 { | |
| 980 R_AT ( RAT_CMGC, ownBuf ) ( mnsms_command_cnf ); | |
| 981 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 982 /* inform BMI */ | |
| 983 /* This does not make much sense, but nice to have it for future requests */ | |
| 984 /* cmh_logRslt ( ownBuf, RAT_OK, AT_CMD_CMGC, -1, -1, -1 ); */ | |
| 985 } | |
| 986 | |
| 987 } | |
| 988 else | |
| 989 { | |
| 990 #if defined (SIM_TOOLKIT) | |
| 991 if (ownBuf EQ OWN_SAT) | |
| 992 { | |
| 993 cmhSMS_SATResult (&resp_data, mnsms_command_cnf->cause); | |
| 994 } | |
| 995 #endif | |
| 996 | |
| 997 R_AT ( RAT_CMS, ownBuf ) | |
| 998 ( | |
| 999 cmdBuf, | |
| 1000 cmhSMS_GetCmsFromSms(mnsms_command_cnf->cause), | |
| 1001 NULL | |
| 1002 ); | |
| 1003 } | |
| 1004 return 0; | |
| 1005 } | |
| 1006 | |
| 1007 | |
| 1008 /* | |
| 1009 +-------------------------------------------------------------------+ | |
| 1010 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1011 | STATE : code ROUTINE : cmhSMS_SMSErrorInd | | |
| 1012 +-------------------------------------------------------------------+ | |
| 1013 | |
| 1014 PURPOSE : This function is used to handle MNSMS_ERROR_IND primitive. | |
| 1015 */ | |
| 1016 GLOBAL SHORT cmhSMS_SMSErrorInd ( T_MNSMS_ERROR_IND * mnsms_error_ind ) | |
| 1017 { | |
| 1018 T_ACI_MM_CIND_VAL_TYPE sIndValues; | |
| 1019 int i; | |
| 1020 | |
| 1021 TRACE_FUNCTION ("cmhSMS_SMSErrorInd()"); | |
| 1022 | |
| 1023 TRACE_EVENT_P1("MNSMS_ERROR_IND: 0x%4.4X", (int)mnsms_error_ind->cause); | |
| 1024 | |
| 1025 /* send CMS error code for SMS memory full */ | |
| 1026 if(mnsms_error_ind->cause == SMS_CAUSE_MEM_FULL) | |
| 1027 { | |
| 1028 char *sa; | |
| 1029 ACI_MALLOC(sa,KEY + BYTE_LTH); | |
| 1030 sprintf(sa,"+CMS ERROR: %d",CMS_ERR_MemFull); | |
| 1031 io_sendMessage(3, sa, ATI_NORMAL_OUTPUT); | |
| 1032 ACI_MFREE(sa); | |
| 1033 rCI_PlusCMS ( 0, CMS_ERR_MemFull, NULL ); | |
| 1034 } | |
| 1035 | |
| 1036 if( (mnsms_error_ind->cause != SMS_CAUSE_MEM_FULL) && | |
| 1037 (mnsms_error_ind->cause != SMS_CAUSE_MEM_AVAIL) ) | |
| 1038 { | |
| 1039 smsShrdPrm.cnma_ack_expected = FALSE; | |
| 1040 cmhSMS_resetMtDsCnmiParam(); | |
| 1041 } | |
| 1042 else | |
| 1043 { /* process the SMS memory full/avail indication */ | |
| 1044 sIndValues.sCindSmsFullParam = (mnsms_error_ind->cause EQ SMS_CAUSE_MEM_AVAIL) | |
| 1045 ? CIND_SMSFULL_INDICATOR_MEMAVAIL | |
| 1046 : CIND_SMSFULL_INDICATOR_MEMFULL; | |
| 1047 sIndValues.sCindSignalParam = CIND_SIGNAL_INDICATOR_INVALID; | |
| 1048 | |
| 1049 for( i = CMD_SRC_LCL; i < CMD_SRC_MAX; i++) | |
| 1050 { | |
| 1051 if( ((cmhPrm[i].mmCmdPrm.sIndicationParam.sMmCINDSettings.sCindSmsFullParam EQ CIND_SMSFULL_INDICATOR_MEMFULL) AND | |
| 1052 (cmhPrm[i].mmCmdPrm.sIndicationParam.sMmCMERSettings.sCmerIndParam EQ CMER_INDICATOR_2)) OR | |
| 1053 ((cmhPrm[i].mmCmdPrm.sIndicationParam.sMmCINDSettings.sCindSmsFullParam <= CIND_SMSFULL_INDICATOR_MEMAVAIL) AND | |
| 1054 (cmhPrm[i].mmCmdPrm.sIndicationParam.sMmCMERSettings.sCmerIndParam EQ CMER_INDICATOR_1)) ) | |
| 1055 { /* process the service of +CIEV */ | |
| 1056 TRACE_EVENT("send +CIEV (SMS-full/avail)"); | |
| 1057 R_AT (RAT_CIEV, i) ( sIndValues, cmhPrm[i].mmCmdPrm.sIndicationParam.sMmCMERSettings ); | |
| 1058 } | |
| 1059 } | |
| 1060 } | |
| 1061 return 0; | |
| 1062 } | |
| 1063 | |
| 1064 /* | |
| 1065 +-------------------------------------------------------------------+ | |
| 1066 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1067 | STATE : code ROUTINE : cmhSMS_SMSDeliver | | |
| 1068 +-------------------------------------------------------------------+ | |
| 1069 | |
| 1070 PURPOSE : This function is used to notify the command handler of | |
| 1071 the receiving of a SMS-DELIVER. | |
| 1072 */ | |
| 1073 #ifndef NTRACE | |
| 1074 LOCAL void trace_SMSDeliver ( T_MNSMS_MESSAGE_IND * mnsms_message_ind ) | |
| 1075 { | |
| 1076 #ifdef _CONC_TESTING_ | |
| 1077 | |
| 1078 char trcBuf[80]; | |
| 1079 char *writeP; | |
| 1080 int count; | |
| 1081 USHORT offset; | |
| 1082 | |
| 1083 TRACE_FUNCTION ("trace_SMSDeliver"); | |
| 1084 | |
| 1085 TRACE_EVENT_P1("cmt:bitoffset:%d", mnsms_message_ind->sms_sdu.o_buf); | |
| 1086 TRACE_EVENT_P1("cmt:lenght:%d", mnsms_message_ind->sms_sdu.l_buf); | |
| 1087 offset = mnsms_message_ind->sms_sdu.o_buf>>3; | |
| 1088 writeP = trcBuf; | |
| 1089 for (count=offset; count<offset+20; count++) | |
| 1090 { | |
| 1091 writeP += sprintf (writeP, " %02X", mnsms_message_ind->sms_sdu.buf[count]); | |
| 1092 } | |
| 1093 TRACE_EVENT("buf: "); | |
| 1094 *writeP = '\0'; | |
| 1095 TRACE_EVENT(trcBuf); | |
| 1096 | |
| 1097 writeP = trcBuf; | |
| 1098 for (; count<offset+40; count++) | |
| 1099 { | |
| 1100 writeP += sprintf (writeP, " %02X", mnsms_message_ind->sms_sdu.buf[count]); | |
| 1101 } | |
| 1102 *writeP = '\0'; | |
| 1103 TRACE_EVENT(trcBuf); | |
| 1104 #endif | |
| 1105 } | |
| 1106 #endif | |
| 1107 | |
| 1108 #if defined SMI OR defined MFW OR defined FF_MMI_RIV | |
| 1109 LOCAL void rAT_SMS_Deliver(T_MNSMS_MESSAGE_IND * mnsms_message_ind, T_ACI_CMGL_SM *p_sm) | |
| 1110 { | |
| 1111 #ifdef FF_MMI_RIV | |
| 1112 T_ACI_CMGF_MOD sms_input_mode = CMGF_MOD_NotPresent; | |
| 1113 #endif /* FF_MMI_RIV */ | |
| 1114 | |
| 1115 TRACE_FUNCTION ("rAT_SMS_Deliver"); | |
| 1116 | |
| 1117 #ifdef FF_MMI_RIV | |
| 1118 if(smsShrdPrm.perccmgf_smbs_mode EQ PERC_SMBS_MOD_ENABLE) | |
| 1119 { | |
| 1120 /*send both formats*/ | |
| 1121 rAT_PlusCMTPdu (mnsms_message_ind); | |
| 1122 R_AT( RAT_CMT, CMD_SRC_LCL ) (p_sm); | |
| 1123 return; | |
| 1124 } | |
| 1125 | |
| 1126 /* else: no SMBS enabled, CMGF mode decides */ | |
| 1127 qAT_PlusCMGF (CMD_SRC_LCL, &sms_input_mode); | |
| 1128 if (sms_input_mode EQ CMGF_MOD_Pdu) | |
| 1129 { | |
| 1130 rAT_PlusCMTPdu (mnsms_message_ind); | |
| 1131 } | |
| 1132 else | |
| 1133 { | |
| 1134 R_AT( RAT_CMT, CMD_SRC_LCL ) (p_sm); | |
| 1135 } | |
| 1136 return; | |
| 1137 #endif /* FF_MMI_RIV */ | |
| 1138 | |
| 1139 /* if GPF MMI call usual callback */ | |
| 1140 R_AT( RAT_CMT, CMD_SRC_LCL ) (p_sm); | |
| 1141 } | |
| 1142 #endif /* SMI OR defined MFW OR defined FF_MMI_RIV */ | |
| 1143 | |
| 1144 GLOBAL SHORT cmhSMS_SMSDeliver ( T_MNSMS_MESSAGE_IND * mnsms_message_ind ) | |
| 1145 { | |
| 1146 UBYTE idx; | |
| 1147 #if defined SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 1148 T_ACI_CMGL_SM *p_sm; | |
| 1149 #endif /* SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_*/ | |
| 1150 | |
| 1151 TRACE_FUNCTION ("cmhSMS_SMSDeliver"); | |
| 1152 | |
| 1153 #ifndef NTRACE | |
| 1154 trace_SMSDeliver ( mnsms_message_ind ); | |
| 1155 #endif | |
| 1156 | |
| 1157 if( smsShrdPrm.CNMImt EQ 0 ) | |
| 1158 { | |
| 1159 TRACE_EVENT("cmhSMS_SMSDeliver():[ERR] <mt>==0 -> SMS will not be routed "); | |
| 1160 return 0; | |
| 1161 } | |
| 1162 | |
| 1163 #if defined SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 1164 ACI_MALLOC(smsShrdPrm.pDecMsg, sizeof(T_ACI_CMGL_SM) ); | |
| 1165 p_sm = smsShrdPrm.pDecMsg; | |
| 1166 if (cmhSMS_cpyMsgInd ( p_sm, mnsms_message_ind) EQ FALSE) | |
| 1167 { | |
| 1168 TRACE_EVENT("cmhSMS_SMSDeliver():[ERR] decoding of SMS"); | |
| 1169 if (p_sm->stat NEQ SMS_STAT_Invalid) | |
| 1170 { | |
| 1171 TRACE_EVENT("cmhSMS_SMSDeliver():[ERR] SMS decoding failed, but status not SMS_STAT_Invalid"); | |
| 1172 } | |
| 1173 } | |
| 1174 #endif /* SMI OR defined MFW OR defined FF_MMI_RIV */ | |
| 1175 | |
| 1176 | |
| 1177 if (smsShrdPrm.CSMSservice EQ CSMS_SERV_GsmPh2Plus) | |
| 1178 smsShrdPrm.cnma_ack_expected = TRUE; | |
| 1179 | |
| 1180 /* | |
| 1181 *----------------------------------------------------------------- | |
| 1182 * new message indication | |
| 1183 *----------------------------------------------------------------- | |
| 1184 */ | |
| 1185 | |
| 1186 /* inform LOCAL MMI of new message */ | |
| 1187 #if defined SMI OR defined MFW OR defined FF_MMI_RIV | |
| 1188 rAT_SMS_Deliver(mnsms_message_ind, p_sm); | |
| 1189 #endif /* SMI OR defined MFW OR defined FF_MMI_RIV */ | |
| 1190 | |
| 1191 /* If the SMS shared params indicate no valid source interested in | |
| 1192 * the SMS indications, the indication is buffered */ /* Issue 25033 */ | |
| 1193 if( smsShrdPrm.smsSrcId EQ CMD_SRC_NONE ) | |
| 1194 { | |
| 1195 T_CNMI_IND ind; | |
| 1196 | |
| 1197 TRACE_EVENT("cmhSMS_SMSDeliver(): No registered source for "); | |
| 1198 memcpy ( &ind.cmt, mnsms_message_ind, sizeof ( T_MNSMS_MESSAGE_IND) ); | |
| 1199 #ifdef DTI | |
| 1200 cmd_addCnmiNtry ( CNMI_CMT, &ind ); | |
| 1201 #endif | |
| 1202 if ( smsShrdPrm.cnma_ack_expected EQ TRUE ) | |
| 1203 { /* the acknowledge must be send automatically, because terminal is busy */ | |
| 1204 PALLOC (mnsms_ack_res, MNSMS_ACK_RES); | |
| 1205 | |
| 1206 TRACE_EVENT("rCI_PlusCMT(): send 'automatic' acknowledge (Phase2+ mode and buffer)"); | |
| 1207 | |
| 1208 mnsms_ack_res->resp = SMS_RP_ACK; | |
| 1209 mnsms_ack_res->sms_sdu.o_buf = 0; | |
| 1210 mnsms_ack_res->sms_sdu.l_buf = 0; | |
| 1211 | |
| 1212 PSENDX (SMS, mnsms_ack_res); | |
| 1213 | |
| 1214 smsShrdPrm.cnma_ack_expected = FALSE; | |
| 1215 } | |
| 1216 } | |
| 1217 else | |
| 1218 { | |
| 1219 /* tell any remote source */ | |
| 1220 for( idx = CMD_SRC_LCL+1; idx < CMD_SRC_MAX; idx++ ) | |
| 1221 { | |
| 1222 #if defined _SIMULATION_ AND defined _CONC_TESTING_ | |
| 1223 /* don't display "+CMT: ..." in simulation if conc testing */ | |
| 1224 if (!concShrdPrm.concTesting) | |
| 1225 #endif | |
| 1226 { | |
| 1227 R_AT( RAT_CMT, idx ) ( mnsms_message_ind ); | |
| 1228 } | |
| 1229 } | |
| 1230 } | |
| 1231 | |
| 1232 if (smsShrdPrm.pDecMsg) | |
| 1233 { | |
| 1234 ACI_MFREE(smsShrdPrm.pDecMsg); | |
| 1235 smsShrdPrm.pDecMsg = NULL; | |
| 1236 } | |
| 1237 | |
| 1238 return 0; | |
| 1239 } | |
| 1240 | |
| 1241 | |
| 1242 /* | |
| 1243 +-------------------------------------------------------------------+ | |
| 1244 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1245 | STATE : code ROUTINE : cmhSMS_SMSMemory | | |
| 1246 +-------------------------------------------------------------------+ | |
| 1247 | |
| 1248 PURPOSE : This function is used to notify the command handler of | |
| 1249 an incoming SMS written to preferred message storage. | |
| 1250 */ | |
| 1251 GLOBAL SHORT cmhSMS_SMSMemory ( T_MNSMS_MESSAGE_IND * mnsms_message_ind) | |
| 1252 { | |
| 1253 USHORT idx; /* holds command source id */ | |
| 1254 T_ACI_SMS_STOR mem; /* holds message storage */ | |
| 1255 T_ACI_CMGL_SM sm; | |
| 1256 | |
| 1257 #ifdef _CONC_TESTING_ | |
| 1258 #ifndef NTRACE | |
| 1259 char trcBuf[80]; | |
| 1260 char *writeP; | |
| 1261 int count; | |
| 1262 USHORT offset; | |
| 1263 | |
| 1264 TRACE_EVENT_P1("cmti:rec_num: %d", mnsms_message_ind->rec_num); | |
| 1265 TRACE_EVENT_P1("cmti:status: %d", mnsms_message_ind->status); | |
| 1266 offset = mnsms_message_ind->sms_sdu.o_buf>>3; | |
| 1267 writeP = trcBuf; | |
| 1268 for (count=offset; count<offset+20; count++) | |
| 1269 { | |
| 1270 writeP += sprintf (writeP, " %02X", mnsms_message_ind->sms_sdu.buf[count]); | |
| 1271 } | |
| 1272 TRACE_EVENT("buf: "); | |
| 1273 *writeP = '\0'; | |
| 1274 TRACE_EVENT(trcBuf); | |
| 1275 | |
| 1276 writeP = trcBuf; | |
| 1277 for (; count<offset+40; count++) | |
| 1278 { | |
| 1279 writeP += sprintf (writeP, " %02X", mnsms_message_ind->sms_sdu.buf[count]); | |
| 1280 } | |
| 1281 *writeP = '\0'; | |
| 1282 TRACE_EVENT(trcBuf); | |
| 1283 #endif | |
| 1284 #endif | |
| 1285 | |
| 1286 TRACE_FUNCTION ("cmhSMS_SMSMemory ()"); | |
| 1287 | |
| 1288 cmhSMS_getMemCmh ( mnsms_message_ind->mem_type, &mem ); | |
| 1289 | |
| 1290 switch (mnsms_message_ind->mem_type) | |
| 1291 { | |
| 1292 case MEM_ME: | |
| 1293 smsShrdPrm.aci_sms_parameter.meUsed++; | |
| 1294 break; | |
| 1295 case MEM_SM: | |
| 1296 smsShrdPrm.aci_sms_parameter.simUsed++; | |
| 1297 break; | |
| 1298 default: | |
| 1299 TRACE_EVENT("wrong memtype"); | |
| 1300 return AT_FAIL; | |
| 1301 } | |
| 1302 | |
| 1303 #if defined SMI OR defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 1304 if (cmhSMS_cpyMsgInd ( &sm, mnsms_message_ind ) EQ FALSE) | |
| 1305 { | |
| 1306 TRACE_EVENT("cmhSMS_SMSMemory ():[ERR] decoding of SMS"); | |
| 1307 if (sm.stat NEQ SMS_STAT_Invalid) | |
| 1308 { | |
| 1309 TRACE_EVENT("cmhSMS_SMSMemory():[ERR] SMS decoding failed, but status not SMS_STAT_Invalid"); | |
| 1310 } | |
| 1311 } | |
| 1312 #endif | |
| 1313 | |
| 1314 | |
| 1315 /* | |
| 1316 *----------------------------------------------------------------- | |
| 1317 * new message indication | |
| 1318 *----------------------------------------------------------------- | |
| 1319 */ | |
| 1320 | |
| 1321 | |
| 1322 #if defined FF_MMI_RIV | |
| 1323 /* in case of RIV MMI: check if SMBS is enabled for sending also PDU data */ | |
| 1324 if(smsShrdPrm.perccmgf_smbs_mode EQ PERC_SMBS_MOD_ENABLE) | |
| 1325 { | |
| 1326 rAT_PlusCMTPdu (mnsms_message_ind); | |
| 1327 } | |
| 1328 #endif /* FF_MMI_RIV */ | |
| 1329 | |
| 1330 R_AT( RAT_CMTI, CMD_SRC_LCL ) (mem, sm.msg_ref, &sm); | |
| 1331 | |
| 1332 /* If the SMS shared params indicate no valid source interested in | |
| 1333 * the SMS indications, the indication is buffered */ /* Issue 25033 */ | |
| 1334 if( smsShrdPrm.smsSrcId EQ CMD_SRC_NONE ) | |
| 1335 { | |
| 1336 T_CNMI_IND ind; | |
| 1337 | |
| 1338 ind.cmti.mem = mem; | |
| 1339 ind.cmti.index = mnsms_message_ind->rec_num; | |
| 1340 #ifdef DTI | |
| 1341 cmd_addCnmiNtry ( CNMI_CMTI, &ind ); | |
| 1342 #endif | |
| 1343 } | |
| 1344 else | |
| 1345 { | |
| 1346 for( idx = CMD_SRC_LCL+1; idx < CMD_SRC_MAX; idx++ ) | |
| 1347 { | |
| 1348 #if defined _SIMULATION_ AND defined _CONC_TESTING_ | |
| 1349 /* don't display "+CMT: ..." in simulation if conc testing */ | |
| 1350 if (!concShrdPrm.concTesting) | |
| 1351 #endif | |
| 1352 { | |
| 1353 /* don't need the decoded message for Command Interpreter */ | |
| 1354 R_AT( RAT_CMTI, idx ) ( mem, mnsms_message_ind->rec_num ); | |
| 1355 } | |
| 1356 } | |
| 1357 } | |
| 1358 | |
| 1359 return AT_CMPL; | |
| 1360 } | |
| 1361 | |
| 1362 /* | |
| 1363 +-------------------------------------------------------------------+ | |
| 1364 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1365 | STATE : code ROUTINE : cmhSMS_SMSStatRpt | | |
| 1366 +-------------------------------------------------------------------+ | |
| 1367 | |
| 1368 PURPOSE : This function is used to notify the command handler of | |
| 1369 the receiving of a SMS-STATUS-REPORT. | |
| 1370 */ | |
| 1371 GLOBAL SHORT cmhSMS_SMSStatRpt ( T_MNSMS_STATUS_IND * mnsms_status_ind ) | |
| 1372 { | |
| 1373 USHORT idx; /* holds command source id */ | |
| 1374 T_ACI_CDS_SM* p_st; | |
| 1375 | |
| 1376 TRACE_FUNCTION ("cmhSMS_SMSStatRpt ()"); | |
| 1377 | |
| 1378 | |
| 1379 #if defined SMI OR defined MFW OR defined FF_MMI_RIV | |
| 1380 ACI_MALLOC(smsShrdPrm.pDecMsg, sizeof(T_ACI_CDS_SM) ); | |
| 1381 p_st = (T_ACI_CDS_SM*)smsShrdPrm.pDecMsg; | |
| 1382 cmhSMS_cpyStatInd ( p_st, mnsms_status_ind); | |
| 1383 #endif | |
| 1384 | |
| 1385 | |
| 1386 if (smsShrdPrm.CSMSservice EQ CSMS_SERV_GsmPh2Plus) | |
| 1387 smsShrdPrm.cnma_ack_expected = TRUE; | |
| 1388 | |
| 1389 /* | |
| 1390 *----------------------------------------------------------------- | |
| 1391 * new message indication | |
| 1392 *----------------------------------------------------------------- | |
| 1393 */ | |
| 1394 { | |
| 1395 T_ACI_CMGF_MOD sms_input_mode = CMGF_MOD_NotPresent; | |
| 1396 | |
| 1397 /* If the SMS shared params indicate no valid source interested in | |
| 1398 * the SMS indications, the indication is buffered */ /* Issue 25033 */ | |
| 1399 if( smsShrdPrm.smsSrcId EQ CMD_SRC_NONE ) | |
| 1400 { | |
| 1401 T_CNMI_IND ind; | |
| 1402 | |
| 1403 memcpy ( &ind.cds, mnsms_status_ind, sizeof ( T_MNSMS_STATUS_IND) ); | |
| 1404 #ifdef DTI | |
| 1405 cmd_addCnmiNtry ( CNMI_CDS, &ind ); | |
| 1406 #endif | |
| 1407 } | |
| 1408 | |
| 1409 for( idx = 0; idx < CMD_SRC_MAX; idx++ ) | |
| 1410 { | |
| 1411 if (idx EQ CMD_SRC_LCL) | |
| 1412 { | |
| 1413 #ifdef FF_MMI_RIV | |
| 1414 qAT_PlusCMGF (CMD_SRC_LCL, &sms_input_mode); | |
| 1415 if (sms_input_mode EQ CMGF_MOD_Pdu) | |
| 1416 { | |
| 1417 rAT_PlusCDSPdu (mnsms_status_ind); | |
| 1418 } | |
| 1419 else | |
| 1420 { | |
| 1421 R_AT( RAT_CDS, idx ) ( p_st ); | |
| 1422 } | |
| 1423 #else | |
| 1424 R_AT( RAT_CDS, idx ) ( p_st ); | |
| 1425 #endif | |
| 1426 } | |
| 1427 else | |
| 1428 { | |
| 1429 R_AT( RAT_CDS, idx ) ( mnsms_status_ind ); | |
| 1430 } | |
| 1431 | |
| 1432 } | |
| 1433 } | |
| 1434 | |
| 1435 if (smsShrdPrm.pDecMsg) | |
| 1436 { | |
| 1437 ACI_MFREE(smsShrdPrm.pDecMsg); | |
| 1438 smsShrdPrm.pDecMsg = NULL; | |
| 1439 } | |
| 1440 | |
| 1441 return 0; | |
| 1442 } | |
| 1443 | |
| 1444 | |
| 1445 /* | |
| 1446 +-------------------------------------------------------------------+ | |
| 1447 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1448 | STATE : code ROUTINE : cmhSMS_cpyLstData | | |
| 1449 +-------------------------------------------------------------------+ | |
| 1450 | |
| 1451 PURPOSE : This function is used to copy the data read from memory. | |
| 1452 It sends a notification using the callback mechanism of | |
| 1453 ACI if necessary. | |
| 1454 */ | |
| 1455 GLOBAL void cmhSMS_cpyLstData ( T_ACI_AT_CMD curCmd, | |
| 1456 T_ACI_CMD_SRC entOwn, | |
| 1457 T_MNSMS_READ_CNF * mnsms_read_cnf ) | |
| 1458 { | |
| 1459 SHORT nextIdx; /* index of next short message */ | |
| 1460 | |
| 1461 TRACE_FUNCTION ("cmhSMS_cpyLstData ()"); | |
| 1462 | |
| 1463 nextIdx = mnsms_read_cnf->rec_next; | |
| 1464 | |
| 1465 if ( entOwn EQ CMD_SRC_LCL) | |
| 1466 { | |
| 1467 #ifdef FF_MMI_RIV | |
| 1468 { | |
| 1469 T_ACI_CMGF_MOD sms_input_mode = CMGF_MOD_NotPresent; | |
| 1470 | |
| 1471 qAT_PlusCMGF (CMD_SRC_LCL, &sms_input_mode); | |
| 1472 if (sms_input_mode EQ CMGF_MOD_Pdu ) | |
| 1473 { | |
| 1474 if (curCmd EQ AT_CMD_CMGL) | |
| 1475 { | |
| 1476 rAT_PlusCMGLPdu (mnsms_read_cnf); | |
| 1477 } | |
| 1478 else if (curCmd EQ AT_CMD_P_CMGL) | |
| 1479 { | |
| 1480 rAT_PercentCMGLPdu (mnsms_read_cnf); | |
| 1481 } | |
| 1482 } | |
| 1483 else if (curCmd EQ AT_CMD_CMGL) | |
| 1484 { | |
| 1485 R_AT ( RAT_CMGL, entOwn ) ( smsShrdPrm.pDecMsg ); | |
| 1486 } | |
| 1487 else if (curCmd EQ AT_CMD_P_CMGL) | |
| 1488 { | |
| 1489 R_AT ( RAT_P_CMGL, entOwn ) ( smsShrdPrm.pDecMsg ); | |
| 1490 } | |
| 1491 } | |
| 1492 #else | |
| 1493 if (curCmd EQ AT_CMD_CMGL) | |
| 1494 { | |
| 1495 R_AT ( RAT_CMGL, entOwn ) ( smsShrdPrm.pDecMsg ); | |
| 1496 } | |
| 1497 else if (curCmd EQ AT_CMD_P_CMGL) | |
| 1498 { | |
| 1499 R_AT ( RAT_P_CMGL, entOwn ) ( smsShrdPrm.pDecMsg ); | |
| 1500 } | |
| 1501 | |
| 1502 #endif | |
| 1503 } | |
| 1504 else if (curCmd EQ AT_CMD_CMGL) | |
| 1505 { | |
| 1506 R_AT ( RAT_CMGL, entOwn ) ( mnsms_read_cnf ); | |
| 1507 /* inform BMI */ | |
| 1508 cmh_logRslt ( entOwn, RAT_OK, AT_CMD_CMGL, mnsms_read_cnf->rec_num, -1, -1 ); | |
| 1509 } | |
| 1510 else if (curCmd EQ AT_CMD_P_CMGL) | |
| 1511 { | |
| 1512 /* the message shall not be displayed for ReadMode as Status Change */ | |
| 1513 if (smsShrdPrm.rdMode NEQ SMS_READ_StatusChange) | |
| 1514 { | |
| 1515 R_AT ( RAT_P_CMGL, entOwn ) ( mnsms_read_cnf ); | |
| 1516 /* inform BMI */ | |
| 1517 cmh_logRslt ( entOwn, RAT_OK, AT_CMD_P_CMGL, mnsms_read_cnf->rec_num, -1, -1 ); | |
| 1518 } | |
| 1519 } | |
| 1520 | |
| 1521 if (nextIdx NEQ SMS_RECORD_NOT_EXIST) | |
| 1522 { | |
| 1523 /* | |
| 1524 *----------------------------------------------------------- | |
| 1525 * request the next list elements of given cmglStat state | |
| 1526 *----------------------------------------------------------- | |
| 1527 */ | |
| 1528 psaSMS_ReadReq ( smsShrdPrm.mem1, nextIdx, | |
| 1529 smsShrdPrm.rdMode, cmglStat ); | |
| 1530 } | |
| 1531 else | |
| 1532 { | |
| 1533 /* | |
| 1534 *----------------------------------------------------------- | |
| 1535 * no more messages are available | |
| 1536 *----------------------------------------------------------- | |
| 1537 */ | |
| 1538 | |
| 1539 /* reset the command context */ | |
| 1540 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1541 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1542 | |
| 1543 R_AT ( RAT_OK, entOwn ) ( curCmd ); | |
| 1544 } | |
| 1545 } | |
| 1546 | |
| 1547 | |
| 1548 /* | |
| 1549 +-------------------------------------------------------------------+ | |
| 1550 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1551 | STATE : code ROUTINE : cmhSMS_SMReadCMSS | | |
| 1552 +-------------------------------------------------------------------+ | |
| 1553 | |
| 1554 PURPOSE : This function processes the mnsms_read_cnf which was | |
| 1555 triggered by +CMSS. | |
| 1556 */ | |
| 1557 GLOBAL void cmhSMS_SMReadCMSS ( T_MNSMS_READ_CNF * mnsms_read_cnf) | |
| 1558 { | |
| 1559 T_SMS_SET_PRM * pSMSSetPrm; /* points to SMS parameter set */ | |
| 1560 UBYTE srcId; | |
| 1561 UBYTE fo; | |
| 1562 T_ACI_CMGL_SM *p_sm; | |
| 1563 T_tp_da da_addr; | |
| 1564 T_ACI_RETURN ret=AT_CMPL; | |
| 1565 UBYTE modify=SMS_MODIFY_NON; | |
| 1566 | |
| 1567 #ifdef _CONC_TESTING_ | |
| 1568 char trcBuf[80]; | |
| 1569 char *writeP; | |
| 1570 int count; | |
| 1571 #endif | |
| 1572 | |
| 1573 TRACE_FUNCTION ("cmhSMS_SMReadCMSS ()"); | |
| 1574 | |
| 1575 | |
| 1576 srcId = smsShrdPrm.smsEntStat.entOwn; | |
| 1577 pSMSSetPrm = smsShrdPrm.pSetPrm[srcId]; | |
| 1578 | |
| 1579 if (smsShrdPrm.pDecMsg EQ NULL) | |
| 1580 { | |
| 1581 ACI_MALLOC(smsShrdPrm.pDecMsg, sizeof(T_ACI_CMGL_SM) ); | |
| 1582 p_sm = smsShrdPrm.pDecMsg; | |
| 1583 /* decode message */ | |
| 1584 cmhSMS_cpyReadCnf ( p_sm, mnsms_read_cnf ); | |
| 1585 } | |
| 1586 else | |
| 1587 p_sm = smsShrdPrm.pDecMsg; | |
| 1588 | |
| 1589 memset (&da_addr, 0, sizeof(T_tp_da)); | |
| 1590 | |
| 1591 /* start: check FDN if enabled */ | |
| 1592 if (pb_get_fdn_mode () EQ FDN_ENABLE AND | |
| 1593 pb_get_fdn_classtype() EQ CLASS_VceDatFaxSms ) | |
| 1594 { | |
| 1595 | |
| 1596 TRACE_EVENT_P1("cmhSMS_SMReadCMSS: FDN check: %s", p_sm->adress ); | |
| 1597 | |
| 1598 if (pb_check_fdn (0, (const UBYTE*) p_sm->adress) EQ PHB_OK) | |
| 1599 { | |
| 1600 TRACE_EVENT("cmhSMS_SMReadCMSS: Found match in FDN!"); | |
| 1601 } | |
| 1602 else | |
| 1603 { | |
| 1604 TRACE_EVENT("cmhSMS_SMReadCMSS: No match in FDN found, SMS rejected!"); | |
| 1605 /* error notification */ | |
| 1606 R_AT( RAT_CMS, smsShrdPrm.smsEntStat.entOwn ) | |
| 1607 ( smsShrdPrm.smsEntStat.curCmd, CMS_ERR_OpNotAllowed, NULL ); | |
| 1608 /* release context */ | |
| 1609 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1610 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = CMD_SRC_NONE; | |
| 1611 return; | |
| 1612 } | |
| 1613 } | |
| 1614 /* end: check FDN if enabled */ | |
| 1615 | |
| 1616 /* | |
| 1617 * ACI-SPR-17004: set RFU bits of status to 0 if present since these | |
| 1618 * should be ignored in a GSM session (GSM 11.11 section 9.3) | |
| 1619 */ | |
| 1620 cmhSMS_removeStatusRFUBits( &mnsms_read_cnf->status ); | |
| 1621 | |
| 1622 ACI_MALLOC(smsShrdPrm.tpdu.tp_submit, sizeof(T_TP_SUBMIT)); | |
| 1623 | |
| 1624 /* SMS-SUBMIT received */ | |
| 1625 if ((mnsms_read_cnf->status EQ SMS_RECORD_STO_UNSENT) OR | |
| 1626 (mnsms_read_cnf->status EQ SMS_RECORD_STO_SENT) OR | |
| 1627 (mnsms_read_cnf->status EQ SMS_RECORD_STAT_UNRCVD) OR | |
| 1628 (mnsms_read_cnf->status EQ SMS_RECORD_STAT_UNSTRD) OR | |
| 1629 (mnsms_read_cnf->status EQ SMS_RECORD_STAT_STRD) ) | |
| 1630 { | |
| 1631 | |
| 1632 /* destination address from stored message */ | |
| 1633 if (p_sm->adress[0] NEQ '\0') | |
| 1634 { | |
| 1635 cmhSMS_getAdrBcd ( da_addr.num, &da_addr.c_num, MAX_SMS_ADDR_DIG, p_sm->adress); | |
| 1636 da_addr.ton = p_sm->toa.ton; | |
| 1637 da_addr.npi = p_sm->toa.npi; | |
| 1638 da_addr.digits = da_addr.c_num; | |
| 1639 } | |
| 1640 | |
| 1641 /* service center address from shared parameter */ | |
| 1642 if (pSMSSetPrm->sca.c_num NEQ 0) | |
| 1643 { | |
| 1644 memcpy (&smsShrdPrm.tpdu.sc_addr, &pSMSSetPrm->sca, sizeof(T_rp_addr)); | |
| 1645 modify |= SMS_MODIFY_SCA; | |
| 1646 | |
| 1647 } | |
| 1648 | |
| 1649 /* ACI-SPR-22528.The memory is allocated for smsShrdPrm.tpdu.tp_submit | |
| 1650 only when it is necessary*/ | |
| 1651 | |
| 1652 | |
| 1653 cmhSMS_fillTpSubmit (smsShrdPrm.tpdu.tp_submit, | |
| 1654 srcId, | |
| 1655 0, /* fo */ | |
| 1656 0, | |
| 1657 &da_addr, | |
| 1658 NULL, | |
| 1659 0, | |
| 1660 NULL ); | |
| 1661 } | |
| 1662 else | |
| 1663 { | |
| 1664 /* SMS-DELIVER received */ | |
| 1665 | |
| 1666 T_ACI_SM_DATA packedData; | |
| 1667 UBYTE byte_offset=0; | |
| 1668 | |
| 1669 /* service center address from shared parameter */ | |
| 1670 if (pSMSSetPrm->sca.c_num NEQ 0) | |
| 1671 { | |
| 1672 memcpy (&smsShrdPrm.tpdu.sc_addr, &pSMSSetPrm->sca, sizeof(T_rp_addr)); | |
| 1673 } | |
| 1674 else | |
| 1675 { | |
| 1676 if (p_sm->sca[0] NEQ '\0') | |
| 1677 { | |
| 1678 cmhSMS_getAdrBcd( smsShrdPrm.tpdu.sc_addr.num, | |
| 1679 &smsShrdPrm.tpdu.sc_addr.c_num, | |
| 1680 MAX_SMS_ADDR_DIG, p_sm->sca); | |
| 1681 smsShrdPrm.tpdu.sc_addr.ton = p_sm->tosca.ton; | |
| 1682 smsShrdPrm.tpdu.sc_addr.npi = p_sm->tosca.npi; | |
| 1683 smsShrdPrm.tpdu.sc_addr.v_ton = TRUE; | |
| 1684 smsShrdPrm.tpdu.sc_addr.v_npi = TRUE; | |
| 1685 } | |
| 1686 } | |
| 1687 | |
| 1688 fo = (pSMSSetPrm->msgType & (~TP_MTI_MASK)) | TP_MTI_SMS_SUBMIT; | |
| 1689 | |
| 1690 if (p_sm->udh.len) | |
| 1691 byte_offset = p_sm->udh.len+1; | |
| 1692 | |
| 1693 /* ACI-SPR-22528.The memory is allocated for smsShrdPrm.tpdu.tp_submit | |
| 1694 only when it is necessary*/ | |
| 1695 | |
| 1696 cmhSMS_rdcSmsPp ( byte_offset, | |
| 1697 p_sm -> dcs, | |
| 1698 ( UBYTE * ) p_sm->data.data, ( UBYTE ) p_sm->data.len, | |
| 1699 packedData.data, &packedData.len); | |
| 1700 | |
| 1701 if (p_sm->adress[0] NEQ '\0') | |
| 1702 { | |
| 1703 cmhSMS_getAdrBcd ( da_addr.num, &da_addr.c_num, MAX_SMS_ADDR_DIG, p_sm->adress); | |
| 1704 da_addr.ton = p_sm->toa.ton; | |
| 1705 da_addr.npi = p_sm->toa.npi; | |
| 1706 da_addr.digits = da_addr.c_num; | |
| 1707 } | |
| 1708 | |
| 1709 cmhSMS_fillTpSubmit (smsShrdPrm.tpdu.tp_submit, | |
| 1710 srcId, | |
| 1711 fo, | |
| 1712 0, | |
| 1713 &da_addr, | |
| 1714 &packedData, | |
| 1715 p_sm->data.len, | |
| 1716 &p_sm->udh ); | |
| 1717 | |
| 1718 modify = SMS_MODIFY_ALL; | |
| 1719 } | |
| 1720 | |
| 1721 { | |
| 1722 PALLOC (mnsms_submit_req, MNSMS_SUBMIT_REQ); | |
| 1723 mnsms_submit_req->rec_num = mnsms_read_cnf->rec_num; | |
| 1724 mnsms_submit_req->mem_type = smsShrdPrm.mem2; | |
| 1725 mnsms_submit_req->condx = SMS_CONDX_OVR_ANY; | |
| 1726 mnsms_submit_req->modify = modify; | |
| 1727 | |
| 1728 #ifdef SIM_TOOLKIT | |
| 1729 if (psaSIM_ChkSIMSrvSup( SRV_MOSMCtrlSIM )) | |
| 1730 { | |
| 1731 if (simShrdPrm.setPrm[srcId].sat_cc_mode EQ SATCC_CONTROL_BY_SIM_ACTIVE) | |
| 1732 { | |
| 1733 ret = cmhSAT_MoSmCntr( smsShrdPrm.tpdu.sc_addr, | |
| 1734 da_addr, | |
| 1735 srcId); | |
| 1736 } | |
| 1737 else | |
| 1738 { | |
| 1739 simShrdPrm.setPrm[srcId].sat_cc_mode = SATCC_CONTROL_BY_SIM_ACTIVE; | |
| 1740 } | |
| 1741 | |
| 1742 } | |
| 1743 | |
| 1744 if (ret NEQ AT_CMPL) | |
| 1745 { | |
| 1746 /* save primitive address for SIM_TOOLKIT response */ | |
| 1747 sat_mnsms_submit_req = mnsms_submit_req; | |
| 1748 return; | |
| 1749 } | |
| 1750 #endif | |
| 1751 /* code SMS-SUBMIT here */ | |
| 1752 cmhSMS_codeMsg (&mnsms_submit_req->sms_sdu, SMS_VT_SUBMIT, | |
| 1753 &smsShrdPrm.tpdu.sc_addr, SMS_SUBMIT, | |
| 1754 (UBYTE*)smsShrdPrm.tpdu.tp_submit); | |
| 1755 | |
| 1756 PSENDX (SMS, mnsms_submit_req); | |
| 1757 #ifdef _CONC_TESTING_ | |
| 1758 #ifndef NTRACE | |
| 1759 writeP = trcBuf; | |
| 1760 for (count=0; count<20; count++) | |
| 1761 { | |
| 1762 writeP += sprintf (writeP, " %02X", mnsms_submit_req->sms_sdu.buf[count]); | |
| 1763 } | |
| 1764 TRACE_EVENT("buf: "); | |
| 1765 *writeP = '\0'; | |
| 1766 TRACE_EVENT(trcBuf); | |
| 1767 | |
| 1768 writeP = trcBuf; | |
| 1769 for (; count<40; count++) | |
| 1770 { | |
| 1771 writeP += sprintf (writeP, " %02X", mnsms_submit_req->sms_sdu.buf[count]); | |
| 1772 } | |
| 1773 *writeP = '\0'; | |
| 1774 TRACE_EVENT(trcBuf); | |
| 1775 #endif | |
| 1776 #endif | |
| 1777 if (smsShrdPrm.tpdu.tp_submit NEQ NULL) | |
| 1778 { | |
| 1779 ACI_MFREE(smsShrdPrm.tpdu.tp_submit); | |
| 1780 smsShrdPrm.tpdu.tp_submit = NULL; | |
| 1781 } | |
| 1782 } | |
| 1783 } | |
| 1784 | |
| 1785 /* | |
| 1786 +-------------------------------------------------------------------+ | |
| 1787 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 1788 | STATE : code ROUTINE : cmhSMS_SMRead | | |
| 1789 +-------------------------------------------------------------------+ | |
| 1790 | |
| 1791 PURPOSE : This function is used to notify the command handler of | |
| 1792 a successfull reading of a short message from preferred | |
| 1793 message storage. | |
| 1794 */ | |
| 1795 #ifndef NTRACE | |
| 1796 LOCAL void trace_read_sms( T_MNSMS_READ_CNF * mnsms_read_cnf) | |
| 1797 { | |
| 1798 char trcBuf[80]; | |
| 1799 char *writeP; | |
| 1800 int count; | |
| 1801 | |
| 1802 TRACE_FUNCTION ("trace_read_sms ()"); | |
| 1803 | |
| 1804 TRACE_EVENT_P1(" rec_num: %u", mnsms_read_cnf->rec_num); | |
| 1805 TRACE_EVENT_P1(" rec_next: %u", mnsms_read_cnf->rec_next); | |
| 1806 TRACE_EVENT_P1(" rec_max: %u", mnsms_read_cnf->rec_max); | |
| 1807 TRACE_EVENT_P1(" status %u", mnsms_read_cnf->status); | |
| 1808 TRACE_EVENT_P1(" cause 0x%04x", mnsms_read_cnf->cause); | |
| 1809 writeP = trcBuf; | |
| 1810 for (count=0; count<20; count++) | |
| 1811 { | |
| 1812 writeP += sprintf (writeP, " %02X", mnsms_read_cnf->sms_sdu.buf[count]); | |
| 1813 } | |
| 1814 TRACE_EVENT("buf: "); | |
| 1815 *writeP = '\0'; | |
| 1816 TRACE_EVENT(trcBuf); | |
| 1817 | |
| 1818 writeP = trcBuf; | |
| 1819 for (; count<40; count++) | |
| 1820 { | |
| 1821 writeP += sprintf (writeP, " %02X", mnsms_read_cnf->sms_sdu.buf[count]); | |
| 1822 } | |
| 1823 *writeP = '\0'; | |
| 1824 TRACE_EVENT(trcBuf); | |
| 1825 } | |
| 1826 #endif | |
| 1827 | |
| 1828 | |
| 1829 | |
| 1830 GLOBAL SHORT cmhSMS_SMRead ( T_MNSMS_READ_CNF * mnsms_read_cnf) | |
| 1831 { | |
| 1832 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 1833 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 1834 T_ACI_CMGL_SM *p_sm; | |
| 1835 T_rp_addr rp_addr; | |
| 1836 UBYTE* message; | |
| 1837 T_TP_DELIVER *sms_deliver, decoded_mesg; | |
| 1838 BOOL retCode = FALSE; | |
| 1839 UBYTE msg_type; | |
| 1840 | |
| 1841 TRACE_FUNCTION ("cmhSMS_SMRead ()"); | |
| 1842 | |
| 1843 #ifndef NTRACE | |
| 1844 trace_read_sms(mnsms_read_cnf); | |
| 1845 #endif | |
| 1846 | |
| 1847 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 1848 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 1849 | |
| 1850 /* (SIM) error occurred */ | |
| 1851 if (!IS_CAUSE_INVALID(mnsms_read_cnf->cause)) | |
| 1852 { | |
| 1853 if (mnsms_read_cnf->cause NEQ SMS_NO_ERROR) | |
| 1854 { | |
| 1855 /* reset the command context */ | |
| 1856 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1857 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1858 | |
| 1859 if( ownBuf NEQ CMD_SRC_LCL OR cmdBuf NEQ AT_CMD_P_CMGMDU ) | |
| 1860 { | |
| 1861 R_AT ( RAT_CMS, ownBuf ) | |
| 1862 ( | |
| 1863 cmdBuf, | |
| 1864 cmhSMS_GetCmsFromSms(mnsms_read_cnf->cause), | |
| 1865 NULL | |
| 1866 ); | |
| 1867 } | |
| 1868 return 1; | |
| 1869 } | |
| 1870 } | |
| 1871 | |
| 1872 #ifdef _CONC_TESTING_ | |
| 1873 /* this is only for testing */ | |
| 1874 SET_OWNBUF_CONC; | |
| 1875 #endif | |
| 1876 | |
| 1877 /* | |
| 1878 *----------------------------------------------------------------- | |
| 1879 * ignore primitives with incorrect message status | |
| 1880 *----------------------------------------------------------------- | |
| 1881 */ | |
| 1882 TRACE_EVENT_P1("mnsms_read_cnf->status: %d", mnsms_read_cnf->status); | |
| 1883 | |
| 1884 if ( (mnsms_read_cnf->status EQ SMS_RECORD_FREE) OR | |
| 1885 (mnsms_read_cnf->status EQ SMS_RECORD_INVALID) ) | |
| 1886 { | |
| 1887 /* reset the command context */ | |
| 1888 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1889 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1890 | |
| 1891 TRACE_EVENT("incorrect message status"); | |
| 1892 return 1; | |
| 1893 } | |
| 1894 | |
| 1895 /* always decode for local source */ | |
| 1896 if (ownBuf EQ CMD_SRC_LCL) /* ACI-SPR-9528 */ | |
| 1897 { /* pass dummy p_sm to CB */ | |
| 1898 if (((cmdBuf EQ AT_CMD_CMGL OR cmdBuf EQ AT_CMD_CMGR) OR | |
| 1899 (cmdBuf EQ AT_CMD_P_CMGR OR cmdBuf EQ AT_CMD_P_CMGL)) | |
| 1900 AND smsShrdPrm.rdMode NEQ READ_STATUS_CHANGE) /* ACI-FIX-9510 */ | |
| 1901 { | |
| 1902 retCode = cmhSMS_SMSQueryType (&mnsms_read_cnf->sms_sdu, &msg_type); | |
| 1903 if (retCode EQ FALSE) | |
| 1904 { | |
| 1905 /* reset the command context */ | |
| 1906 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1907 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1908 | |
| 1909 TRACE_EVENT("Error decoding message type"); | |
| 1910 return 1; | |
| 1911 } | |
| 1912 ACI_MALLOC(smsShrdPrm.pDecMsg, sizeof(T_ACI_CMGL_SM) ); | |
| 1913 memset(smsShrdPrm.pDecMsg,0,sizeof(T_ACI_CMGL_SM) ); | |
| 1914 p_sm = smsShrdPrm.pDecMsg; | |
| 1915 if (msg_type EQ TP_MTI_SMS_STATUS_REP) | |
| 1916 { | |
| 1917 retCode=cmhSMS_cpySTtoSM(p_sm ,mnsms_read_cnf); | |
| 1918 } | |
| 1919 else | |
| 1920 { | |
| 1921 retCode = cmhSMS_cpyReadCnf ( p_sm, mnsms_read_cnf ); | |
| 1922 } | |
| 1923 if (retCode EQ FALSE) | |
| 1924 { | |
| 1925 TRACE_EVENT("cmhSMS_SMRead ():[ERR] decoding of SMS"); | |
| 1926 cmhSMS_invalidSMS_notification_to_user (mnsms_read_cnf); | |
| 1927 | |
| 1928 ACI_MFREE(smsShrdPrm.pDecMsg); | |
| 1929 | |
| 1930 /* reset the command context */ | |
| 1931 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1932 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1933 | |
| 1934 smsShrdPrm.pDecMsg = NULL; | |
| 1935 if (mnsms_read_cnf->rec_next EQ SMS_RECORD_NOT_EXIST) | |
| 1936 { | |
| 1937 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1938 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1939 if( cmdBuf NEQ AT_CMD_P_CMGMDU ) | |
| 1940 { | |
| 1941 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 1942 } | |
| 1943 } | |
| 1944 return 1; | |
| 1945 } | |
| 1946 } | |
| 1947 } | |
| 1948 else | |
| 1949 p_sm = smsShrdPrm.pDecMsg; | |
| 1950 | |
| 1951 /* | |
| 1952 *----------------------------------------------------------------- | |
| 1953 * check for command context | |
| 1954 *----------------------------------------------------------------- | |
| 1955 */ | |
| 1956 switch( smsShrdPrm.smsEntStat.curCmd ) | |
| 1957 { | |
| 1958 case ( AT_CMD_CMGR ): | |
| 1959 case ( AT_CMD_P_CMGR ): | |
| 1960 { | |
| 1961 /* | |
| 1962 *------------------------------------------------------------- | |
| 1963 * process event for +CGMR | |
| 1964 *------------------------------------------------------------- | |
| 1965 */ | |
| 1966 | |
| 1967 /* reset the command context */ | |
| 1968 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 1969 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 1970 | |
| 1971 /* The message need not be displayed for Status Change */ | |
| 1972 if (cmdBuf EQ AT_CMD_P_CMGR | |
| 1973 AND smsShrdPrm.rdMode EQ READ_STATUS_CHANGE) | |
| 1974 { | |
| 1975 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 1976 /* inform BMI */ | |
| 1977 cmh_logRslt ( ownBuf, RAT_OK, AT_CMD_P_CMGR, mnsms_read_cnf->rec_num, -1, -1 ); | |
| 1978 break; | |
| 1979 } | |
| 1980 | |
| 1981 | |
| 1982 #if defined MFW OR defined FF_MMI_RIV OR defined _CONC_TESTING_ | |
| 1983 if (ownBuf EQ CMD_SRC_LCL) /* AND /* ACI-FIX-9510 */ | |
| 1984 /* smsShrdPrm.rdMode NEQ READ_STATUS_CHANGE) */ /* call rplyCB (with invalid p_sm) anyway | |
| 1985 to touch all segments while in | |
| 1986 READ_STATUS_CHANGE */ | |
| 1987 { | |
| 1988 #if defined FF_MMI_RIV | |
| 1989 T_ACI_CMGF_MOD sms_input_mode = CMGF_MOD_NotPresent; | |
| 1990 qAT_PlusCMGF (CMD_SRC_LCL, &sms_input_mode); | |
| 1991 if (sms_input_mode EQ CMGF_MOD_Pdu ) | |
| 1992 { | |
| 1993 if (cmdBuf EQ AT_CMD_CMGR ) | |
| 1994 { | |
| 1995 rAT_PlusCMGRPdu (mnsms_read_cnf); | |
| 1996 } | |
| 1997 else if (cmdBuf EQ AT_CMD_P_CMGR ) | |
| 1998 { | |
| 1999 rAT_PercentCMGRPdu (mnsms_read_cnf); | |
| 2000 } | |
| 2001 } | |
| 2002 else | |
| 2003 { | |
| 2004 if (smsShrdPrm.rplyCB.cmgr NEQ NULL) | |
| 2005 { | |
| 2006 smsShrdPrm.rplyCB.cmgr( p_sm, NULL ); | |
| 2007 } | |
| 2008 } | |
| 2009 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2010 #else | |
| 2011 /* GPF-MMI */ | |
| 2012 if (smsShrdPrm.rplyCB.cmgr NEQ NULL) | |
| 2013 { | |
| 2014 smsShrdPrm.rplyCB.cmgr( p_sm, NULL ); | |
| 2015 } | |
| 2016 if (!ISSET_CONC) | |
| 2017 { | |
| 2018 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2019 } | |
| 2020 #endif | |
| 2021 } | |
| 2022 else /* if (ownBuf EQ CMD_SRC_LCL) */ | |
| 2023 #endif /*#if defined MFW OR defined FF_MMI_RIV*/ | |
| 2024 { | |
| 2025 if (cmdBuf EQ AT_CMD_CMGR ) | |
| 2026 { | |
| 2027 R_AT ( RAT_CMGR, ownBuf ) ( mnsms_read_cnf, NULL ); | |
| 2028 } | |
| 2029 else if (cmdBuf EQ AT_CMD_P_CMGR ) | |
| 2030 { | |
| 2031 R_AT ( RAT_P_CMGR, ownBuf ) ( mnsms_read_cnf, NULL ); | |
| 2032 } | |
| 2033 | |
| 2034 R_AT ( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2035 /* inform BMI */ | |
| 2036 cmh_logRslt ( ownBuf, RAT_OK, AT_CMD_CMGR, mnsms_read_cnf->rec_num, -1, -1 ); | |
| 2037 } | |
| 2038 | |
| 2039 break; | |
| 2040 } | |
| 2041 | |
| 2042 case ( AT_CMD_P_CMGL ): | |
| 2043 case ( AT_CMD_CMGL ): | |
| 2044 { | |
| 2045 /* | |
| 2046 *------------------------------------------------------------- | |
| 2047 * process event for +CMGL | |
| 2048 *------------------------------------------------------------- | |
| 2049 */ | |
| 2050 cmhSMS_cpyLstData ( cmdBuf, ownBuf, mnsms_read_cnf ); | |
| 2051 | |
| 2052 break; | |
| 2053 } | |
| 2054 | |
| 2055 case ( AT_CMD_P_CMGMDU ): | |
| 2056 { | |
| 2057 /* | |
| 2058 *------------------------------------------------------------- | |
| 2059 * process event for %CMGMDU | |
| 2060 *------------------------------------------------------------- | |
| 2061 */ | |
| 2062 message = cmhSMS_decodeMsg(&mnsms_read_cnf->sms_sdu, &rp_addr, SMS_VT_DELIVER); | |
| 2063 sms_deliver = (T_TP_DELIVER*)message; | |
| 2064 sms_deliver->tp_rp = 0; | |
| 2065 memcpy(&decoded_mesg, sms_deliver, sizeof(T_TP_DELIVER)); | |
| 2066 | |
| 2067 { | |
| 2068 PALLOC (mnsms_store_req, MNSMS_STORE_REQ); | |
| 2069 | |
| 2070 mnsms_store_req -> mem_type = smsShrdPrm.mem1; | |
| 2071 mnsms_store_req -> condx = SMS_CONDX_OVR_ANY; | |
| 2072 mnsms_store_req -> rec_num = mnsms_read_cnf->rec_num; | |
| 2073 mnsms_store_req -> status = mnsms_read_cnf->status; | |
| 2074 | |
| 2075 cmhSMS_codeMsg ( &mnsms_store_req->sms_sdu, | |
| 2076 SMS_VT_DELIVER, | |
| 2077 &rp_addr, | |
| 2078 SMS_DELIVER, | |
| 2079 (UBYTE*) &decoded_mesg); | |
| 2080 | |
| 2081 PSENDX (SMS, mnsms_store_req); | |
| 2082 } | |
| 2083 break; | |
| 2084 } | |
| 2085 #if defined (SIM_TOOLKIT) | |
| 2086 case ( AT_CMD_CMSS ): | |
| 2087 { | |
| 2088 /* | |
| 2089 *------------------------------------------------------------- | |
| 2090 * process event for +CMSS (only for SAT) | |
| 2091 *------------------------------------------------------------- | |
| 2092 */ | |
| 2093 cmhSMS_SMReadCMSS (mnsms_read_cnf); | |
| 2094 | |
| 2095 break; | |
| 2096 } | |
| 2097 #endif | |
| 2098 | |
| 2099 default: | |
| 2100 { | |
| 2101 TRACE_EVENT("error in command context"); | |
| 2102 } | |
| 2103 } | |
| 2104 | |
| 2105 if (smsShrdPrm.pDecMsg) | |
| 2106 { | |
| 2107 ACI_MFREE(smsShrdPrm.pDecMsg); | |
| 2108 smsShrdPrm.pDecMsg = NULL; | |
| 2109 } | |
| 2110 | |
| 2111 return 0; | |
| 2112 } | |
| 2113 | |
| 2114 /* | |
| 2115 +-------------------------------------------------------------------+ | |
| 2116 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2117 | STATE : code ROUTINE : cmhSMS_Result | | |
| 2118 +-------------------------------------------------------------------+ | |
| 2119 | |
| 2120 PURPOSE : This function is used to notify the command handler of | |
| 2121 a successfull transaction concerning the short message | |
| 2122 service. | |
| 2123 */ | |
| 2124 GLOBAL SHORT cmhSMS_Result ( T_MNSMS_REPORT_IND * mnsms_report_ind ) | |
| 2125 { | |
| 2126 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 2127 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 2128 | |
| 2129 | |
| 2130 TRACE_FUNCTION ("cmhSMS_Result ()"); | |
| 2131 | |
| 2132 if (mnsms_report_ind->v_cmms_mode) | |
| 2133 { | |
| 2134 smsShrdPrm.CMMSmode = mnsms_report_ind->cmms_mode; | |
| 2135 return 0; | |
| 2136 } | |
| 2137 | |
| 2138 cmdBuf = AT_CMD_NONE; | |
| 2139 ownBuf = CMD_SRC_LCL; | |
| 2140 | |
| 2141 smsShrdPrm.smsStat = mnsms_report_ind->state; | |
| 2142 | |
| 2143 | |
| 2144 if (mnsms_report_ind->state EQ SMS_STATE_READY) | |
| 2145 { | |
| 2146 /* reading of SMs from SIM is completed, | |
| 2147 * read SMSP, CBMIR, CMBI fields now | |
| 2148 */ | |
| 2149 if (cmhSMS_ReadParams (NO_VLD_OWN, AT_CMD_CFUN, 1) NEQ AT_EXCT) | |
| 2150 { | |
| 2151 cmhSMS_ready (); | |
| 2152 } | |
| 2153 R_AT ( RAT_SIG_SMS, ownBuf ) ( SMS_STATE_READY ); | |
| 2154 } | |
| 2155 else if (mnsms_report_ind->state EQ SMS_STATE_INITIALISING) | |
| 2156 { | |
| 2157 { /*ACI-FIX-18055 resetting total and used storage counters of SIM and ME storages which will be updated by cmhSMS_SMSInitState */ | |
| 2158 smsShrdPrm.aci_sms_parameter.simTotal = 0; | |
| 2159 smsShrdPrm.aci_sms_parameter.simUsed = 0; | |
| 2160 smsShrdPrm.aci_sms_parameter.meTotal = 0; | |
| 2161 smsShrdPrm.aci_sms_parameter.meUsed = 0; | |
| 2162 } /*ACI-FIX-18055 Changes end here */ | |
| 2163 R_AT ( RAT_SIG_SMS, ownBuf ) ( SMS_STATE_INITIALISING ); | |
| 2164 } | |
| 2165 else if (mnsms_report_ind->state > SMS_STATE_INITIALISING) | |
| 2166 { | |
| 2167 R_AT ( RAT_CMS, ownBuf ) ( cmdBuf, CMS_ERR_UnknownErr, NULL ); | |
| 2168 } | |
| 2169 | |
| 2170 return 0; | |
| 2171 } | |
| 2172 | |
| 2173 /* | |
| 2174 +-------------------------------------------------------------------+ | |
| 2175 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2176 | STATE : code ROUTINE : cmhSMS_WrCnfCSAS | | |
| 2177 +-------------------------------------------------------------------+ | |
| 2178 | |
| 2179 PURPOSE : This function is used to notify the command handler of | |
| 2180 the usage of SIM and ME memory. | |
| 2181 */ | |
| 2182 GLOBAL void cmhSMS_WrCnfCSAS (SHORT aId) | |
| 2183 { | |
| 2184 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 2185 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 2186 USHORT errCode; | |
| 2187 USHORT dataField = 0xFF; | |
| 2188 UBYTE dataLen = 0; | |
| 2189 UBYTE data[MAX_SIM_CMD]; | |
| 2190 | |
| 2191 TRACE_FUNCTION ("cmhSMS_WrCnfCSAS ()"); | |
| 2192 | |
| 2193 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 2194 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 2195 | |
| 2196 /* | |
| 2197 *----------------------------------------------------------------- | |
| 2198 * check for next SIM access | |
| 2199 *----------------------------------------------------------------- | |
| 2200 */ | |
| 2201 switch (smsShrdPrm.prmRdSeq) | |
| 2202 { | |
| 2203 case SMS_READ_SIM_SMSP: /* EF(SMSP) written */ | |
| 2204 errCode = simShrdPrm.atb[aId].errCode; | |
| 2205 | |
| 2206 if (smsShrdPrm.cbmPrm.cbmSIMmaxIdRge > 0 AND | |
| 2207 cmhSMS_PutCbmirSIM (ownBuf, data, | |
| 2208 (int)smsShrdPrm.cbmPrm.cbmSIMmaxIdRge * 4)) /* write CBMIR */ | |
| 2209 { | |
| 2210 dataField = SIM_CBMIR; | |
| 2211 dataLen = smsShrdPrm.cbmPrm.cbmSIMmaxIdRge * 4; | |
| 2212 break; | |
| 2213 } | |
| 2214 else | |
| 2215 smsShrdPrm.prmRdSeq--; | |
| 2216 | |
| 2217 if (smsShrdPrm.cbmPrm.cbmSIMmaxId > 0 AND | |
| 2218 cmhSMS_PutCbmiSIM (ownBuf, data, | |
| 2219 (int)smsShrdPrm.cbmPrm.cbmSIMmaxId * 2)) /* write CBMI */ | |
| 2220 { | |
| 2221 dataField = SIM_CBMI; | |
| 2222 dataLen = smsShrdPrm.cbmPrm.cbmSIMmaxId * 2; | |
| 2223 } | |
| 2224 else /* nothing else to write */ | |
| 2225 { | |
| 2226 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2227 } | |
| 2228 break; | |
| 2229 | |
| 2230 case SMS_READ_SIM_CBMIR: /* CBMIR written */ | |
| 2231 errCode = simShrdPrm.atb[aId].errCode; | |
| 2232 | |
| 2233 if (smsShrdPrm.cbmPrm.cbmSIMmaxId > 0 AND /* write CBMI */ | |
| 2234 cmhSMS_PutCbmiSIM (ownBuf, data, | |
| 2235 (int)smsShrdPrm.cbmPrm.cbmSIMmaxId * 2)) | |
| 2236 { | |
| 2237 dataField = SIM_CBMI; | |
| 2238 dataLen = smsShrdPrm.cbmPrm.cbmSIMmaxId * 2; | |
| 2239 } | |
| 2240 else /* nothing else to write */ | |
| 2241 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2242 break; | |
| 2243 | |
| 2244 case SMS_READ_SIM_CBMI: /* CBMI written */ | |
| 2245 errCode = simShrdPrm.atb[aId].errCode; | |
| 2246 | |
| 2247 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; /* nothing else to write */ | |
| 2248 break; | |
| 2249 | |
| 2250 default: /* nothing else to write */ | |
| 2251 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2252 errCode = SIM_CAUSE_OTHER_ERROR; | |
| 2253 break; | |
| 2254 } | |
| 2255 if ( smsShrdPrm.prmRdSeq EQ SMS_READ_SIM_CMPL) | |
| 2256 { | |
| 2257 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2258 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 2259 | |
| 2260 if (errCode EQ SIM_NO_ERROR) | |
| 2261 { | |
| 2262 R_AT( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2263 } | |
| 2264 else | |
| 2265 { | |
| 2266 R_AT( RAT_CMS, ownBuf ) /* unsuccessful SIM write */ | |
| 2267 ( | |
| 2268 cmdBuf, | |
| 2269 cmhSMS_GetCmsFromSim ( errCode ), | |
| 2270 NULL | |
| 2271 ); | |
| 2272 } | |
| 2273 } | |
| 2274 else | |
| 2275 { | |
| 2276 if (cmhSIM_WriteTranspEF (CMD_SRC_NONE, cmdBuf, | |
| 2277 dataField, 0, dataLen, | |
| 2278 data, cmhSMS_WrCnfCSAS) EQ AT_FAIL) | |
| 2279 { | |
| 2280 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2281 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 2282 | |
| 2283 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2284 | |
| 2285 R_AT( RAT_CMS, ownBuf ) ( cmdBuf, CMS_ERR_UnknownErr, NULL ); | |
| 2286 } | |
| 2287 else | |
| 2288 smsShrdPrm.prmRdSeq--; | |
| 2289 } | |
| 2290 | |
| 2291 simShrdPrm.atb[aId].ntryUsdFlg = FALSE; | |
| 2292 } | |
| 2293 | |
| 2294 /* | |
| 2295 +-------------------------------------------------------------------+ | |
| 2296 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2297 | STATE : code ROUTINE : cmhSMS_RdCnfCRES | | |
| 2298 +-------------------------------------------------------------------+ | |
| 2299 | |
| 2300 PURPOSE : This function is used to notify the command handler of | |
| 2301 the usage of SIM and ME memory. | |
| 2302 */ | |
| 2303 GLOBAL void cmhSMS_RdCnfCRES (SHORT aId) | |
| 2304 { | |
| 2305 T_ACI_AT_CMD cmdBuf; /* buffers current command */ | |
| 2306 T_ACI_CMD_SRC ownBuf; /* buffers current owner */ | |
| 2307 | |
| 2308 USHORT errCode; | |
| 2309 USHORT dataField = 0xFF; | |
| 2310 UBYTE dataLen = 0; | |
| 2311 UBYTE profile; | |
| 2312 | |
| 2313 TRACE_FUNCTION ("cmhSMS_RdCnfCRES ()"); | |
| 2314 | |
| 2315 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 2316 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 2317 | |
| 2318 /* | |
| 2319 *----------------------------------------------------------------- | |
| 2320 * check for next SIM access | |
| 2321 *----------------------------------------------------------------- | |
| 2322 */ | |
| 2323 switch (smsShrdPrm.prmRdSeq) | |
| 2324 { | |
| 2325 case SMS_READ_SIM_SMSP: | |
| 2326 if ((errCode = simShrdPrm.atb[aId].errCode) EQ SIM_NO_ERROR) | |
| 2327 { | |
| 2328 /* successful EF(SMSP) read */ | |
| 2329 | |
| 2330 profile = simShrdPrm.atb[aId].recNr; | |
| 2331 | |
| 2332 if (!cmhSMS_GetPrmSIM (ownBuf, | |
| 2333 simShrdPrm.atb[aId].exchData, | |
| 2334 simShrdPrm.atb[aId].dataLen)) | |
| 2335 { | |
| 2336 errCode = SIM_CAUSE_OTHER_ERROR; | |
| 2337 } | |
| 2338 } | |
| 2339 if (smsShrdPrm.cbmPrm.cbmSIMmaxIdRge > 0) | |
| 2340 { | |
| 2341 dataField = SIM_CBMIR; | |
| 2342 dataLen = smsShrdPrm.cbmPrm.cbmSIMmaxIdRge * 4; | |
| 2343 break; | |
| 2344 } | |
| 2345 else | |
| 2346 smsShrdPrm.prmRdSeq--; | |
| 2347 | |
| 2348 if (smsShrdPrm.cbmPrm.cbmSIMmaxId > 0) | |
| 2349 { | |
| 2350 dataField = SIM_CBMI; | |
| 2351 dataLen = smsShrdPrm.cbmPrm.cbmSIMmaxId * 2; | |
| 2352 break; | |
| 2353 } | |
| 2354 else | |
| 2355 smsShrdPrm.prmRdSeq--; | |
| 2356 | |
| 2357 smsShrdPrm.cbmPrm.cbchOwner = ownBuf; | |
| 2358 psaMMI_Cbch(); | |
| 2359 smsShrdPrm.cbmPrm.cbchOwner = OWN_NONE; | |
| 2360 | |
| 2361 #ifdef SIM_TOOLKIT | |
| 2362 smsShrdPrm.prmRdSeq--; /* when SAT is on, then SMS_READ_CBMID is defined | |
| 2363 which is irrelevant for +CRES */ | |
| 2364 #endif /* of SIM_TOOLKIT */ | |
| 2365 | |
| 2366 break; | |
| 2367 | |
| 2368 case SMS_READ_SIM_CBMIR: | |
| 2369 if ((errCode = simShrdPrm.atb[aId].errCode) EQ SIM_NO_ERROR) | |
| 2370 { /* successful EF(CBMIR) read */ | |
| 2371 if (!cmhSMS_GetCbmirSIM (ownBuf, | |
| 2372 simShrdPrm.atb[aId].exchData, | |
| 2373 simShrdPrm.atb[aId].dataLen)) | |
| 2374 { | |
| 2375 errCode = SIM_CAUSE_OTHER_ERROR; | |
| 2376 } | |
| 2377 } | |
| 2378 if (smsShrdPrm.cbmPrm.cbmSIMmaxId > 0) | |
| 2379 { | |
| 2380 dataField = SIM_CBMI; | |
| 2381 dataLen = smsShrdPrm.cbmPrm.cbmSIMmaxId * 2; | |
| 2382 } | |
| 2383 else | |
| 2384 { | |
| 2385 smsShrdPrm.prmRdSeq--; | |
| 2386 | |
| 2387 smsShrdPrm.cbmPrm.cbchOwner = ownBuf; | |
| 2388 psaMMI_Cbch(); | |
| 2389 smsShrdPrm.cbmPrm.cbchOwner = OWN_NONE; | |
| 2390 | |
| 2391 #ifdef SIM_TOOLKIT | |
| 2392 smsShrdPrm.prmRdSeq--; /* when SAT is on, then SMS_READ_CBMID is defined | |
| 2393 which is irrelevant for +CRES */ | |
| 2394 #endif /* of SIM_TOOLKIT */ | |
| 2395 | |
| 2396 } | |
| 2397 break; | |
| 2398 | |
| 2399 case SMS_READ_SIM_CBMI: | |
| 2400 if ((errCode = simShrdPrm.atb[aId].errCode) EQ SIM_NO_ERROR) | |
| 2401 { /* successful EF(CBMI) read */ | |
| 2402 if (!cmhSMS_GetCbmiSIM (ownBuf, | |
| 2403 simShrdPrm.atb[aId].exchData, | |
| 2404 simShrdPrm.atb[aId].dataLen)) | |
| 2405 { | |
| 2406 errCode = SIM_CAUSE_OTHER_ERROR; | |
| 2407 } | |
| 2408 } | |
| 2409 smsShrdPrm.cbmPrm.cbchOwner = ownBuf; | |
| 2410 psaMMI_Cbch(); | |
| 2411 smsShrdPrm.cbmPrm.cbchOwner = OWN_NONE; | |
| 2412 | |
| 2413 #ifdef SIM_TOOLKIT | |
| 2414 smsShrdPrm.prmRdSeq--; /* when SAT is on, then SMS_READ_CBMID is defined | |
| 2415 which is irrelevant for +CRES */ | |
| 2416 #endif /* of SIM_TOOLKIT */ | |
| 2417 | |
| 2418 break; | |
| 2419 | |
| 2420 default: | |
| 2421 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2422 errCode = SIM_CAUSE_OTHER_ERROR; | |
| 2423 break; | |
| 2424 } | |
| 2425 if (--smsShrdPrm.prmRdSeq <= SMS_READ_SIM_CMPL) | |
| 2426 { | |
| 2427 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2428 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 2429 | |
| 2430 if (errCode EQ SIM_NO_ERROR) | |
| 2431 { | |
| 2432 R_AT( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2433 } | |
| 2434 else | |
| 2435 { | |
| 2436 R_AT( RAT_CMS, ownBuf ) /* unsuccessful SIM read */ | |
| 2437 ( | |
| 2438 cmdBuf, | |
| 2439 cmhSMS_GetCmsFromSim ( errCode ), | |
| 2440 NULL | |
| 2441 ); | |
| 2442 } | |
| 2443 } | |
| 2444 else | |
| 2445 if (cmhSIM_ReadTranspEF (CMD_SRC_NONE, cmdBuf, | |
| 2446 dataField, 0, dataLen, | |
| 2447 NULL, cmhSMS_RdCnfCRES) EQ AT_FAIL) | |
| 2448 { | |
| 2449 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2450 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 2451 | |
| 2452 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2453 | |
| 2454 #ifdef SIM_TOOLKIT | |
| 2455 if (ownBuf EQ OWN_SAT /*smsShrdPrm.fuRef >= 0*/) | |
| 2456 { | |
| 2457 psaSAT_FUConfirm ((int)simShrdPrm.fuRef, SIM_FU_ERROR); | |
| 2458 } | |
| 2459 else | |
| 2460 { | |
| 2461 #endif | |
| 2462 R_AT( RAT_CMS, ownBuf ) ( cmdBuf, CMS_ERR_UnknownErr, NULL ); | |
| 2463 #ifdef SIM_TOOLKIT | |
| 2464 } | |
| 2465 #endif | |
| 2466 } | |
| 2467 | |
| 2468 simShrdPrm.atb[aId].ntryUsdFlg = FALSE; | |
| 2469 } | |
| 2470 | |
| 2471 /* | |
| 2472 +-------------------------------------------------------------------+ | |
| 2473 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2474 | STATE : code ROUTINE : cmhSMS_InitSMSP | | |
| 2475 +-------------------------------------------------------------------+ | |
| 2476 | |
| 2477 PURPOSE : This function is used to store the parameters of EF(SMSP). | |
| 2478 */ | |
| 2479 GLOBAL void cmhSMS_InitSMSP (SHORT aId) | |
| 2480 { | |
| 2481 T_ACI_CMD_SRC srcId; | |
| 2482 T_SMS_SET_PRM * elem ; /* points to SMS parameter set */ | |
| 2483 UBYTE idx; | |
| 2484 UBYTE profile; | |
| 2485 | |
| 2486 TRACE_FUNCTION ("cmhSMS_InitSMSP ()"); | |
| 2487 | |
| 2488 /* | |
| 2489 *----------------------------------------------------------------- | |
| 2490 * process SIM result | |
| 2491 *----------------------------------------------------------------- | |
| 2492 */ | |
| 2493 srcId = smsShrdPrm.owner; | |
| 2494 | |
| 2495 switch (smsShrdPrm.prmRdSeq) | |
| 2496 { | |
| 2497 case SMS_READ_SIM_SMSP: | |
| 2498 if (simShrdPrm.atb[aId].errCode EQ SIM_NO_ERROR) | |
| 2499 { /* successful EF(SMSP) read */ | |
| 2500 smsShrdPrm.aci_sms_parameter.smsParamMaxRec = simShrdPrm.atb[aId].recMax; | |
| 2501 smsShrdPrm.aci_sms_parameter.smsParamRecLen = simShrdPrm.atb[aId].dataLen; | |
| 2502 | |
| 2503 if (set_prm_list EQ NULL) | |
| 2504 { | |
| 2505 set_prm_list = new_list(); | |
| 2506 } | |
| 2507 profile = simShrdPrm.atb[aId].recNr; | |
| 2508 elem = find_element(set_prm_list, profile, cmhSMS_findPrflId); | |
| 2509 | |
| 2510 if (elem EQ NULL) | |
| 2511 { | |
| 2512 ACI_MALLOC(elem, sizeof(T_SMS_SET_PRM)); | |
| 2513 memset(elem, 0, sizeof(T_SMS_SET_PRM)); | |
| 2514 insert_list(set_prm_list, elem); | |
| 2515 elem->prflId = profile; | |
| 2516 elem->numOfRefs = OWN_MAX; | |
| 2517 for( idx = 0; idx < OWN_MAX; idx++ ) | |
| 2518 { | |
| 2519 smsShrdPrm.pSetPrm[idx] = (T_SMS_SET_PRM*) elem; | |
| 2520 } | |
| 2521 | |
| 2522 } | |
| 2523 else | |
| 2524 { | |
| 2525 smsShrdPrm.pSetPrm[0] = (T_SMS_SET_PRM*) elem; | |
| 2526 } | |
| 2527 | |
| 2528 cmhSMS_GetPrmSIM (0, | |
| 2529 simShrdPrm.atb[aId].exchData, | |
| 2530 simShrdPrm.atb[aId].dataLen); | |
| 2531 } | |
| 2532 else | |
| 2533 { | |
| 2534 smsShrdPrm.aci_sms_parameter.smsParamMaxRec = 0; | |
| 2535 smsShrdPrm.aci_sms_parameter.smsParamRecLen = 0; | |
| 2536 } | |
| 2537 if( !psaSIM_ChkSIMSrvSup( SRV_CBMIdRnge )) | |
| 2538 { | |
| 2539 smsShrdPrm.prmRdSeq--; | |
| 2540 goto CBMIR; | |
| 2541 } | |
| 2542 if (cmhSIM_ReadTranspEF (CMD_SRC_NONE, smsShrdPrm.smsEntStat.curCmd, | |
| 2543 SIM_CBMIR, 0, 255, | |
| 2544 NULL, cmhSMS_InitSMSP) NEQ AT_FAIL) | |
| 2545 smsShrdPrm.prmRdSeq--; | |
| 2546 else | |
| 2547 { | |
| 2548 goto CBMIR; | |
| 2549 } | |
| 2550 break; | |
| 2551 | |
| 2552 case SMS_READ_SIM_CBMIR: | |
| 2553 if (simShrdPrm.atb[aId].errCode EQ SIM_NO_ERROR) | |
| 2554 { | |
| 2555 smsShrdPrm.cbmPrm.cbmSIMmaxIdRge = simShrdPrm.atb[aId].dataLen / 4; | |
| 2556 cmhSMS_GetCbmirSIM (CMD_SRC_NONE, | |
| 2557 simShrdPrm.atb[aId].exchData, | |
| 2558 simShrdPrm.atb[aId].dataLen); | |
| 2559 } | |
| 2560 else | |
| 2561 smsShrdPrm.cbmPrm.cbmSIMmaxIdRge = 0; | |
| 2562 | |
| 2563 CBMIR: | |
| 2564 if( !psaSIM_ChkSIMSrvSup( SRV_CBM_Ident )) | |
| 2565 { | |
| 2566 smsShrdPrm.prmRdSeq--; | |
| 2567 goto CBMI; | |
| 2568 } | |
| 2569 if (cmhSIM_ReadTranspEF (CMD_SRC_NONE, smsShrdPrm.smsEntStat.curCmd, | |
| 2570 SIM_CBMI, 0, 255, | |
| 2571 NULL, cmhSMS_InitSMSP) NEQ AT_FAIL) | |
| 2572 smsShrdPrm.prmRdSeq--; | |
| 2573 else | |
| 2574 { | |
| 2575 #ifdef SIM_TOOLKIT | |
| 2576 goto CBMI; | |
| 2577 #else | |
| 2578 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2579 | |
| 2580 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2581 smsShrdPrm.smsEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
| 2582 #endif /* of SIM_TOOLKIT */ | |
| 2583 } | |
| 2584 break; | |
| 2585 | |
| 2586 case SMS_READ_SIM_CBMI: | |
| 2587 if (simShrdPrm.atb[aId].errCode EQ SIM_NO_ERROR) | |
| 2588 { | |
| 2589 smsShrdPrm.cbmPrm.cbmSIMmaxId = simShrdPrm.atb[aId].dataLen / 2; | |
| 2590 cmhSMS_GetCbmiSIM (CMD_SRC_NONE, | |
| 2591 simShrdPrm.atb[aId].exchData, | |
| 2592 simShrdPrm.atb[aId].dataLen); | |
| 2593 } | |
| 2594 else | |
| 2595 smsShrdPrm.cbmPrm.cbmSIMmaxId = 0; | |
| 2596 | |
| 2597 #ifdef SIM_TOOLKIT | |
| 2598 CBMI: | |
| 2599 if( (!psaSIM_ChkSIMSrvSup( SRV_DtaDownlCB )) OR | |
| 2600 smsShrdPrm.owner NEQ OWN_SAT) | |
| 2601 { | |
| 2602 smsShrdPrm.prmRdSeq--; | |
| 2603 goto CBMID; | |
| 2604 } | |
| 2605 if (cmhSIM_ReadTranspEF (CMD_SRC_NONE, smsShrdPrm.smsEntStat.curCmd, | |
| 2606 SIM_CBMID, 0, 255, | |
| 2607 NULL, cmhSMS_InitSMSP) NEQ AT_FAIL) | |
| 2608 smsShrdPrm.prmRdSeq--; | |
| 2609 else | |
| 2610 { | |
| 2611 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2612 | |
| 2613 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2614 smsShrdPrm.smsEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
| 2615 } | |
| 2616 break; | |
| 2617 | |
| 2618 case SMS_READ_SIM_CBMID: | |
| 2619 if (simShrdPrm.atb[aId].errCode EQ SIM_NO_ERROR) | |
| 2620 { | |
| 2621 smsShrdPrm.cbmPrm.cbmSIMmaxSATId = simShrdPrm.atb[aId].dataLen / 2; | |
| 2622 cmhSMS_GetCbDtaDwnlSIM (CMD_SRC_NONE, | |
| 2623 simShrdPrm.atb[aId].exchData, | |
| 2624 simShrdPrm.atb[aId].dataLen); | |
| 2625 { | |
| 2626 PALLOC (sat_cbch_req, MMI_SAT_CBCH_DWNLD_REQ); | |
| 2627 | |
| 2628 sat_cbch_req->count = (USHORT)smsShrdPrm.cbmPrm.CBDtaDwnlFoundIds; | |
| 2629 memset (sat_cbch_req->msg_id, NOT_PRESENT_16BIT, | |
| 2630 sizeof (sat_cbch_req->msg_id)); | |
| 2631 memcpy (sat_cbch_req->msg_id, smsShrdPrm.cbmPrm.CBDtaDwnlIdent, | |
| 2632 (size_t)smsShrdPrm.cbmPrm.CBDtaDwnlFoundIds * 2); | |
| 2633 | |
| 2634 PSENDX (PL, sat_cbch_req); | |
| 2635 } | |
| 2636 } | |
| 2637 else | |
| 2638 smsShrdPrm.cbmPrm.cbmSIMmaxSATId = 0; | |
| 2639 | |
| 2640 default: | |
| 2641 CBMID: | |
| 2642 | |
| 2643 #else | |
| 2644 /*lint -fallthrough*/ | |
| 2645 default: | |
| 2646 CBMI: | |
| 2647 #endif /*SIM_TOOLKIT */ | |
| 2648 | |
| 2649 smsShrdPrm.cbmPrm.cbchOwner = srcId; | |
| 2650 psaMMI_Cbch(); | |
| 2651 smsShrdPrm.cbmPrm.cbchOwner = OWN_NONE; | |
| 2652 { | |
| 2653 smsShrdPrm.prmRdSeq = SMS_READ_SIM_CMPL; | |
| 2654 | |
| 2655 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2656 smsShrdPrm.smsEntStat.entOwn = simShrdPrm.owner = OWN_NONE; | |
| 2657 } | |
| 2658 #ifdef SIM_TOOLKIT | |
| 2659 if (srcId EQ OWN_SAT /*smsShrdPrm.fuRef >= 0*/) | |
| 2660 { | |
| 2661 smsShrdPrm.accessEnabled = TRUE; | |
| 2662 psaSAT_FUConfirm (simShrdPrm.fuRef,(USHORT) | |
| 2663 ((simShrdPrm.atb[aId].errCode EQ SIM_NO_ERROR)? | |
| 2664 SIM_FU_SUCC_ADD: SIM_FU_ERROR)); | |
| 2665 } | |
| 2666 else | |
| 2667 #endif | |
| 2668 cmhSMS_ready (); | |
| 2669 break; | |
| 2670 } | |
| 2671 | |
| 2672 simShrdPrm.atb[aId].ntryUsdFlg = FALSE; | |
| 2673 } | |
| 2674 | |
| 2675 /* | |
| 2676 +-------------------------------------------------------------------+ | |
| 2677 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2678 | STATE : code ROUTINE : cmhSMS_SMSResumeCnf | | |
| 2679 +-------------------------------------------------------------------+ | |
| 2680 | |
| 2681 PURPOSE : This function processes the MNSMS_RESUME_CNF primitive. | |
| 2682 | |
| 2683 */ | |
| 2684 GLOBAL void cmhSMS_SMSResumeCnf (T_MNSMS_RESUME_CNF * mnsms_resume_cnf) | |
| 2685 { | |
| 2686 UBYTE cmdBuf; | |
| 2687 UBYTE ownBuf; | |
| 2688 | |
| 2689 TRACE_FUNCTION("cmhSMS_ResumeCnf()"); | |
| 2690 | |
| 2691 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 2692 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 2693 | |
| 2694 /* check whether resume has been successfully processed */ | |
| 2695 if (mnsms_resume_cnf->cause EQ SMS_NO_ERROR) | |
| 2696 { | |
| 2697 R_AT( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2698 } | |
| 2699 else | |
| 2700 { | |
| 2701 /* command unsuccessful */ | |
| 2702 R_AT ( RAT_CMS, ownBuf ) | |
| 2703 ( | |
| 2704 cmdBuf, | |
| 2705 cmhSMS_GetCmsFromSms(mnsms_resume_cnf->cause), | |
| 2706 NULL | |
| 2707 ); | |
| 2708 } | |
| 2709 | |
| 2710 /* reset command */ | |
| 2711 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2712 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 2713 } | |
| 2714 | |
| 2715 /* | |
| 2716 +-------------------------------------------------------------------+ | |
| 2717 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2718 | STATE : code ROUTINE : cmhSMS_SMSQueryCnf | | |
| 2719 +-------------------------------------------------------------------+ | |
| 2720 | |
| 2721 PURPOSE : This function processes the MNSMS_QUERY_CNF primitive. | |
| 2722 | |
| 2723 */ | |
| 2724 GLOBAL void cmhSMS_SMSQueryCnf (T_MNSMS_QUERY_CNF * mnsms_query_cnf) | |
| 2725 { | |
| 2726 UBYTE cmdBuf; | |
| 2727 UBYTE ownBuf; | |
| 2728 | |
| 2729 TRACE_FUNCTION("cmhSMS_SMSQueryCnf()"); | |
| 2730 | |
| 2731 cmdBuf = smsShrdPrm.smsEntStat.curCmd; | |
| 2732 ownBuf = smsShrdPrm.smsEntStat.entOwn; | |
| 2733 | |
| 2734 /* check type of query request and process it */ | |
| 2735 switch (mnsms_query_cnf->query_type) | |
| 2736 { | |
| 2737 case SMS_QUERY_DELIVER_STATUS: | |
| 2738 { | |
| 2739 if ( mnsms_query_cnf->v_deliver_status ) | |
| 2740 { | |
| 2741 R_AT ( RAT_CPRSM, ownBuf ) | |
| 2742 ( cmhSMS_convertDeliverStatusToACI(mnsms_query_cnf->deliver_status ) ); | |
| 2743 R_AT( RAT_OK, ownBuf ) ( cmdBuf ); | |
| 2744 } | |
| 2745 else /* paramter inalid - unspecified protocol error */ | |
| 2746 { | |
| 2747 TRACE_EVENT("cmhSMS_QueryCnf: ERROR: paramter invalid"); | |
| 2748 R_AT ( RAT_CMS, ownBuf )( cmdBuf, CMS_ERR_InValManInfo, NULL ); | |
| 2749 } | |
| 2750 break; | |
| 2751 } | |
| 2752 default: /* unsupported query type - ME failure */ | |
| 2753 { | |
| 2754 TRACE_EVENT("cmhSMS_QueryCnf: ERROR: unsupported query type"); | |
| 2755 R_AT ( RAT_CMS, ownBuf )( cmdBuf, CMS_ERR_MeFail, NULL ); | |
| 2756 } | |
| 2757 } /* end switch */ | |
| 2758 | |
| 2759 /* reset command */ | |
| 2760 smsShrdPrm.smsEntStat.curCmd = AT_CMD_NONE; | |
| 2761 smsShrdPrm.smsEntStat.entOwn = smsShrdPrm.owner = OWN_NONE; | |
| 2762 } | |
| 2763 | |
| 2764 | |
| 2765 /* | |
| 2766 +-------------------------------------------------------------------+ | |
| 2767 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2768 | STATE : code ROUTINE : cmhSMS_ReadCbDtaDwnl | | |
| 2769 +-------------------------------------------------------------------+ | |
| 2770 | |
| 2771 PURPOSE : This function processes the T_SIM_MMI_INSERT_IND primitive. | |
| 2772 | |
| 2773 */ | |
| 2774 GLOBAL void cmhSMS_ReadCbDtaDwnl (T_SIM_MMI_INSERT_IND *sim_mmi_insert_ind) | |
| 2775 { | |
| 2776 | |
| 2777 TRACE_FUNCTION("cmhSMS_ReadCbDtaDwnl()"); | |
| 2778 | |
| 2779 if (sim_mmi_insert_ind->cbmid_rec.c_rec NEQ 0) | |
| 2780 { | |
| 2781 smsShrdPrm.cbmPrm.cbmSIMmaxSATId = sim_mmi_insert_ind->cbmid_rec.c_rec / 2; | |
| 2782 cmhSMS_GetCbDtaDwnlSIM (CMD_SRC_NONE, | |
| 2783 (UBYTE *) sim_mmi_insert_ind->cbmid_rec.rec, | |
| 2784 sim_mmi_insert_ind->cbmid_rec.c_rec); | |
| 2785 { | |
| 2786 PALLOC (sat_cbch_req, MMI_SAT_CBCH_DWNLD_REQ); | |
| 2787 | |
| 2788 sat_cbch_req->count = (USHORT)smsShrdPrm.cbmPrm.CBDtaDwnlFoundIds; | |
| 2789 memset (sat_cbch_req->msg_id, NOT_PRESENT_16BIT, | |
| 2790 sizeof (sat_cbch_req->msg_id)); | |
| 2791 memcpy (sat_cbch_req->msg_id, smsShrdPrm.cbmPrm.CBDtaDwnlIdent, | |
| 2792 (size_t)smsShrdPrm.cbmPrm.CBDtaDwnlFoundIds * 2); | |
| 2793 | |
| 2794 PSENDX (PL, sat_cbch_req); | |
| 2795 } | |
| 2796 } | |
| 2797 else | |
| 2798 { | |
| 2799 TRACE_EVENT(" CBMID records zero"); | |
| 2800 smsShrdPrm.cbmPrm.cbmSIMmaxSATId = 0; | |
| 2801 } | |
| 2802 } | |
| 2803 | |
| 2804 /* | |
| 2805 +-------------------------------------------------------------------+ | |
| 2806 | PROJECT : GSM-PS (6147) MODULE : CMH_SMSR | | |
| 2807 | STATE : code ROUTINE : cmhSMS_SMSQueryType | | |
| 2808 +-------------------------------------------------------------------+ | |
| 2809 | |
| 2810 PURPOSE : This function queries the message type of the T_MNSMS_MESSAGE_IND. | |
| 2811 | |
| 2812 */ | |
| 2813 GLOBAL BOOL cmhSMS_SMSQueryType (T_sms_sdu *sms_sdu, | |
| 2814 UBYTE *msg_type) | |
| 2815 { | |
| 2816 UBYTE ccdRet; | |
| 2817 | |
| 2818 TRACE_FUNCTION("cmhSMS_SMSQueryType()"); | |
| 2819 | |
| 2820 if (sms_sdu->l_buf EQ 0) | |
| 2821 { | |
| 2822 TRACE_EVENT("empty SDU: no decoding"); | |
| 2823 return FALSE; | |
| 2824 } | |
| 2825 | |
| 2826 CCD_START; | |
| 2827 { | |
| 2828 | |
| 2829 MCAST( sim_pdu, SIM_PDU ); /* sim_pdu points to _decodedMsg */ | |
| 2830 | |
| 2831 /* decoding outer layer */ | |
| 2832 ccdRet = ccd_decodeMsg ( CCDENT_SMS, | |
| 2833 BOTH /* doesn't work with DOWNLINK!!! */, | |
| 2834 (T_MSGBUF *) sms_sdu, | |
| 2835 (UBYTE *) _decodedMsg, /* target */ | |
| 2836 SMS_VT_SIM_PDU); | |
| 2837 | |
| 2838 if ((ccdRet NEQ ccdOK) OR (!sim_pdu->v_tpdu) | |
| 2839 OR (_decodedMsg[0] NEQ SMS_VT_SIM_PDU)) | |
| 2840 { | |
| 2841 TRACE_EVENT_P1("CCD Decoding Error: %d", ccdRet); | |
| 2842 CCD_END; | |
| 2843 return FALSE; | |
| 2844 } | |
| 2845 *msg_type = sim_pdu->tp_mti; | |
| 2846 } | |
| 2847 CCD_END; | |
| 2848 | |
| 2849 return TRUE; | |
| 2850 | |
| 2851 } | |
| 2852 | |
| 2853 LOCAL BOOL cmhSMS_cpySTtoSM(T_ACI_CMGL_SM *p_sm,T_MNSMS_READ_CNF * mnsms_read_cnf) | |
| 2854 { | |
| 2855 T_ACI_CDS_SM p_st; | |
| 2856 T_MNSMS_STATUS_IND mnsms_status_ind; | |
| 2857 BOOL retCode = FALSE; | |
| 2858 | |
| 2859 memcpy (&mnsms_status_ind.sms_sdu, &mnsms_read_cnf->sms_sdu, | |
| 2860 sizeof (T_sms_sdu)); | |
| 2861 retCode = cmhSMS_cpyStatInd ( &p_st, &mnsms_status_ind); | |
| 2862 memcpy(p_sm->adress, p_st.addr, MAX_SMS_ADDR_DIG - 1 ); | |
| 2863 cmhSMS_getStatCmh ( mnsms_read_cnf->status, &p_sm->stat ); | |
| 2864 p_sm->msg_ref = mnsms_read_cnf->rec_num ; | |
| 2865 p_sm->tp_status=p_st.tp_status ; | |
| 2866 p_sm->toa .ton = p_st.toa .ton ; | |
| 2867 p_sm->toa.npi = p_st.toa.npi; | |
| 2868 p_sm->fo = p_st.fo; | |
| 2869 p_sm->scts =p_st.vpabs_scts ; | |
| 2870 | |
| 2871 return (retCode); | |
| 2872 } | |
| 2873 /*==== EOF ========================================================*/ |
