view src/g23m-aci/aci/aci_cmd.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 :  GSM-F&D (8411)
|  Modul   :  ACI
+----------------------------------------------------------------------------- 
|  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 :  Definitions for the AT Command Interpreter
+----------------------------------------------------------------------------- 
*/ 

#ifndef ACI_CMD_H
#define ACI_CMD_H

#ifdef FF_ATI
#include "ati_cmd.h"
#endif /* FF_ATI */

#define KEY       15   /* Length of "+CBLA: " for instance */
#define LONG_LTH  10   /* Max length of a number of type long in a string */
#define SHORT_LTH  5
#define BYTE_LTH   3
#define HEX_LTH    8

typedef struct
{
  char *name;
  T_ACI_SMS_STOR stor;
} SMS_Memory;

typedef struct
{
  char *name;
  T_ACI_DBG_INFO stor;
} DBG_Memory;

#if (defined (ACI_CMD_C)) OR (defined (CMH_SIMF_C) AND !defined (FF_ATI))
GLOBAL const T_ACI_LAN_SUP lngs [] =
{
  {"au",  CLAN_LNG_AUT},
  {"en",  CLAN_LNG_ENG},
  {"fr",  CLAN_LNG_FRE},
  {"de",  CLAN_LNG_GER},
  {"da",  CLAN_LNG_DUT},
  {"it",  CLAN_LNG_ITA},
  {"es",  CLAN_LNG_SPA},
  {"sv",  CLAN_LNG_SWE},
  {"pt",  CLAN_LNG_POR},
  {"fi",  CLAN_LNG_FIN},
  {"no",  CLAN_LNG_NOR},
  {"el",  CLAN_LNG_GRE},
  {"tr",  CLAN_LNG_TUR},
  {"hu",  CLAN_LNG_HUN},
  {"sl",  CLAN_LNG_SLO},
  {"pl",  CLAN_LNG_POL},
  {"ru",  CLAN_LNG_RUS},
  {"in",  CLAN_LNG_IND},
  {"cs",  CLAN_LNG_CZE},
  {"zh",  CLAN_LNG_CHI},
  {"ca",  CLAN_LNG_CAN},
  {"mn",  CLAN_LNG_MAN},
  {"tw",  CLAN_LNG_TAI},
  {"ar",  CLAN_LNG_ARA},
  {NULL,  CLAN_LNG_ENG}
};
#else 
EXTERN const T_ACI_LAN_SUP lngs [];
#endif 



/*--- +CMEE -------------------------------------------------------*/

typedef enum
{
  CMEE_MOD_NotPresent   = -1,
  CMEE_MOD_Disable,
  CMEE_MOD_Numeric,
  CMEE_MOD_Verbose
}
T_ACI_CMEE_MOD;

/*----------- +CSCS -----------------------------------------------*/

typedef enum
{
  CSCS_CHSET_NotPresent = -1,
  CSCS_CHSET_Ira        =  0,
  CSCS_CHSET_Pcdn       =  1,
  CSCS_CHSET_8859_1     =  2,
  CSCS_CHSET_Pccp_437   =  3,
  CSCS_CHSET_Gsm        =  4,
  CSCS_CHSET_Hex        =  5,
  CSCS_CHSET_Ucs2       =  6,
  CSCS_CHSET_Tables     =  5
}
T_ACI_CSCS_CHSET;

/*----------- alphabets -------------------------------------------*/

typedef enum          /* see DCS in Rec. GSM 03.38 */
{
  CSCS_ALPHA_7_Bit    = 0,
  CSCS_ALPHA_8_Bit    = 1,
  CSCS_ALPHA_16_Bit   = 2,
  CSCS_ALPHA_Reserved = 3
}
T_ACI_CSCS_ALPHA;

typedef enum
{
  CSCS_DIR_GsmToIra   = 0,
  CSCS_DIR_IraToGsm   = 1
}
T_ACI_CSCS_DIR;

typedef enum
{
  GSM_ALPHA_Def,
  GSM_ALPHA_Int
}
T_ACI_GSM_ALPHA;

/*----------- +CNMI -----------------------------------------------*/

typedef enum
{
  CNMI_MOD_NotPresent       = -1,
  CNMI_MOD_Buffer,
  CNMI_MOD_DiscardOrForward,
  CNMI_MOD_BufferAndFlush
}
T_ACI_CNMI_MOD;

