view src/g23m-gsm/sms/sms_em.h @ 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 fa8dc04885d8
children
line wrap: on
line source

/*
+-----------------------------------------------------------------------------
|  Project :
|  Modul   :
+-----------------------------------------------------------------------------
|  Copyright 2002 Texas Instruments Berlin, AG
|                 All rights reserved.
|
|                 This file is confidential and a trade secret of Texas
|                 Instruments Berlin, AG
|                 The receipt of or possession of this file does not convey
|                 any rights to reproduce or disclose its contents or to
|                 manufacture, use, or sell anything it may describe, in
|                 whole, or in part, without the specific written consent of
|                 Texas Instruments Berlin, AG.
+-----------------------------------------------------------------------------
|  Purpose : Engineering Mode (EM) Declarations + Macros
|
+-----------------------------------------------------------------------------
*/
#ifndef SMS_EM_H
#define SMS_EM_H

#ifdef FF_EM_MODE

/* ----------------- data declarations for EM ------------- */
/*
 *  Ring buffer is by one bigger than max. number of prims, because it
 *  needs always one termination entry.
 *  To optimize the buffersize, the data is packed in the buffer as follows:
 *  type, length, value
 *  Value is the combination of the additional parameters as defined in 8443.601, coded as UBYTE.
*/
#define EM_SMS_BUFFER_SIZE       110

/*
*   EM_MAX_SMS_EVENTS defines maximum number of event traces for the engineering mode.
*   The number is increased by one to ensure that the event numbers defined in the
*   corresponding document are the same as in the sources.
*/
#define EM_MAX_SMS_EVENTS      34

/*
*  The offset is used to indicate the source entity the event trace is from.
*  L1/ALR = 0x00, DL = 0x2D, RR = 0x37, MM = 0x5F, CC = 0x78, SS = 0xAF, SMS = 0xBE, SIM = E1
*/
#define SMS_OFFSET             0xBE

/*
*  Type is combination of entity index(upper nibble) plus event number(lower nibble).
*  Bit 8  7  6  5  4  3  2  1
*  |   entity    |  event number |
*/
#define SMS_V_1              (1 + SMS_OFFSET)
#define SMS_V_2              (2 + SMS_OFFSET)
#define SMS_V_3              (3 + SMS_OFFSET)
#define SMS_V_4              (4 + SMS_OFFSET)
#define SMS_V_5              (5 + SMS_OFFSET)
#define SMS_V_6              (6 + SMS_OFFSET)
#define SMS_V_7              (7 + SMS_OFFSET)
#define SMS_V_8              (8 + SMS_OFFSET)
#define SMS_V_9              (9 + SMS_OFFSET)
#define SMS_V_10             (10+ SMS_OFFSET)
#define SMS_V_11             (11+ SMS_OFFSET)
#define SMS_V_12             (12+ SMS_OFFSET)
#define SMS_V_13             (13+ SMS_OFFSET)
#define SMS_V_14             (14+ SMS_OFFSET)
#define SMS_V_15             (15+ SMS_OFFSET)
#define SMS_V_16             (16+ SMS_OFFSET)
#define SMS_V_17             (17+ SMS_OFFSET)
#define SMS_V_18             (18+ SMS_OFFSET)
#define SMS_V_19             (19+ SMS_OFFSET)
#define SMS_V_20             (20+ SMS_OFFSET)
#define SMS_V_21             (21+ SMS_OFFSET)
#define SMS_V_22             (22+ SMS_OFFSET)
#define SMS_V_23             (23+ SMS_OFFSET)
#define SMS_V_24             (24+ SMS_OFFSET)
#define SMS_V_25             (25+ SMS_OFFSET)
#define SMS_V_26             (26+ SMS_OFFSET)
#define SMS_V_27             (27+ SMS_OFFSET)
#define SMS_V_28             (28+ SMS_OFFSET)
#define SMS_V_29             (29+ SMS_OFFSET)
#define SMS_V_30             (30+ SMS_OFFSET)
#define SMS_V_31             (31+ SMS_OFFSET)
#define SMS_V_32             (32+ SMS_OFFSET)
#define SMS_V_33             (33+ SMS_OFFSET)

