FreeCalypso > hg > fc-tourmaline
view cdg-hybrid/sap/mnsms.pdf @ 303:f76436d19a7a default tip
!GPRS config: fix long-standing AT+COPS chance hanging bug
There has been a long-standing bug in FreeCalypso going back years:
sometimes in the AT command bring-up sequence of an ACI-only MS,
the AT+COPS command would produce only a power scan followed by
cessation of protocol stack activity (only L1 ADC traces), instead
of the expected network search sequence. This behaviour was seen
in different FC firmware versions going back to Citrine, and seemed
to follow some law of chance, not reliably repeatable.
This bug has been tracked down and found to be specific to !GPRS
configuration, stemming from our TCS2/TCS3 hybrid and reconstruction
of !GPRS support that was bitrotten in TCS3.2/LoCosto version.
ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3
version and had to be pulled from TCS2 - but as it turns out,
there is a new field in the MMR_REG_REQ primitive that needs to be
set correctly, and that psa_mms.c module is the place where this
initialization needed to be added.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 08 Jun 2023 08:23:37 +0000 |
parents | 35f7a1dc9f7d |
children |
line wrap: on
line source
;******************************************************************************** ;*** File : mnsms.pdf ;*** Creation : Wed Mar 11 09:58:26 CST 2009 ;*** XSLT Processor : Apache Software Foundation / http://xml.apache.org/xalan-j / supports XSLT-Ver: 1 ;*** Copyright : (c) Texas Instruments AG, Berlin Germany 2002 ;******************************************************************************** ;*** Document Type : Service Access Point Specification ;*** Document Name : mnsms ;*** Document No. : 6147.103.96.107 ;*** Document Date : 2002-04-19 ;*** Document Status: BEING_PROCESSED ;*** Document Author: SBK ;******************************************************************************** PRAGMA SRC_FILE_TIME "Thu Nov 29 09:48:28 2007" PRAGMA LAST_MODIFIED "2002-04-19" PRAGMA ID_AND_VERSION "6147.103.96.107" CONST SMS_MSG_LEN 140 ; Length of message text counted as octets CONST SMS_CMD_LEN 157 ; Length of command data (number of octets) CONST SIM_PDU_LEN 175 ; Length of SMS data stored in nonvolatile memory (SIM/ME) EXTERN CONST @p_gsmcom - SMSCP_ORIGINATING_ENTITY@ SMSCP_ORIGINATING_ENTITY ; mask for indicating the originating entity of a cause is SMS-CP EXTERN CONST @p_gsmcom - SMSRP_ORIGINATING_ENTITY@ SMSRP_ORIGINATING_ENTITY ; mask for indicating the originating entity of a cause is SMS-RP EXTERN CONST @p_gsmcom - SMSTP_ORIGINATING_ENTITY@ SMSTP_ORIGINATING_ENTITY ; mask for indicating the originating entity of a cause is SMS-CP VALTAB VAL_mem_type VAL 1 MEM_ME "mobile equipment memory 1" VAL 3 MEM_SM "subscriber identity module memory" VAL 5 MEM_SR "status report memory" VALTAB VAL_cause VAL 0b1000100111111111 SMS_NO_ERROR "No error" VAL 0b1100100100000000 SMS_CAUSE_PARAM_WRONG "Wrong parameter in primitive" VAL 0b1100100100000001 SMS_CAUSE_ENTITY_BUSY "Entity is busy" VAL 0b1100100100000010 SMS_CAUSE_OPER_NOT_ALLW "Operation not allowed" VAL 0b1100100100000011 SMS_CAUSE_OPER_NOT_SUPP "Operation not supported" VAL 0b1100100100000100 SMS_CAUSE_SIM_BUSY "SIM busy" VAL 0b1100100100000101 SMS_CAUSE_MEM_FAIL "Memory failure" VAL 0b1100100100000110 SMS_CAUSE_INV_INDEX "Invalid memory index" VAL 0b1100100100001000 SMS_CAUSE_MEM_FULL "Memory full" VAL 0b1100100100001001 SMS_CAUSE_NO_SERVICE "No network service" VAL 0b1100100100001010 SMS_CAUSE_NET_TIMEOUT "Network timeout" VAL 0b1100100100001011 SMS_CAUSE_UNEXP_CNMA "No +CNMA acknowledgement expected" VAL 0b1100100100001111 SMS_CAUSE_OTHER_ERROR "Any other error" VAL 0b1100100100001100 SMS_CAUSE_MEM_AVAIL "Memory available after full" VAL 0b1100100100001110 SMS_CAUSE_FAILED_MSG_NOT_FOUND %REL99% "Failed Message not found during Transmission" VALTAB VAL_state VAL 0x3 - 0xFE "reserved, to be treated as SMS inoperable" VAL 0 SMS_STATE_READY "SMS is full operable" VAL 1 SMS_STATE_INITIALISING "SMS is in initialisation state" VAL 2 SMS_STATE_BUSY "SMS is in a busy condition" VAL 0xFF SMS_STATE_NOT_AVAILABLE "SMS is inoperable" VALTAB VAL_condx VAL 3 - 255 "reserved, interpret as 'overwrite any'" VAL 0 SMS_CONDX_OVR_NON "do not overwrite an existing message" VAL 1 SMS_CONDX_OVR_MO "overwrite only an exisiting mobile originated message" VAL 2 SMS_CONDX_OVR_ANY "overwrite any existing message" VALTAB VAL_modify VAL 5 - 255 "reserved, interpret as 'complete substitution'" VAL 0 SMS_MODIFY_NON "no modification" VAL 1 SMS_MODIFY_TPOA "substitution of TP-OA" VAL 2 SMS_MODIFY_SCA "substitution of SCA" VAL 3 SMS_MODIFY_TPOA_SCA "substitution of TP-OA and SCA" VAL 4 SMS_MODIFY_ALL "substitution of the complete message" VALTAB VAL_rec_num VAL 0x0 SMS_RECORD_NOT_EXIST "record is not existing" VALTAB VAL_status VAL 0x0 SMS_RECORD_FREE "Free record" VAL 0x3 SMS_RECORD_REC_UNREAD "MT record, not read" VAL 0x1 SMS_RECORD_REC_READ "MT record, already read" VAL 0x7 SMS_RECORD_STO_UNSENT "MO record, not sent" VAL 0x5 SMS_RECORD_STO_SENT "MO record, already sent, status report not requested" VAL 0x0D SMS_RECORD_STAT_UNRCVD "MO record, already sent, status report requested, not received" VAL 0x15 SMS_RECORD_STAT_UNSTRD "MO record, already sent, status report received, not stored" VAL 0x1D SMS_RECORD_STAT_STRD "MO record, already sent, status report received and stored" VAL 0xE0 SMS_RECORD_INVALID "The record keeps unrecognizable data" VALTAB VAL_mt VAL 0 MT0 "Mobile Terminated Mode 0" VAL 1 MT1 "Mobile Terminated Mode 1" VAL 2 MT2 "Mobile Terminated Mode 2" VAL 3 MT3 "Mobile Terminated Mode 3" VAL 4 MT_DEF "Mobile Terminated Mode Default" VALTAB VAL_ds VAL 0 DS0 "Status Report Mode 0: no status report to be returned" VAL 1 DS1 "Status Report Mode 1: status report returned to MMI" VAL 2 DS2 "Status Report Mode 2: status report stored, if possible" VALTAB VAL_mhc VAL 0 SMS_MHC_DEF "default (Phase 2)" VAL 2 SMS_MHC_PH2 "Phase 2" VAL 3 SMS_MHC_PH2PLUS "Phase 2+" VALTAB VAL_read_mode VAL 0 READ_NORMAL "Normal reading" VAL 1 READ_PREVIEW "Reading without preview" VAL 2 READ_STATUS_CHANGE "Change only status" VALTAB VAL_resp VAL 0 SMS_RP_ACK "send RP-ACK to network" VAL 1 SMS_RP_ERROR "send RP-ERROR to network" VALTAB VAL_mo_sms_serv VAL 0 GPRS_SMS_GPRS_ONLY "Use GPRS only for MO SMS" VAL 1 GPRS_SMS_CCT_ONLY "Use CCT only for MO SMS" VAL 2 GPRS_SMS_GPRS_PREF "Use GPRS in preference for MO SMS" VAL 3 GPRS_SMS_CCT_PREF "Use CCT in preference for MO SMS" VALTAB VAL_query VAL 1 SMS_QUERY_DELIVER_STATUS "Query Request is for delivery status (pause or resume)" VALTAB VAL_deliver_status VAL 0x10 SMS_DELIVER_STATUS_PAUSE "SMS delivery paused by user" VAL 0x11 SMS_DELIVER_STATUS_RESUME "SMS delivery to user allowed" VALTAB VAL_cmms_mode VAL 0 CMMS_MODE_DEF "Default value of 0 for +CMMS mode. The mode switches to 0 when timer expires if the mode set was 1. " VAL 1 CMMS_MODE_ONE "Mode value of one for +CMMS mode. For this mode set, when the timer expires, mode is switched back to 0." VAL 2 CMMS_MODE_TWO "Mode value of two for +CMMS mode. For this mode set, even after the timer expiry mode is not switched to 0" VALTAB VAL_delete_status VAL 0 CMGD_DEL_INDEX "Delete the messages specified by the index." VAL 1 CMGD_DEL_READ "Ignore the index and delete all the read messages." VAL 2 CMGD_DEL_READ_SENT "Ignore the index and delete all the read and sent messages." VAL 3 CMGD_DEL_READ_SENT_UNSENT "Ignore the index and delete all the read, send and unsent messages." VAL 4 CMGD_DEL_ALL "Ignore the index and delete all the messages whatever the status it is." VALTAB VAL_auto_rep_flag %REL99% VAL 0 AUTO_REP_FLAG_DISABLED %REL99% "Do not attempt retransmission" VAL 1 AUTO_REP_FLAG_ENABLED %REL99% "Attempt retransmission " VAR mem_type "memory type" B VAL @p_mnsms - VAL_mem_type@ VAR pref_mem_3 "memory type" B VAR cause "error code" S VAL @p_mnsms - VAL_cause@ VAR state "State of the SMS Entity" B VAL @p_mnsms - VAL_state@ VAR condx "write condition" B VAL @p_mnsms - VAL_condx@ VAR tp_mr "TP message reference" B VAR modify "Modifier" B VAL @p_mnsms - VAL_modify@ VAR rec_num "record number" B VAL @p_mnsms - VAL_rec_num@ VAR rec_next "number of a following record with a valid message, if existent" B VAL @p_mnsms - VAL_rec_num@ VAR rec_max "maximum number of records (1..255) in EF(SMS) or other memory" B VAL @p_mnsms - VAL_rec_num@ VAR rec_status "number of a record in EF(SMSR) related to the given stored message" B VAL @p_mnsms - VAL_rec_num@ VAR status "message status" B VAL @p_mnsms - VAL_status@ VAR mt "mobile terminated message handling" B VAL @p_mnsms - VAL_mt@ VAR ds "status report message handling" B VAL @p_mnsms - VAL_ds@ VAR mhc "status report message handling" B VAL @p_mnsms - VAL_mhc@ VAR read_mode "Read Mode" B VAL @p_mnsms - VAL_read_mode@ VAR resp "type of response" B VAL @p_mnsms - VAL_resp@ VAR mo_sms_serv "MO SMS Service" B VAL @p_mnsms - VAL_mo_sms_serv@ VAR l_buf "command length" S VAR o_buf "command offset" S VAR buf "command data" B VAR query_type "specifies to which status the query request refers to" B VAL @p_mnsms - VAL_query@ VAR deliver_status "sms delivery status - pause or resume" B VAL @p_mnsms - VAL_deliver_status@ VAR cmms_mode "Specifies the mode for +CMMS" B VAL @p_mnsms - VAL_cmms_mode@ VAR tmms_val "Timer value for +CMMS command" S VAR delete_status "Delete flag" B VAL @p_mnsms - VAL_delete_status@ VAR delete_rec_next "Next Record to be deleted." B VAR data "IMEI and category status of the mobile to be extracted from TP user data" B VAR len "length of the OTA response" B VAR packedlen "length of the OTA response" B VAR auto_rep_flag %REL99% "Added auto_rep_flag variable" B VAR resend_count %REL99% "To resend the count to MMI during retransmission" B VAR max_retrans %REL99% "Maximum number of retransmission allowed which is communicated to MMI" B COMP sms_sdu "SIM-PDU" { l_buf ; command length o_buf ; command offset buf [SIM_PDU_LEN] ; command data } ; MNSMS_MESSAGE_IND 0x8008400D ; MNSMS_REPORT_IND 0x8006400D ; MNSMS_STATUS_IND 0x8007400D ; MNSMS_DELETE_REQ 0x8000000D ; MNSMS_DELETE_CNF 0x8000400D ; MNSMS_READ_REQ 0x8001000D ; MNSMS_READ_CNF 0x8001400D ; MNSMS_STORE_REQ 0x8002000D ; MNSMS_STORE_CNF 0x8002400D ; MNSMS_SUBMIT_REQ 0x8003000D ; MNSMS_SUBMIT_CNF 0x8003400D ; MNSMS_COMMAND_REQ 0x8004000D ; MNSMS_COMMAND_CNF 0x8004400D ; MNSMS_ACK_RES 0x8008000D ; MNSMS_CONFIGURE_REQ 0x8005000D ; MNSMS_ERROR_IND 0x8009400D ; MNSMS_MO_SERV_REQ 0x800C000D ; MNSMS_MO_SERV_CNF 0x800C400D ; MNSMS_PAUSE_REQ 0x8006000D ; MNSMS_RESUME_REQ 0x8007000D ; MNSMS_RESUME_CNF 0x800A400D ; MNSMS_QUERY_REQ 0x800B000D ; MNSMS_QUERY_CNF 0x800B400D ; MNSMS_OTA_MESSAGE_IND 0x800D400D ; MNSMS_OTA_MESSAGE_RES 0x800D000D ; MNSMS_RETRANS_REQ 0x8009000D ; MNSMS_RETRANS_CNF 0x8005400D ; MNSMS_SEND_PROG_IND 0x800E400D PRIM MNSMS_MESSAGE_IND 0x8008400D { mem_type ; memory type rec_num ; record number rec_max ; maximum number of records status ; sms status sms_sdu ; SIM-PDU } PRIM MNSMS_REPORT_IND 0x8006400D { state ; SMS state < () cmms_mode > ; Mode value for +CMMS command } PRIM MNSMS_STATUS_IND 0x8007400D { sms_sdu ; SIM-PDU } PRIM MNSMS_DELETE_REQ 0x8000000D { mem_type ; memory type rec_num ; record number delete_status ; Delete flag } PRIM MNSMS_DELETE_CNF 0x8000400D { mem_type ; memory type rec_num ; record number cause ; Error code delete_rec_next ; Next Record } PRIM MNSMS_READ_REQ 0x8001000D { mem_type ; memory type rec_num ; record number read_mode ; read mode status ; message status } PRIM MNSMS_READ_CNF 0x8001400D { mem_type ; memory type rec_num ; record number rec_next ; number of next record rec_max ; maximum number of records cause ; Error code rec_status ; status record status ; message status sms_sdu ; SIM-PDU } PRIM MNSMS_STORE_REQ 0x8002000D { mem_type ; memory type rec_num ; record number condx ; write condition status ; message status sms_sdu ; SIM-PDU } PRIM MNSMS_STORE_CNF 0x8002400D { mem_type ; memory type rec_num ; record number cause ; Error code } PRIM MNSMS_SUBMIT_REQ 0x8003000D { mem_type ; memory type rec_num ; record number condx ; write condition modify ; Modifier auto_rep_flag %REL99% ; Automatic repeat sms_sdu ; SIM-PDU } PRIM MNSMS_SUBMIT_CNF 0x8003400D { mem_type ; memory type rec_num ; record number cause ; Error code tp_mr ; TP Message Reference sms_sdu ; SIM-PDU } PRIM MNSMS_COMMAND_REQ 0x8004000D { auto_rep_flag %REL99% ; Automatic repeat sms_sdu ; SIM-PDU } PRIM MNSMS_COMMAND_CNF 0x8004400D { cause ; Error code tp_mr ; TP Message Reference sms_sdu ; SIM-PDU } PRIM MNSMS_ACK_RES 0x8008000D { resp ; type of response sms_sdu ; SIM-PDU } PRIM MNSMS_CONFIGURE_REQ 0x8005000D { pref_mem_3 ; preferred memory 3 mt ; mobile terminated message handling ds ; status report handling mhc ; message handling compatibility < () cmms_mode > ; mode value of +CMMS command < () tmms_val > ; timer Value for +CMMS comamnd } PRIM MNSMS_ERROR_IND 0x8009400D { cause ; Error code } PRIM MNSMS_MO_SERV_REQ 0x800C000D { mo_sms_serv ; MO SMS Service } PRIM MNSMS_MO_SERV_CNF 0x800C400D { mo_sms_serv ; MO SMS Service } PRIM MNSMS_PAUSE_REQ 0x8006000D { } PRIM MNSMS_RESUME_REQ 0x8007000D { } PRIM MNSMS_RESUME_CNF 0x800A400D { cause ; Error Code } PRIM MNSMS_QUERY_REQ 0x800B000D { query_type ; Primitive Item } PRIM MNSMS_QUERY_CNF 0x800B400D { query_type ; Primitive Item < () deliver_status > ; Primitive Item } PRIM MNSMS_OTA_MESSAGE_IND 0x800D400D { EXTERN @m_sms - tp_pid@ tp_pid ; Primitive Item EXTERN @m_sms - tp_dcs@ tp_dcs ; Primitive Item EXTERN @m_sms - tp_ud@ tp_ud ; Primitive Item } PRIM MNSMS_OTA_MESSAGE_RES 0x800D000D { EXTERN @m_sms - tp_pid@ tp_pid ; Primitive Item EXTERN @m_sms - tp_dcs@ tp_dcs ; Primitive Item len ; Primitive Item packedlen ; Primitive Item data [20] ; Primitive Item } PRIM MNSMS_RETRANS_REQ 0x8009000D %REL99% { auto_rep_flag %REL99% ; auto repeat flag } PRIM MNSMS_RETRANS_CNF 0x8005400D %REL99% { cause ; error cause mem_type ; memory type rec_num ; record number tp_mr ; message reference sms_sdu ; Primitive Item } PRIM MNSMS_SEND_PROG_IND 0x800E400D %REL99% { resend_count %REL99% ; Resend count to MMI max_retrans %REL99% ; Max retrans allowed(=1) }