typedef enum
{
  CNMI_BFR_NotPresent       = -1,
  CNMI_BFR_Flush,
  CNMI_BFR_Clear
}
T_ACI_CNMI_BFR;

/*----------- other -----------------------------------------------*/

typedef enum
{
    atOk                    = 0,
    atConnect,
    atRing,
    atNoCarrier,
    atError,
    atNoDialtone,
    atBusy,
    atNoAnswer,
    atConnect1
} AtErrCode;

typedef enum
{
    copsUnknown = 0,
    copsAvail = 1,
    copsCurrent = 2,
    copsForbidden = 3
} CopsState;

typedef enum
{
    ppSimVerify = 1
} PinPending;

typedef struct
{
  struct
  {
    UBYTE  atV;
    UBYTE  atL;
    UBYTE  atM;
  }s1415;
  struct                  /* presentation flags */
  {
    UBYTE COLP_stat;
    UBYTE CCWA_stat;
    UBYTE CCBS_stat;
  }flags;
  UBYTE S[10+1];          /* Caution: for S[0..n] we need S[n+1] to be declared here!!! */

  /* the following registers above 10 are not index based and only defined if needed */
  UBYTE S30;
#ifdef GPRS
  UBYTE S99;              /* Rings until Automatic Context Rejection */
#endif /* GPRS */

  UBYTE CNMI_mode;
  UBYTE CNMI_bfr;
  struct                  /* ringing parameters */
  {
    UBYTE srcID_S0;
#ifdef GPRS
    char srcID_CGAUTO;
#endif
    UBYTE rngCnt;
    UBYTE isRng;
    T_ACI_CRING_MOD mode;
    T_ACI_CRING_SERV_TYP type1;
    T_ACI_CRING_SERV_TYP type2;
  } rngPrms;
  struct                  /* CLIP parameters */
  {
    T_ACI_CLIP_STAT stat;
    CHAR            number[MAXIMUM(MNCC_MAX_CC_CALLING_NUMBER, MNCC_MAX_CC_REDIR_NUMBER)+1];
    T_ACI_TOA       type;
    U8              validity;
    CHAR            subaddr[MNCC_SUB_LENGTH+1];
    T_ACI_TOS       satype;
#ifdef NO_ASCIIZ
    T_ACI_PB_TEXT   alpha;
#else
    CHAR            alpha[MAX_PHB_NUM_LEN+1];
#endif
  }clipPrms;
} AciCmdVars;


/* sub structure concerning AT+CREG command in ATI */
typedef enum
{
  CREG_MOD_NotPresent        = -1,
  CREG_MOD_OFF               =  0,  /* disable network registration unsolicited result code */
  CREG_MOD_ON                =  1,  /* enable network registration unsolicited result code */
  CREG_MOD_LOC_INF_ON        =  2,  /* enable network registration and location information unsolicited result code */
  CREG_MOD_LOC_INF_ON_CTXACT =  3   /* enable network registration and location information unsolicited result code 
                                       and information about activated/deactivated PDP context(s) */
}
T_ATI_CREG_MOD   /* for +CREG / +CGREG / %CGREG */;

typedef struct
{
  T_ATI_CREG_MOD  pres_mode;
  USHORT          last_presented_lac;
  USHORT          last_presented_cid;
} T_ATI_REG_MOD_LAC_CID;

typedef struct
{
  T_ATI_REG_MOD_LAC_CID  mod_lac_cid;
  T_ACI_CREG_STAT        last_presented_state;
} T_ATI_CREG;

#define LOC_INFO_STRLTH (15)
/* ACI-SPR-17218: enable the indication of GPRS info */
#define GPRS_INFO_STRLTH (5)
#define COVERAGE_INFO_STRLTH (5)

typedef enum
{
  CMD_NotPresent = -1,
  CREG_CMD,
  PercentCREG_CMD
#ifdef GPRS
  ,
  PlusCGREG_CMD,
  PercentCGREG_CMD
#endif /* GPRS */
} T_ACI_CREG_CMD;

typedef enum
{
  CNAP_DISABLED = 0,
  CNAP_ENABLED = 1
} T_ATI_CNAP_MODE;