EXTERN BOOL sms_v[EM_MAX_SMS_EVENTS];
EXTERN UBYTE em_change_flag;
EXTERN UBYTE em_sms_event_buffer[EM_SMS_BUFFER_SIZE];
EXTERN UBYTE em_sms_buffer_write;

/*-------------------Functions------------*/

EXTERN void sms_em_sms_event_req      (T_EM_SMS_EVENT_REQ *em_sms_event_req);

/*
 * If all entities are linked into one module this definitions
 * prefixes all this functions with the enity name
 */
#ifdef OPTION_MULTITHREAD
  #define em_write_buffer_2         _ENTITY_PREFIXED(em_write_buffer_2)
  #define em_write_buffer_3         _ENTITY_PREFIXED(em_write_buffer_3)
  #define em_write_buffer_3a        _ENTITY_PREFIXED(em_write_buffer_3a)
  #define em_write_buffer_4         _ENTITY_PREFIXED(em_write_buffer_4)
  #define em_write_buffer_4a        _ENTITY_PREFIXED(em_write_buffer_4a)
  #define em_write_buffer_5         _ENTITY_PREFIXED(em_write_buffer_5)
  #define em_write_buffer_6         _ENTITY_PREFIXED(em_write_buffer_6)
  #define check_write_index    _ENTITY_PREFIXED(check_write_index)
#endif

EXTERN UBYTE em_write_buffer_2       (UBYTE event_no);
EXTERN UBYTE em_write_buffer_3       (UBYTE event_no, UBYTE value);
EXTERN UBYTE em_write_buffer_3a      (UBYTE event_no, USHORT value);
EXTERN UBYTE em_write_buffer_4       (UBYTE event_no, UBYTE value1, UBYTE value2);
EXTERN UBYTE em_write_buffer_4a      (UBYTE event_no, UBYTE value,  USHORT cs);
EXTERN UBYTE em_write_buffer_5       (UBYTE event_no, UBYTE value1, UBYTE value2, UBYTE value3);
EXTERN UBYTE em_write_buffer_6       (UBYTE event_no, UBYTE value,  UBYTE value1, UBYTE value2, UBYTE value3);

EXTERN void em_init_sms_event_trace(void);


/*------------------- Macros --------------*/
#define SMS_EM_SET_CHANGE_FLAG_1\
      em_change_flag = 1;

#define SMS_EM_SET_CHANGE_FLAG_2\
      em_change_flag = 2;

#define SMS_EM_MO_SHORT_MESSAGE\
                    /* MO short message **/\
                  if (sms_v[1])\
                  {\
                    sms_v[1] = em_write_buffer_3 (SMS_V_1, SMS_TP_REF(sms_data));\
                  }  /* sms_v[1] */

#define SMS_EM_SEND_RP_DATA\
        /* SEND RP-Data*/\
        if (sms_v[2])\
        {\
           sms_v[2] = em_write_buffer_3 (SMS_V_2, msg_ref);\
        }  /* sms_v[2] */


#define SMS_EM_MM_CONNECTION_ESTABLISHMENT\
          /* MM connection establishment */\
          if (sms_v[3])\
          {\
           sms_v[3] = em_write_buffer_3 (SMS_V_3, SMS_INST.ti);\
          }  /* sms_v[3] */

#define SMS_EM_MM_CONNECTION_ESTABLISHED\
  /* MM connection established */\
  if (sms_v[4])\
  {\
   sms_v[4] = em_write_buffer_3 (SMS_V_4, establish_cnf->ti);\
  }  /* sms_v[4] */

#define SMS_EM_SEND_CP_DATA\
          /* Send CP-Data */\
        if (sms_v[5])\
        {\
         sms_v[5] = em_write_buffer_2 (SMS_V_5);\
        }  /* sms_v[5] */

#define SMS_EM_MM_CONNECTION_FAILED\
      /* MM connection failed */\
    if (sms_v[6])\
    {\
     sms_v[6] = em_write_buffer_3a(SMS_V_6, release_ind->cause);\
    }  /* sms_v[6] */

#define SMS_EM_TIMEOUT_TR1M\
  /* Timeout TR1M */\
  if (sms_v[7])\
  {\
    sms_v[7] = em_write_buffer_2 (SMS_V_7);\
  }  /* sms_v[7] */

