view src/g23m-aci/aci/aci_cmd.h @ 247:12b20090b46a

ETM: add phone-on command to FCBM
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 09 May 2021 21:04:52 +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