typedef struct
{
  UBYTE  atE;
  UBYTE  atQ;
  UBYTE  atX;

  UBYTE CR_stat;
  UBYTE CRC_stat;
  UBYTE CLIP_stat;
  UBYTE CDIP_stat;  
    
  UBYTE DR_stat;
  UBYTE ILRR_stat;
  UBYTE CSDH_stat;
  UBYTE CSSI_stat;
  BYTE  CSSU_stat;
  UBYTE CUSD_stat;
  UBYTE CPI_stat;
  UBYTE CCWE_stat;
  UBYTE CAOC_stat;
  UBYTE CMEE_stat;  
  UBYTE CTTY_stat;
  UBYTE CSTAT_stat;
  UBYTE SIMIND_stat;
  T_ACI_CSCS_CHSET cscsChset;
#ifdef GPRS
  UBYTE Percent_CGEREP_stat;
  UBYTE CGEREP_mode;
  UBYTE CGEREP_bfr;
#endif

  T_ACI_CCWV_CHRG CCWV_charging;

  T_ATI_CREG creg;
  T_ATI_CREG percent_creg;
  T_ATI_CNAP_MODE cnap_mode;
  UBYTE CPRI_stat;           /* Holds the status of %CPRI */
#ifdef FF_CPHS_REL4 
  UBYTE MWI_stat;            /* Holds the status of %MWI  */
#endif /* FF_CPHS_REL4 */

}
T_ATI_USER_OUTPUT_CFG;

/* ACI-SPR-17218: Extended by gprs_ind paramter */
EXTERN void r_plus_percent_CREG  ( UBYTE           srcId,
                                   int             status,
                                   USHORT          lac,
                                   USHORT          cid,
                                   T_ACI_CREG_CMD        cmd, 
                                   T_ACI_P_CREG_GPRS_IND gprs_ind,
                                   U8               rt,
                                   BOOL                  bActiveContext );

#define CPIN_MAX_LTH (12)
/* all following lengths definitions include the null termination */
#define MAX_PWD_LENGTH (32)    /* max length for passwords          */
#define MAX_PPU_LENGTH (20)    /* max length for ppu                */
#define MAX_CM_LENGTH  (7)     /* max length for call meter values  */

/* To allow for: 'yyyy/MM/dd,hh:mm:ss+zz' or 'yyyy/MM/dd,hh:mm:ss-zz' date time format */
/* To allow for:    'yy/MM/dd,hh:mm:ss+zz' or '    yy/MM/dd,hh:mm:ss-zz' date time format */
#define DATE_TIME_LENGTH  (22)
#ifdef FF_ATI
EXTERN UBYTE aci_init (T_ATI_SRC_TYPE src_type);
#endif /* FF_ATI */

EXTERN void aci_finit (UBYTE src_id);

EXTERN  void ati_cmd_init();
EXTERN  void ati_creg_init( BYTE srcId, T_ACI_CREG_CMD cmd );

BOOL aciCmdInit (AciCmdVars *v);

#ifdef FF_ATI
int cmdCommand (T_ATI_SRC_PARAMS *src_params);
#endif /* FF_ATI */

EXTERN void   utl_chsetToGsm      ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen,
#ifdef REL99
                                    USHORT           outBufLen,
#endif /* REL99 */
                                    T_ACI_GSM_ALPHA  gsm        );
EXTERN void   utl_chsetToSim      ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm        );
EXTERN void utl_ucs2ToSim         ( UBYTE*          in,
                                    USHORT          inLen,
                                    UBYTE*          out,
                                    USHORT*         outLen,
                                    T_ACI_GSM_ALPHA gsm,
                                    T_ACI_CSCS_ALPHA alphabet   );
EXTERN void utl_ConvUcs2ToGSM     ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm,
                                    T_ACI_CSCS_ALPHA alphabet   );
EXTERN void utl_Ucs2InFormat1     ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen     );
EXTERN void utl_Ucs2InFormat2     ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen     );
EXTERN void utl_hexFromUCS2       ( UBYTE  *in, 
                                    UBYTE  *out, 
                                    USHORT  maxOutlen, 
                                    USHORT *outlen,
                                    T_ACI_GSM_ALPHA  gsm );
EXTERN USHORT   utl_chsetFromGsm    ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT           maxOutLen,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm        );
EXTERN USHORT utl_ucs2FromGsm_ussd  ( UBYTE*           in,
                                     USHORT           inLen,
                                     UBYTE*           out,
                                     USHORT           maxOutLen,
                                     USHORT*          outLen,
                                     T_ACI_GSM_ALPHA  gsm,
                                     T_ACI_CSCS_ALPHA alphabet );