#define SMS_EM_RECEIVE_CP_ACKNOWLEDGE\
            /* Receive CP-ACK */\
            if (sms_v[8])\
            {\
              sms_v[8] = em_write_buffer_3 (SMS_V_8, ti);\
            }  /* sms_v[8] */

#define SMS_EM_RECEIVE_CP_DATA\
            /* Receive CP-Data */\
            if (sms_v[9])\
            {\
              sms_v[9] = em_write_buffer_3 (SMS_V_9, ti);\
            }  /* sms_v[9] */

#define SMS_EM_RECEIVE_UNKNOWN\
              /* Receive unknown */\
            if (sms_v[10])\
            {\
               sms_v[10] = em_write_buffer_4 (SMS_V_10, ti, _decodedMsg[0]);\
            }  /* sms_v[10] */

#define SMS_EM_SEND_CP_ERROR\
        /* Send CP-Error */\
      if (sms_v[11])\
      {\
        sms_v[11] = em_write_buffer_2 (SMS_V_11);\
      }  /* sms_v[11] */

#define SMS_EM_RECEIVE_CP_ERROR\
            /* Receive CP-Error */\
            if (sms_v[12])\
            {\
              sms_v[12] = em_write_buffer_2 (SMS_V_12);\
            }  /* sms_v[12] */

#define SMS_EM_LOSS_OF_MM_CONNECTION\
    /* Loss of MM connection */\
    if (sms_v[13])\
    {\
     sms_v[13] = em_write_buffer_2 (SMS_V_13);\
    }  /* sms_v[13] */

#define SMS_EM_ABORT_OF_MM_CONNECTION\
    /* Abort of MM-Connection */\
  if (sms_v[14])\
  {\
    sms_v[14] = em_write_buffer_2 (SMS_V_14);\
  }  /* sms_v[14] */

#define SMS_EM_TIMEOUT_TC1M\
  /* Timeout TC1M */\
  if (sms_v[15])\
  {\
    sms_v[15] = em_write_buffer_2 (SMS_V_15);\
  }  /* sms_v[15] */

#define SMS_EM_TIMEOUT_TR2M\
    /* Timeout TR2M */\
  if (sms_v[16])\
  {\
   sms_v[16] = em_write_buffer_2 (SMS_V_16);\
  }  /* sms_v[16] */

#define SMS_EM_SEND_CP_ACKNOWLEDGE\
        /* Send CP ACK */\
      if (sms_v[17])\
      {\
        sms_v[17] = em_write_buffer_2 (SMS_V_17);\
      }  /* sms_v[17] */

#define SMS_EM_RECEIVE_RP_ERROR\
            /* Receive RP-Error */\
            if (sms_v[18])\
            {\
              sms_v[18] = em_write_buffer_4 (SMS_V_18, cp_user_data_dl->reference,\
                            cp_user_data_dl->rp_error.rp_cause.rp_cause_value);\
            }  /* sms_v[18] */

#define SMS_EM_RECEIVE_RP_AKNOWLEDGE\
            /* RECEIVE RP-Akn */\
            if (sms_v[19])\
            {\
              sms_v[19] = em_write_buffer_3 (SMS_V_19, cp_user_data_dl->reference);\
            }  /* sms_v[19] */

#define SMS_EM_RECEIVE_RP_DATA\
          /* Receive RP-DATA */\
          if (sms_v[20])\
          {\
            sms_v[20] = em_write_buffer_3 (SMS_V_20, cp_user_data_dl->reference);\
          }  /* sms_v[20] */

#define SMS_EM_RECEIVE_UNKNOWN_2\
              /* Receive Unknown */\
            if (sms_v[21])\
            {\
              sms_v[21] = em_write_buffer_4 (SMS_V_21, cp_user_data_dl->reference,\
                                        cp_user_data_dl->rp_mti);\
            }  /* sms_v[21] */

#define SMS_EM_SEND_RP_ERROR\
          /* Send RP-Error */\
          if (sms_v[22])\
          {\
            sms_v[22] = em_write_buffer_4 (SMS_V_22, SMS_RP_REF(sms_data),\
                                      SMS_RP_CS_MSG_NOT_COMP);\
          }  /* sms_v[22] */

#define SMS_EM_MO_SHORT_MESSAGE_COMMAND\
            /* MO short message */\
            if (sms_v[23])\
            {\
              sms_v[23] = em_write_buffer_4 (SMS_V_23, SMS_TP_REF(sms_data),\
                                        sim_pdu->tpdu.b_tpdu[4]); /* TP-MN */\
            }  /* sms_v[23] */

#define SMS_EM_DISPLAY_MT_SHORT_MESSAGE\
      /* Display MT short message */\
      if (sms_v[24])\
      {\
        sms_v[24] = em_write_buffer_4 (SMS_V_24, sms_deliver->tp_pid,\
                                  sms_deliver->tp_dcs);\
      }  /* sms_v[24] */

#define SMS_EM_STORE_MT_MESSAGE\
    if (record NEQ SMS_RECORD_NOT_EXIST)\
    {\
      /* Store MT message in ME/SIM */\
      if (sms_v[25])\
      {\
        sms_v[25] = em_write_buffer_4 (SMS_V_25, mem_type, record);\
      }  /* sms_v[25] */\
    }

#define SMS_EM_REPLACE_SMS_IN_ME\
          /* Replace SMS in ME */\
          if (sms_v[26])\
          {\
            sms_v[26] = em_write_buffer_6 (SMS_V_26, MEM_ME, (UBYTE)i,\
                                      sms_deliver->tp_pid,\
                                      sms_deliver->tp_dcs);\
          }  /* sms_v[26] */

#define SMS_EM_REPLACE_SMS_IN_SIM\
          /* Replace SMS in SIM */\
          if (sms_v[26])\
          {\
            sms_v[26] = em_write_buffer_6 (SMS_V_26, MEM_SM, record,\
                                      SMS_PID(sms_data), SMS_DCS(sms_data));\
          }  /* sms_v[26] */

#define SMS_EM_SMS_STATUS_MESSAGE\
        /* SMS status message  */\
        if (sms_v[27])\
        {\
          sms_v[27] = em_write_buffer_2 (SMS_V_27);\
        }  /* sms_v[27] */

#define SMS_EM_RECEIVE_SIM_TOOLKIT_DATA_DOWNLOAD\
        /* Receive SIM toolkit data download */\
        if (sms_v[28])\
        {\
          sms_v[28] = em_write_buffer_4 (SMS_V_28, SMS_DCS(sms_data), SMS_PID(sms_data));\
        }  /* sms_v[28] */

#define SMS_EM_STORE_MO_SHORT_MESSAGE\
            if (em_change_flag == 1) /* new sms */\
            {\
              /* Store SMS */\
              if (sms_v[29])\
              {\
                sms_v[29] = em_write_buffer_4 (SMS_V_29, MEM_ME, (UBYTE)index);\
              }  /* sms_v[29] */\
            }

#define SMS_EM_STORE_MO_SHORT_MESSAGE_2\
        if (em_change_flag == 1)      /* new sms */\
        {\
          /* Store SMS */\
          if (sms_v[29])\
          {\
            sms_v[29] = em_write_buffer_4 (SMS_V_29, MEM_SM, record);\
          }  /* sms_v[29] */\
        }

#define SMS_EM_CHANGE_SHORT_MESSAGE\
  if (em_change_flag == 2)  /* change  sms */\
  {\
  /* Store SMS */\
    if (sms_v[30])\
    {\
      sms_v[30] = em_write_buffer_4 (SMS_V_30, MEM_ME, (UBYTE)index);\
    }  /* sms_v[30] */\
  }

#define SMS_EM_CHANGE_SHORT_MESSAGE_2\
  if (em_change_flag == 2)   /* change  sms */\
  {\
  /* Store SMS */\
    if (sms_v[30])\
    {\
      sms_v[30] = em_write_buffer_4 (SMS_V_30, MEM_SM, record);\
    }  /* sms_v[30] */\
  }

#define SMS_EM_READ_SHORT_MESSAGE\
          /* Read short message */\
        if (sms_v[31])\
        {\
          sms_v[31] = em_write_buffer_4 (SMS_V_31, MEM_ME, (UBYTE)index);\
        }  /* sms_v[31] */

#define SMS_EM_READ_SHORT_MESSAGE_2\
            /* Read short message - MO SMS*/\
            if (sms_v[31])\
            {\
              sms_v[31] = em_write_buffer_4 (SMS_V_31, MEM_SM, record);\
            }  /* sms_v[31] */