EXTERN void   utl_chsetFromSim    ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT           maxOutLen,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm        );
EXTERN void   utl_hexToGsm        ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm,
                                    T_ACI_CSCS_ALPHA alphabet   );
EXTERN void   utl_ucs2ToGsm        ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm,
                                    T_ACI_CSCS_ALPHA alphabet   );
EXTERN USHORT   utl_hexFromGsm      ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT           maxOutLen,
                                    USHORT*          outLen,
                                    T_ACI_GSM_ALPHA  gsm,
                                    T_ACI_CSCS_ALPHA alphabet   );
EXTERN BOOL   utl_cvtGsmIra       ( UBYTE*           in,
                                    USHORT           inLen,
                                    UBYTE*           out,
                                    USHORT           outLen,
                                    T_ACI_CSCS_DIR   dir        );
EXTERN USHORT sprints             ( CHAR*   buf,
                                    CHAR*   arg,
                                    USHORT  len       );
EXTERN USHORT sprintq             ( CHAR*   buf,
                                    CHAR*   arg,
                                    USHORT  len       );
EXTERN void   utl_smDtaFromTe     ( UBYTE*  in,
                                    USHORT  inLen,
                                    UBYTE*  out,
                                    USHORT* outLen,
#ifdef REL99
                                    USHORT  outBufLen, 
#endif /* REL99 */
                                    UBYTE   fo,
                                    UBYTE   dcs       );
EXTERN void   utl_smDtaToTe       ( UBYTE*  in,
                                    USHORT  inLen,
                                    UBYTE*  out,
                                    USHORT  maxOutLen,
                                    USHORT* outLen,
                                    UBYTE   fo,
                                    UBYTE   dcs       );
EXTERN void   utl_cbmDtaToTe      ( UBYTE*  in,
                                    USHORT  inLen,
                                    UBYTE*  out,
                                    USHORT  maxOutLen,
                                    USHORT* outLen,
                                    UBYTE   fo,
                                    UBYTE   dcs       );
EXTERN void   utl_ussdDtaFromTe   ( UBYTE*  in,
                                    USHORT  inLen,
                                    UBYTE*  out,
                                    USHORT* outLen,
#ifdef REL99
                                    USHORT  outBufLen,
#endif /* REL99 */
                                    UBYTE   dcs       );
EXTERN USHORT   utl_ussdDtaToTe     ( UBYTE*  in,
                                    USHORT  inLen,
                                    UBYTE*  out,
                                    USHORT  maxOutLen,
                                    USHORT* outLen,
                                    UBYTE   dcs       );
EXTERN void utl_binToHex          ( UBYTE*  in,
                                    SHORT   inLen,
                                    CHAR*   out );
EXTERN USHORT utl_HexStrToBin (UBYTE*         in,
                               USHORT         inLen,
                               UBYTE*         out,
                               USHORT         outLen);
EXTERN void RetrieveLeftCmd       ( void );

EXTERN void trace_cmd_line        ( char *prefix,
                                    char *output,
                                    UBYTE srcId,
                                    USHORT output_len );

#ifdef FF_ATI
EXTERN void trace_cmd_state       ( UBYTE            srcId,
                                    T_ATI_CMD_STATE  old_state,
                                    T_ATI_CMD_STATE  new_state);
#endif /* FF_ATI */

EXTERN int utl_create_pco   (UBYTE*  buffer,
                             USHORT* length,
                             ULONG   content,
                             UBYTE   config_prot,
                             USHORT  auth_prot,
                             UBYTE*  user_name,
                             UBYTE*  password,
                             ULONG   dns1,
                             ULONG   dns2);
EXTERN int utl_analyze_pco  (UBYTE* buffer,
                             USHORT length,
                             ULONG* dns1,
                             ULONG* dns2,
                             ULONG* gateway);
GLOBAL int utl_strcasecmp (const char *s1, 
                           const char *s2);

#if defined (FF_ATI) || defined (FF_BAT)
#define CONVERT_STRING TRUE
GLOBAL void rci_display_USSD (UBYTE            srcId,
                              T_ACI_CUSD_MOD   mode,
                              UBYTE            *ussd_str,
                              UBYTE            ussd_len,
                              BOOL             cvtStr,
                              SHORT            dcs );

GLOBAL void utl_cb_percentKSIR (U8 srcId, T_ACI_KSIR *ksStat);
#endif /* defined (FF_ATI) || defined (FF_BAT) */

/*
 *-------------------------------------------------------------------
 * The following types, definitions and variables are needed for
 * storing of new message indications while the serial interface is
 * reserved for data transmission.
 *-------------------------------------------------------------------
 * START
 *-------------------------------------------------------------------
 */
#define NONE_CALL      0
#define SAT_CALL       1
#define QAT_CALL       2
#define TAT_CALL       3

#define CNMI_NONE      0
#define CNMI_CMT       1
#define CNMI_CMTI      2
#define CNMI_CBM       3
#define CNMI_CDS       4

#define CNMI_BUF_SIZE  4
#define CIEV_BUF_SIZE  2

#define T_CMT    T_MNSMS_MESSAGE_IND
typedef struct /* new message indication AT+CMTI: */
{
  T_ACI_SMS_STOR mem;
  UBYTE          index;
}
T_CMTI;
#define T_CBM    T_MMI_CBCH_IND
#define T_CDS    T_MNSMS_STATUS_IND

typedef union /* used for the different messages indications */
{
  T_CMT  cmt;
  T_CMTI cmti;
  T_CBM  cbm;
  T_CDS  cds;
}
T_CNMI_IND;

/* Removed source ID from this structure to make
   the bufferinf source independent */ /* Issue 25033 */
typedef struct
{
  UBYTE         type;
  T_CNMI_IND    indct;
}
T_CNMI_BUFFER_ELEMENT;

typedef struct
{
  UBYTE                 next;
  T_CNMI_BUFFER_ELEMENT sCnmiElement[CNMI_BUF_SIZE];
}
T_CNMI_BUFFER;

typedef struct
{
  char*          name;
  T_ACI_SMS_STAT stat;
} SMS_Stat;

#ifdef ACI_CMD_C
GLOBAL const SMS_Stat sms_stat [] =
{
  {"REC UNREAD", SMS_STAT_RecUnread },
  {"REC READ",   SMS_STAT_RecRead   },
  {"STO UNSENT", SMS_STAT_StoUnsent },
  {"STO SENT",   SMS_STAT_StoSent   },
  {"ALL",        SMS_STAT_All       },
  {NULL,         SMS_STAT_NotPresent}
};
#else
EXTERN const SMS_Stat sms_stat [];
#endif

#ifdef DTI
EXTERN void cmd_addCnmiNtry ( UBYTE type, T_CNMI_IND* newInd );
#endif
EXTERN void aci_encodeVpenh ( CHAR* vpenh_str, T_ACI_VP_ENH* vpenh );
EXTERN void rCI_IoMode      ( void );

#ifdef FF_ATI
EXTERN UBYTE            cpmsCallType;
#endif /* FF_ATI */
EXTERN BOOL             cnmiFlushInProgress;

EXTERN T_ACI_SMS_STAT cmglStat;

typedef struct
{
  UBYTE                  uiLastIndex;
  T_ACI_CIND_SIGNAL_TYPE asBufferValues[CIEV_BUF_SIZE];
} T_CIEV_SIGNAL_BUFFER;

typedef struct
{
  UBYTE                   uiLastIndex;
  T_ACI_CIND_SMSFULL_TYPE asBufferValues[CIEV_BUF_SIZE];
} T_CIEV_SMSFULL_BUFFER;

typedef struct
{
  char*          name;
  T_ACI_SMS_READ rdmode;
} SMS_RdMode;

#ifdef ACI_CMD_C
GLOBAL const SMS_RdMode sms_rdmode [] =
{
  {"READ NORMAL",     SMS_READ_Normal },
  {"READ PREVIEW",    SMS_READ_Preview   },
  {"STATUS CHANGE",   SMS_READ_StatusChange },
  {NULL,              SMS_READ_NotPresent}
};
#else
EXTERN const SMS_RdMode sms_rdmode [];
#endif

/*
 *-------------------------------------------------------------------
 * END
 *-------------------------------------------------------------------
 */