#define SMS_EM_DELETE_SHORT_MESSAGE\
    if (error EQ SIM_NO_ERROR)\
    {\
    /* Delete short message */\
      if (sms_v[32])\
      {\
        sms_v[32] = em_write_buffer_4 (SMS_V_32, mem_type, record);\
      }  /* sms_v[32] */\
    }

#define SMS_EM_UNKNOWN_TRANSACTION\
          /* Unknown Transaction */\
        if (sms_v[33])\
        {\
         sms_v[33] = em_write_buffer_5 (SMS_V_33, ti, _decodedMsg[0], pd);\
        }  /* sms_v[33] */

#else /*FF_EM_MODE */

#define SMS_EM_SET_CHANGE_FLAG_1
#define SMS_EM_SET_CHANGE_FLAG_2

#define SMS_EM_MO_SHORT_MESSAGE               /*Event  1*/
#define SMS_EM_SEND_RP_DATA                   /*Event  2*/
#define SMS_EM_MM_CONNECTION_ESTABLISHMENT    /*Event  3*/
#define SMS_EM_MM_CONNECTION_ESTABLISHED      /*Event  4*/
#define SMS_EM_SEND_CP_DATA                   /*Event  5*/
#define SMS_EM_MM_CONNECTION_FAILED           /*Event  6*/
#define SMS_EM_TIMEOUT_TR1M                   /*Event  7*/
#define SMS_EM_RECEIVE_CP_ACKNOWLEDGE         /*Event  8*/
#define SMS_EM_RECEIVE_CP_DATA                /*Event  9*/
#define SMS_EM_RECEIVE_UNKNOWN                /*Event 10*/
#define SMS_EM_SEND_CP_ERROR                  /*Event 11*/
#define SMS_EM_RECEIVE_CP_ERROR               /*Event 12*/
#define SMS_EM_LOSS_OF_MM_CONNECTION          /*Event 13*/
#define SMS_EM_ABORT_OF_MM_CONNECTION         /*Event 14*/
#define SMS_EM_TIMEOUT_TC1M                   /*Event 15*/
#define SMS_EM_TIMEOUT_TR2M                   /*Event 16*/
#define SMS_EM_SEND_CP_ACKNOWLEDGE            /*Event 17*/
#define SMS_EM_RECEIVE_RP_ERROR               /*Event 18*/
#define SMS_EM_RECEIVE_RP_AKNOWLEDGE          /*Event 19*/
#define SMS_EM_RECEIVE_RP_DATA                /*Event 20*/
#define SMS_EM_RECEIVE_UNKNOWN_2              /*Event 21*/
#define SMS_EM_SEND_RP_ERROR                  /*Event 22*/
#define SMS_EM_MO_SHORT_MESSAGE_COMMAND       /*Event 23*/
#define SMS_EM_DISPLAY_MT_SHORT_MESSAGE       /*Event 24*/
#define SMS_EM_STORE_MT_MESSAGE               /*Event 25*/
#define SMS_EM_REPLACE_SMS_IN_ME              /*Event 26*/
#define SMS_EM_REPLACE_SMS_IN_SIM             /*Event 26*/
#define SMS_EM_SMS_STATUS_MESSAGE             /*Event 27*/
#define SMS_EM_RECEIVE_SIM_TOOLKIT_DATA_DOWNLOAD /*Event 28*/
#define SMS_EM_STORE_MO_SHORT_MESSAGE         /*Event 29*/
#define SMS_EM_STORE_MO_SHORT_MESSAGE_2       /*Event 29*/
#define SMS_EM_CHANGE_SHORT_MESSAGE           /*Event 30*/
#define SMS_EM_CHANGE_SHORT_MESSAGE_2         /*Event 30*/
#define SMS_EM_READ_SHORT_MESSAGE             /*Event 31*/
#define SMS_EM_READ_SHORT_MESSAGE_2           /*Event 31*/
#define SMS_EM_DELETE_SHORT_MESSAGE           /*Event 32*/
#define SMS_EM_UNKNOWN_TRANSACTION            /*Event 33*/


#endif  /*FF_EM_MODE */
#endif  /* SMS_EM_H  */