EXTERN void       aci_sendPString (UBYTE srcId, CHAR* buffer);
EXTERN void       cmd_flushCnmiBuf(void);
EXTERN void       cmd_flushCnmiBufOneByOne(void);
EXTERN UINT16     cmd_getNumberOfCnmiEntrys(void);
EXTERN T_CNMI_BUFFER_ELEMENT* cmd_getFirstCnmiMessage(void);
EXTERN T_CNMI_BUFFER_ELEMENT* cmd_getCnmiMessage(UINT16 uiIndex);
EXTERN BOOL       cmd_clearCnmiMessage(UINT16 uiIndex);
EXTERN BOOL       cmd_clearFirstCnmiMessage(void);
EXTERN BOOL       cmd_clearFirstMsgWithSrcIdInCnmiBuf(T_ACI_CMD_SRC srcId);
EXTERN void       cmd_flushCievBuf(UBYTE srcId);
EXTERN void       cmd_clearCievBuf(UBYTE srcId);
EXTERN BOOL       cmd_storeNextCnmiBufMsgToSim();
EXTERN void       cmd_clearCnmiBuf (void);
EXTERN UBYTE      aci_timeout     (USHORT handle);
EXTERN void       aciRingTimeout  (void);
EXTERN void       aciCnmaTimeout  (void);
EXTERN void       cmd_handleCnmaTimeout (void);
EXTERN void       ci_remTrailCom  (CHAR* outLine, USHORT len);
EXTERN UBYTE      toa_merge       (T_ACI_TOA type);
EXTERN T_ACI_TOA  toa_demerge     (SHORT type);
EXTERN T_ACI_TOA  toa_sms_demerge     (SHORT type);
EXTERN SHORT      tos_merge       (T_ACI_TOS type);
EXTERN T_ACI_TOS  tos_demerge     (SHORT type);
EXTERN CHAR *     sms_status      (T_ACI_SMS_STAT stat);
EXTERN void       cmd_PlusCOPN_CB ( UBYTE src_id );
EXTERN BOOL       cmd_readCOPNBlock  ( SHORT startIdx, UBYTE src_id);
EXTERN T_ACI_RETURN  cmd_readCPBRBlock (UBYTE srcId);
EXTERN void       cmd_PlusCPBR_CB(UBYTE srcId);

#define SMS_TEXT_MODE_NONE  0
#define SMS_TEXT_MODE_CMGS  1
#define SMS_TEXT_MODE_CMGW  2
#define SMS_TEXT_MODE_CMGC  3
#define SMS_PDU_MODE_CMGS   4
#define SMS_PDU_MODE_CMGC   5
#define SMS_PDU_MODE_CMGW   6
#define SMS_PDU_MODE_CNMA   7
#define SMS_TEXT_MODE_READ  8

#ifdef ACI_CMD_C
GLOBAL AciCmdVars at;
/* next variable is aimed at containing the user defined configuration
for the output format through AT interpreter
(it will eventually replace "GLOBAL AciCmdVars at;")*/
#ifdef FF_ATI
GLOBAL T_ATI_USER_OUTPUT_CFG ati_user_output_cfg[CMD_SRC_MAX];
#endif

GLOBAL UBYTE SMS_TEXT_MODE;  /* +CMGS sets 1 - +CMGW sets 2 in PDU mode 4,5 or 6*/

GLOBAL T_ACI_SMS_READ   smsReadMode = SMS_READ_Normal;
#ifdef WIN32
GLOBAL T_ACI_CPOL_MOD   cpolMode  = CPOL_MOD_NotPresent;
GLOBAL SHORT            cpolIdx2  = ACI_NumParmNotPresent;
#endif /* WIN32 */

#else /* ACI_CMD_C */
EXTERN AciCmdVars at;
/* next variable is aimed at containing the user defined configuration
for the output format through AT interpreter
(it will eventually replace "GLOBAL AciCmdVars at;")*/

#ifdef FF_ATI
EXTERN T_ATI_USER_OUTPUT_CFG ati_user_output_cfg[CMD_SRC_MAX];
#endif /* FF_ATI */

EXTERN UBYTE SMS_TEXT_MODE;


EXTERN T_ACI_SMS_READ   smsReadMode;
#ifdef WIN32
EXTERN T_ACI_CPOL_MOD   cpolMode;
EXTERN SHORT            cpolIdx2;
#endif /* WIN32 */
#endif /* ACI_CMD_C */

#endif