view src/g23m-aci/aci/gaci_cmh.h @ 301:4bb5772a05a3

AT%SPVER: new command for setting custom speech version lists The speech version list in the Bearer Capability IE tells the network which speech codecs are supported by the MS, and in which order of preference. The standard behaviour is to list all codecs that are supported by the hw+fw platform, and the standard preference order is newer over older, FR over HR. But sometimes it is desirable (for network testing) to artificially restrict which codecs the test MS will declare as supported, and/or to list them in some peculiar non-standard order of preference. Add a new private AT command, AT%SPVER, allowing the user to set and clear custom speech version lists for the Bearer Capability IE composer in CC.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 May 2023 21:43:10 +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 :  GPRS Command handler interface definitions.
+----------------------------------------------------------------------------- 
*/ 

#ifndef GACI_CMH_H
#define GACI_CMH_H


/*==== MACROS =====================================================*/
#define GPRS_EVENT_REPORTING_BUFFER_SIZE  10

/*==== DEFINES ====================================================*/
/* the maximum length of strings to describe the PDP typ, PDP address, APN and L2P */
#define MAX_PDP_TYPE_LEN  7
#define MAX_APN_LEN       103
#define MAX_DNS_LEN       15
#define MAX_USER_LEN      63  /* this is a common value for Routers etc... */
#define MAX_PSWD_LEN      63  /* Name is changed as the same name is used in MFW with different value */
#define MAX_PDP_ADDR_LEN  63  /* IPv6 address n01.n02..n16 (16 * 3 + 15) */
#if defined (FF_PKTIO) OR defined (FF_TCP_IP) || defined(FF_GPF_TCPIP) OR defined (FF_PSI)
#define MAX_L2P_LENGTH    6
#else /* FF_PKTIO || FF_TCP_IP || FF_GPF_TCPIP || FF_PSI */
#define MAX_L2P_LENGTH    4
#endif /* FF_PKTIO || FF_TCP_IP || FF_GPF_TCPIP OR FF_PSI */
#ifdef REL99
#define QOS_R99_TC_OMITTED            0xff
#define QOS_R99_ORDER_OMITTED         0xff
#define QOS_R99_DEL_ERR_SDU_OMITTED   0xff
#define QOS_R99_MAX_SDU_OMITTED       0xffff
#define QOS_R99_MAX_BR_UL_OMITTED     0xffff
#define QOS_R99_MAX_BR_DL_OMITTED     0xffff
#define QOS_R99_XFER_DELAY_OMITTED    0xffff
#define QOS_R99_HANDLING_PRIO_OMITTED 0xff
#define QOS_R99_GUAR_BR_UL_OMITTED    0xffff
#define QOS_R99_GUAR_BR_DL_OMITTED    0xffff
#define QOS_R99_RATIO_MANT_OMITTED    0xff
#define QOS_R99_RATIO_EXP_OMITTED     0xff
#endif /* REL99 */
#define PDP_CONTEXT_CID_OMITTED   0
#define PDP_CONTEXT_CID_MIN       1
#define PDP_CONTEXT_CID_MAX       11
#define PDP_CONTEXT_CID_INVALID   (PDP_CONTEXT_CID_MAX + 1)
#define PDP_CONTEXT_TYPE_LEN_MAX  7
#define PDP_CONTEXT_APN_LEN_MAX   103 // ???
#define PDP_CONTEXT_ADDR_LEN_MAX  16

#define MAX_PDP_CONTEXT_TYPE_LEN 7
#define MAX_PDP_CONTEXT_APN_LEN  103
#define MAX_PDP_CONTEXT_ADDR_LEN 16
#define MAX_PDP_D_COMP_LEN       1
#define MAX_PDP_H_COMP_LEN       1

#define PDP_CONTEXT_QOS_OMITTED  0

#define TFT_PF_ID_MIN            1
#define TFT_PF_ID_MAX            4  /* Due to unclear definition in spec. it is decided to limit the max number of PF's to 4 instead of 8 */

#ifdef REL99
#define TFT_FLOW_LABEL_MIN           0x00000
#define TFT_FLOW_LABEL_MAX           0xfffff
#define TFT_FLOW_LABEL_INVALID      -1
#define TFT_PROT_OR_NXT_HDR_MIN      0x00
#define TFT_PROT_OR_NXT_HDR_MAX      0xff
#define TFT_PROT_OR_NXT_HDR_INVALID -1
#define TFT_PRM_LIST_MAX_BYT_LEN     254 /* TFT IE: 257-IEI-IEL-mandatoryPrms */
#endif


typedef enum                    /* CGDCONT command d_comp */
{
  GPRS_CID_OMITTED = 0,         /* value is omitted */
  GPRS_CID_1,                   /* PDP data compression off (default) */
  GPRS_CID_2,                   /* PDP data compression on */
#if defined (FF_PKTIO) OR defined (FF_PSI)
  GPRS_CID_3,
  GPRS_CID_4,
  GPRS_CID_5,
  GPRS_CID_6,
#endif
  GPRS_CID_INVALID              /* invalid value */

} T_GPRS_CID;

#define INVALID_CID         GPRS_CID_OMITTED

#if defined (FF_PKTIO) OR defined (FF_PSI)
#define MAX_CID             GPRS_CID_6
#else
#define MAX_CID             GPRS_CID_2
#endif

#define MAX_CID_PLUS_EINS   GPRS_CID_INVALID

/*==== TYPES ======================================================*/

//typedef char T_PDP_ADDRESS  [MAX_PDP_CONTEXT_ADDR_LEN];
//typedef T_NAS_ip T_PDP_ADDRESS  ;
typedef char T_PDP_TYPE     [MAX_PDP_CONTEXT_TYPE_LEN];
typedef char T_APN          [MAX_APN_LEN];
typedef char T_L2P          [MAX_L2P_LENGTH];

typedef struct
{
  T_APN               apn;
  T_PDP_TYPE          pdp_type;
  T_NAS_ip            pdp_addr;
  SHORT               d_comp;
  SHORT               h_comp;
  T_PS_ctrl_qos       ctrl_qos;
  T_PS_qos            qos;
  T_PS_ctrl_min_qos   ctrl_min_qos;
  T_PS_min_qos        min_qos;
} T_GPRS_CONT_REC;

/*---- Types of  -----------------------------------------*/
typedef enum                    /* CGDCONT command d_comp */
{
  CGDCONT_D_COMP_OMITTED = -1,  /* value is omitted */
  CGDCONT_D_COMP_OFF,           /* PDP data compression off (default) */
  CGDCONT_D_COMP_ON,            /* PDP data compression on */
  CGDCONT_D_COMP_INVALID        /* invalid value */

} T_CGDCONT_D_COMP;

typedef enum                    /* CGDCONT command h_comp */
{
  CGDCONT_H_COMP_OMITTED = -1,  /* value is omitted */
  CGDCONT_H_COMP_OFF,           /* PDP header compression off (default) */
  CGDCONT_H_COMP_ON,            /* PDP header compression on */
  CGDCONT_H_COMP_INVALID        /* invalid value */

} T_CGDCONT_H_COMP;

typedef enum                    /* CGATT command state */
{
  CGATT_STATE_OMITTED = -1,     /* value is omitted */
  CGATT_STATE_DETACHED,         /* GPRS detached */
  CGATT_STATE_ATTACHED,         /* GPRS attached */
  CGATT_STATE_INVALID           /* invalid value */

} T_CGATT_STATE;

typedef enum                    /* CGACT command state */
{
  CGACT_STATE_OMITTED = -1,     /* value is omitted */
  CGACT_STATE_DEACTIVATED,      /* PDP context detached */
  CGACT_STATE_ACTIVATED,        /* PDP context attached */
  CGACT_STATE_INVALID           /* invalid value */

} T_CGACT_STATE;

typedef enum                    /* CGAUTO command n */
{
  CGAUTO_N_OMITTED = -1,        /* value is omitted */
  CGAUTO_N_GPRS_RES_OFF,        /* turn off automatic response for GPRS only */
  CGAUTO_N_GPRS_RES_ON,         /* turn on automatic response for GPRS only */
  CGAUTO_N_MCM_GPRS_ONLY,       /* modem compabitbility mode, GPRS only */
  CGAUTO_N_MCM_GPRS_CSC,        /* modem compabitbility mode, GPRS and circuit switched calls (default) */
  CGAUTO_N_INVALID              /* invalid value */

} T_CGAUTO_N;

typedef enum                    /* CGANS command response */
{
  CGANS_RESPONSE_OMITTED = -1,  /* value is omitted */
  CGANS_RESPONSE_REJECT,        /* reject the request */
  CGANS_RESPONSE_ACCEPT,        /* accept and request that the PDP context be activated */
  CGANS_RESPONSE_INVALID        /* invalid value */

} T_CGANS_RESPONSE;

typedef enum                    /* CGANS command response */
{
  CGCLASS_CLASS_OMITTED = -1,   /* value is omitted */
  CGCLASS_CLASS_A,              /* mobile class A  (highest) */
  CGCLASS_CLASS_B,              /* mobile class B  (if necessary consider NET III) */
  CGCLASS_CLASS_CG,             /* mobile class CG (GPRS only mode) */
  CGCLASS_CLASS_CC,             /* mobile class CC (circuit switched only mode - lowest) */
  CGCLASS_CLASS_MAX             /* invalid value */

} T_CGCLASS_CLASS;

typedef enum                    /* CGANS command response */
{
  PERCENT_CGCLASS_OMITTED = -1,   /* value is omitted */
  PERCENT_CGCLASS_A,              /* mobile class A  (highest) */
  PERCENT_CGCLASS_B,              /* mobile class B   */
  PERCENT_CGCLASS_BG,             /* mobile class BG   */
  PERCENT_CGCLASS_BC,             /* mobile class BC   */
  PERCENT_CGCLASS_BX,             /* mobile class BX   */
  PERCENT_CGCLASS_CG,             /* mobile class CG (GPRS only mode) */
  PERCENT_CGCLASS_CC,             /* mobile class CC (circuit switched only mode - lowest) */
  PERCENT_CGCLASS_MAX             /* invalid value */

} T_PERCENT_CGCLASS;

typedef enum                    /* CGEREP command mode */
{
  CGEREP_MODE_OMITTED = -1,     /* value is omitted */
  CGEREP_MODE_BUFFER,           /* buffer unsolicited result codes */
  CGEREP_MODE_DICARD_RESERVED,  /* discard unsolicited result codes when MT-TE link is reserved */
  CGEREP_MODE_BUFFER_RESERVED,  /* buffer unsolicited result codes in the MT when MT-TE link is reserved */
  CGEREP_MODE_INVALID           /* invalid value */

} T_CGEREP_MODE;

typedef enum                    /* CGEREP command bfr */
{
  CGEREP_BFR_OMITTED = -1,      /* value is omitted */
  CGEREP_BFR_CLEAR,             /* buffer unsolicited result codes */
  CGEREP_BFR_FLUSH,             /* discard unsolicited result codes when MT-TE link is reserved */
  CGEREP_BFR_INVALID            /* invalid value */

} T_CGEREP_BFR;

typedef enum                    /* CGREG command read stat */
{
  CGREG_STAT_NOT_PRESENT = -1,  /* not present, last state is not indicated */
  CGREG_STAT_NOT_REG,           /* not registered, no searching */
  CGREG_STAT_REG_HOME,          /* registered, home network */
  CGREG_STAT_SEARCHING,         /* not registered, but searching */
  CGREG_STAT_REG_DEN,           /* registration denied */
  CGREG_STAT_UNKN,              /* unknown */
  CGREG_STAT_REG_ROAM           /* registered, roaming */

} T_CGREG_STAT;

typedef enum                    /* %CGREG command read stat */
{
  P_CGREG_STAT_NOT_PRESENT = -1,  /* not present, last state is not indicated */
  P_CGREG_STAT_NOT_REG,           /* not registered, no searching */
  P_CGREG_STAT_REG_HOME,          /* registered, home network */
  P_CGREG_STAT_SEARCHING,         /* not registered, but searching */
  P_CGREG_STAT_REG_DEN,           /* registration denied */
  P_CGREG_STAT_UNKN,              /* unknown */
  P_CGREG_STAT_REG_ROAM,          /* registered, roaming */
  P_CGREG_STAT_LIMITED,           /* limited service */
  P_CGREG_STAT_GSM_CALL,          /* GSM call is active */
  P_CGREG_STAT_NO_CELL,           /* no cell available */
  P_CGREG_STAT_TRY_TO_UPDATE      /* next attempt to update MS */

} T_P_CGREG_STAT;


typedef enum                    /* CGSMS command service */
{
  CGSMS_SERVICE_OMITTED = -1,   /* value is omitted */
  CGSMS_SERVICE_GPRS,           /* GPRS */
  CGSMS_SERVICE_CS,             /* circuit switched */
  CGSMS_SERVICE_GPRS_PREFERRED, /* GPRS preferred */
  CGSMS_SERVICE_CS_PREFERRED,   /* circuit switched preferred */
  CGSMS_SERVICE_INVALID         /* invalid value */

} T_CGSMS_SERVICE;

typedef enum                    /* CGAATT command automatic attach mode */
{
  CGAATT_ATTACH_MODE_OMITTED = -1, /* value is omitted */
  CGAATT_ATTACH_MODE_AUTOMATIC,    /* automatic attach */
  CGAATT_ATTACH_MODE_MANUAL,       /* manual attach */
  CGAATT_ATTACH_MODE_INVALID       /* invalid value */

} T_CGAATT_ATTACH_MODE;

typedef enum                    /* CGAATT command automatic detach after context deactivation */
{
  CGAATT_DETACH_MODE_OMITTED = -1, /* value is omitted */
  CGAATT_DETACH_MODE_ON,           /* on */
  CGAATT_DETACH_MODE_OFF,          /* off */
  CGAATT_DETACH_MODE_INVALID       /* invalid value */

} T_CGAATT_DETACH_MODE;

/*---- Types for event reporting-----------------------------------*/

typedef enum                /* Defined events for GPRS event reporting */
{
  CGEREP_EVENT_INVALID = -1, /* reserved value */
  CGEREP_EVENT_REJECT,      /* network request context activation */
  CGEREP_EVENT_NW_REACT,    /* network requested context reactivation */
  CGEREP_EVENT_NW_DEACT,    /* network forced context deactivation */
  CGEREP_EVENT_ME_DEACT,    /* mobile equipment forced context deactivation */
  CGEREP_EVENT_NW_DETACH,   /* network forced detach */
  CGEREP_EVENT_ME_DETACH,   /* mobile equipment forced detach */
  CGEREP_EVENT_NW_CLASS,    /* network forced class change */
  CGEREP_EVENT_ME_CLASS,    /* mobile equipment forced class change */
  CGEREP_EVENT_NW_ACT,    /* network requested context activation */
  CGEREP_EVENT_ME_ACT    /* mobile equipment initiated context activation */
} T_CGEREP_EVENT;

typedef struct              /* parameter of unsolicited event: REJECT */
{
  T_PDP_TYPE        pdp_type;
  T_NAS_ip          pdp_addr;

} T_EVENT_REJECT;

typedef struct              /* parameter of unsolicited event: NW REACT, NW DEACT, ME DEACT */
{
  T_PDP_TYPE        pdp_type;
  T_NAS_ip          pdp_addr;
  SHORT             cid;

} T_EVENT_ACT;

typedef union
{
  T_EVENT_REJECT    reject;
  T_EVENT_ACT       act;
  T_CGCLASS_CLASS   mobile_class;

} T_CGEREP_EVENT_REP_PARAM;


typedef enum
{
  PDP_CONTEXT_D_COMP_OFF     =  0,
  PDP_CONTEXT_D_COMP_INVALID =  3,
  PDP_CONTEXT_D_COMP_OMITTED =  255
} T_PDP_CONTEXT_D_COMP;


typedef enum
{
  PDP_CONTEXT_H_COMP_OFF     =  0,
  PDP_CONTEXT_H_COMP_INVALID =  3,
  PDP_CONTEXT_H_COMP_OMITTED =  255
} T_PDP_CONTEXT_H_COMP;


typedef enum
{
  PDP_CONTEXT_TYPE_UNKNOWN   = 0,
  PDP_CONTEXT_TYPE_PRIMARY   = 1,
  PDP_CONTEXT_TYPE_SECONDARY = 2
  
}T_PDP_CONTEXT_TYPE;

typedef enum
{
  PDP_CONTEXT_STATE_INVALID = 0,             /* 0x00: invalid value                                                                       */
  PDP_CONTEXT_STATE_DEFINED,                 /* 0x01: context defined                                                                     */
  PDP_CONTEXT_STATE_ATTACHING,               /* 0x02: Attaching before context activation (+CGDATA or +CGACT)                             */
  PDP_CONTEXT_STATE_ESTABLISH_1,             /* 0x03: PPP informed over estblish                                                          */
  PDP_CONTEXT_STATE_ESTABLISH_2,             /* 0x04: SM informed over estblish                                                           */
  PDP_CONTEXT_STATE_ESTABLISH_3,             /* 0x05: PPP informed over activated context                                                 */
  PDP_CONTEXT_STATE_ACTIVATING,              /* 0x06: SM context activating                                                               */
  PDP_CONTEXT_STATE_ABORT_ESTABLISH,         /* 0x07: abort establish                                                                     */
  PDP_CONTEXT_STATE_ACTIVATED,               /* 0x08: context activated                                                                   */
  PDP_CONTEXT_STATE_ACTIVATED_ESTABLISH_1,   /* 0x09: Context is activated. PPP informed over estblish                                    */
  PDP_CONTEXT_STATE_ACTIVATED_MODIFYING,     /* 0x0a: context activated, context modification in progress                                 */
  PDP_CONTEXT_STATE_DATA_LINK,               /* 0x0b: Data link                                                                           */
  PDP_CONTEXT_STATE_DATA_LINK_MODIFYING,     /* 0x0c: Data link, context modification in progress                                         */
  PDP_CONTEXT_STATE_DEACTIVATE_NORMAL,       /* 0x0d: Context activated/activating: Deactivating from appl. or SMREG_PDP_ACTIVATE_REJ     */
  PDP_CONTEXT_STATE_BREAKDOWN_LINK_NORMAL,   /* 0x0f: Data link deactivation: breakdown data link from PPP (PPP_TERMINATE_IND received) 
                                                      or network initiated context deactivation (SMREG_PDP_DEACTIVATE_IND)                */
  PDP_CONTEXT_STATE_REACTIVATION_1,          /* 0x10: Data link deactivation: PPP_TERMINATE_REQ and SMREG_DEACTIVATE_REQ are sent         */
  PDP_CONTEXT_STATE_REACTIVATION_2           /* 0x11: Data link deactivation: Response is received from either PPP or SM
                                                      e.g. PPP_TERMINATE_IND or SMREG_DEACTIVATE_CNF                                      */
} T_PDP_CONTEXT_STATE;
 

typedef struct _T_TFT_INTERNAL
{
  T_NAS_tft_pf            pf_attributes;
  struct _T_TFT_INTERNAL *p_next;

} T_TFT_INTERNAL;


typedef char T_PDP_CONTEXT_PDP_TYPE[MAX_PDP_CONTEXT_TYPE_LEN];
typedef char T_PDP_CONTEXT_APN[PDP_CONTEXT_APN_LEN_MAX];

typedef struct
{
  T_PDP_CONTEXT_PDP_TYPE pdp_type;
  T_PDP_CONTEXT_APN      pdp_apn;
  T_NAS_ip               pdp_addr;
  U8                     d_comp;  /* T_PDP_CONTEXT_D_COMP */
  U8                     h_comp;  /* T_PDP_CONTEXT_H_COMP */
  U8                     p_cid;   /* Primary PDP context id, used if the context is a secondary PDP context */

} T_PDP_CONTEXT;


typedef struct
{
  UBYTE   len;
  UBYTE   pco[251];

} T_PDP_CONTEXT_PCO;  /* user PCO */


/*---- %CGPCO -----------------------------------------------------*/

#define ACI_PCO_MAX_LEN                         251
#define ACI_PCO_CONTENTMASK_AUTH                0x00000001
#define ACI_PCO_CONTENTMASK_DNS1                0x00000002
#define ACI_PCO_CONTENTMASK_DNS2                0x00000004

#define ACI_PCO_CONFIG_PROT_PPP                 0

#define ACI_PCO_AUTH_PROT_PAP                   0xc023

#define ACI_PCO_PAP_OVERHEAD                    9
#define ACI_PCO_IPCP_OVERHEAD                   7
#define ACI_PCO_PAP_AUTH_REQ                    0x01
#define ACI_PCO_IPCP_PROT_MSB                   0x80
#define ACI_PCO_IPCP_PROT_LSB                   0x21
#define ACI_PCO_IPCP_CONF_REQ                   0x01
#define ACI_PCO_IPCP_CONF_ACK                   0x02
#define ACI_PCO_IPCP_CONF_NAK                   0x03
#define ACI_PCO_IPCP_TYPE_IP                    3
#define ACI_PCO_IPCP_TYPE_DNS1                  129
#define ACI_PCO_IPCP_TYPE_DNS2                  131
#define ACI_PCO_IPCP_LENGTH_IP                  6
#define ACI_PCO_IPCP_LENGTH_DNS1                6
#define ACI_PCO_IPCP_LENGTH_DNS2                6

typedef enum
{
  CGPCO_FORMAT_HEX = 0,
  CGPCO_FORMAT_ASCII
}T_ACI_CGPCO_FORMAT;

typedef enum
{
  CGPCO_MODE_SET_PCO = 0,
  CGPCO_MODE_QUERY_PCO
}T_ACI_CGPCO_MODE;


/*==== PROTOTYPES =================================================*/

/***  set commands  ***/
EXTERN T_ACI_RETURN sAT_PercentCGPCO ( T_ACI_CMD_SRC srcId, U8 cid, USHORT protocol, CHAR *user, CHAR *pwd, CHAR *dns1, CHAR *dns2);
EXTERN T_ACI_RETURN sAT_PercentCGPCO_HEX ( T_ACI_CMD_SRC srcId, UBYTE cid, UBYTE *pco_array, UBYTE pco_len);
EXTERN T_ACI_RETURN sAT_PlusCGDCONT  ( T_ACI_CMD_SRC srcId, U8 cid, T_PDP_CONTEXT *inputCtxt);
EXTERN T_ACI_RETURN sAT_PlusCGQREQ   ( T_ACI_CMD_SRC srcId, U8 cid ,T_PS_qos *qos);
EXTERN T_ACI_RETURN sAT_PlusCGQMIN   ( T_ACI_CMD_SRC srcId, U8 cid ,T_PS_min_qos *qos);
EXTERN T_ACI_RETURN sAT_PlusCGATT    ( T_ACI_CMD_SRC srcId, T_CGATT_STATE state );
EXTERN T_ACI_RETURN sAT_PlusCGACT    ( T_ACI_CMD_SRC srcId, T_CGACT_STATE state, SHORT *cids );
EXTERN T_ACI_RETURN sAT_PlusCGDATA   ( T_ACI_CMD_SRC srcId, char *L2P, U8 *p_cid_array );
EXTERN T_ACI_RETURN sAT_PlusCGPADDR  ( T_ACI_CMD_SRC srcId, SHORT *cids, T_NAS_ip *pdp_adress );
EXTERN T_ACI_RETURN sAT_PlusCGAUTO   ( T_ACI_CMD_SRC srcId, T_CGAUTO_N n );
EXTERN T_ACI_RETURN sAT_PlusCGANS    ( T_ACI_CMD_SRC srcId, USHORT response, char *l2p, U8 cid );
EXTERN T_ACI_RETURN sAT_PlusCGCLASS  ( T_ACI_CMD_SRC srcId, T_CGCLASS_CLASS m_class );
EXTERN T_ACI_RETURN sAT_PlusCGEREP   ( T_ACI_CMD_SRC srcId, T_CGEREP_MODE mode, T_CGEREP_BFR bfr );
EXTERN T_ACI_RETURN sAT_PlusCGSMS    ( T_ACI_CMD_SRC srcId, T_CGSMS_SERVICE service );



EXTERN T_ACI_RETURN sAT_PercentCGAATT ( T_ACI_CMD_SRC srcId, T_CGAATT_ATTACH_MODE att_m, T_CGAATT_DETACH_MODE det_m );
EXTERN T_ACI_RETURN sAT_PercentCGMM   ( T_ACI_CMD_SRC srcId, UBYTE cipher_on, UBYTE tlli_handling );
EXTERN T_ACI_RETURN sAT_PercentSNCNT  ( T_ACI_CMD_SRC srcId, BOOL reset_counter );

EXTERN T_ACI_RETURN sAT_PercentCGPPP   ( T_ACI_CMD_SRC srcId, T_ACI_PPP_PROT protocol );
EXTERN T_ACI_RETURN qAT_PercentCGPPP   ( T_ACI_CMD_SRC srcId, T_ACI_PPP_PROT *protocol );

EXTERN T_ACI_RETURN sAT_PercentCGCLASS ( T_ACI_CMD_SRC srcId, T_PERCENT_CGCLASS m_class );



/***  read commands  ***/
EXTERN T_ACI_RETURN qAT_PercentCGPCO  ( T_ACI_CMD_SRC srcId, ULONG *gateway, ULONG *dns1, ULONG *dns2, USHORT cid);
EXTERN T_ACI_RETURN qAT_PlusCGDCONT   ( T_ACI_CMD_SRC srcId, T_PDP_CONTEXT *p_pdp_context_array, SHORT *cid_array );
EXTERN T_ACI_RETURN qAT_PlusCGQREQ    ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos);
EXTERN T_ACI_RETURN qAT_PlusCGQMIN    ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos);
EXTERN T_ACI_RETURN qAT_PlusCGATT     ( T_ACI_CMD_SRC srcId, T_CGATT_STATE *state );
EXTERN T_ACI_RETURN qAT_PlusCGACT     ( T_ACI_CMD_SRC srcId, BOOL  *states, SHORT *cid );
EXTERN T_ACI_RETURN qAT_PlusCGAUTO    ( T_ACI_CMD_SRC srcId, T_CGAUTO_N *n);
EXTERN T_ACI_RETURN qAT_PlusCGCLASS   ( T_ACI_CMD_SRC srcId, T_CGCLASS_CLASS *m_class );
EXTERN T_ACI_RETURN qAT_PlusCGEREP    ( T_ACI_CMD_SRC srcId, T_CGEREP_MODE *mode, T_CGEREP_BFR *bfr );
EXTERN T_ACI_RETURN qAT_PlusCGREG     ( T_ACI_CMD_SRC srcId, T_CGREG_STAT *stat, USHORT *lac, USHORT *ci );
EXTERN T_ACI_RETURN qAT_PercentCGREG  ( T_ACI_CMD_SRC srcId, T_P_CGREG_STAT *stat, USHORT *lac, USHORT *ci );
EXTERN T_ACI_RETURN qAT_PlusCGSMS     ( T_ACI_CMD_SRC srcId, T_CGSMS_SERVICE *service );
EXTERN T_ACI_RETURN qAT_PercentCGAATT ( T_ACI_CMD_SRC srcId, T_CGAATT_ATTACH_MODE *att_m, T_CGAATT_DETACH_MODE *det_m );
EXTERN T_ACI_RETURN qAT_PercentCGCLASS  ( T_ACI_CMD_SRC srcId, T_PERCENT_CGCLASS *m_class, T_PERCENT_CGCLASS *currentClass );
#ifdef REL99
EXTERN T_ACI_RETURN qAT_PlusCGDSCONT( T_ACI_CMD_SRC srcId, T_PDP_CONTEXT *p_pdp_context_array, U8 *cid_array );
EXTERN T_ACI_RETURN qAT_PlusCGTFT   ( T_ACI_CMD_SRC srcId, U8 *cid_array );
#endif
/***  test commands  ***/
EXTERN T_ACI_RETURN tAT_PlusCGPADDR ( T_ACI_CMD_SRC srcId, U8 *cids);
EXTERN T_ACI_RETURN tAT_PlusCGSMS   ( T_ACI_CMD_SRC srcId, SHORT *service_list);

#ifdef REL99
EXTERN T_ACI_RETURN sAT_PlusCGDSCONT( T_ACI_CMD_SRC srcId, U8 cid, T_PDP_CONTEXT *pdp_context_input );
EXTERN T_ACI_RETURN sAT_PlusCGEQREQ ( T_ACI_CMD_SRC srcId, U8 cid, T_PS_qos *qos );
EXTERN T_ACI_RETURN sAT_PlusCGEQMIN ( T_ACI_CMD_SRC srcId, U8 cid, T_PS_qos *qos );
EXTERN T_ACI_RETURN sAT_PlusCGEQNEG ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos);
EXTERN T_ACI_RETURN sAT_PlusCGCMOD  ( T_ACI_CMD_SRC srcId, U8 *cid);
EXTERN T_ACI_RETURN sAT_PlusCGTFT   ( T_ACI_CMD_SRC srcId, U8 cid, T_NAS_tft_pf *tft_pf_input );

EXTERN T_ACI_RETURN qAT_PlusCGEQREQ ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos);
EXTERN T_ACI_RETURN qAT_PlusCGEQMIN ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_min_qos *qos);

EXTERN T_ACI_RETURN tAT_PlusCGEQNEG_CGCMOD ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *context_activated);
EXTERN T_ACI_RETURN tAT_PlusCGDSCONT       ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *context_activated );
#endif /* REL99 */


/*--------------- extension mechansim ----------------------------*/

/*--------------- constants --------------------------------------*/

/*--------------- configuration ----------------------------------*/

/*--------------- Extension Handler -> AT Interpreter ------------*/

/*--------------- AT Interpreter -> Extension Handler ------------*/

/*------- call-backs for MMI --------------------------------------*/

#ifdef CMH_F_C /*lint -save -e18 */ /* Turn off Lint errors for this "construct" */
EXTERN void rAT_PlusCGACT            ( void );
EXTERN void rAT_PlusCGDATA           ( void );
EXTERN void rAT_PlusCGANS            ( void );
EXTERN void rAT_PlusCGEREP           ( void );
EXTERN void rAT_PlusCGREG            ( void );
EXTERN void rAT_changedQOS           ( void );
EXTERN void rAT_PercentSNCNT         ( void );
EXTERN void rAT_PercentCGREG         ( void );
#ifdef REL99
EXTERN void rAT_PlusCGCMOD           ( void ); /* added for rel99 */
#endif
EXTERN void rAT_PercentCGEV           ( void );
/*lint -restore */
#else
EXTERN void rAT_PlusCGACT            ( SHORT link_id );
EXTERN void rAT_PlusCGDATA           ( SHORT link_id );
EXTERN void rAT_PlusCGANS            ( SHORT link_id );
EXTERN void rAT_PlusCGEREP           ( T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param );
EXTERN void rAT_PlusCGREG            ( T_CGREG_STAT stat, USHORT lac, USHORT ci );
EXTERN void rAT_changedQOS           ( SHORT cid, T_PS_qos *qos );
EXTERN void rAT_PercentSNCNT         ( UBYTE c_id,
                                       ULONG octets_uplink,
                                       ULONG octets_downlink,
                                       ULONG packets_uplink,
                                       ULONG packets_downlink );
EXTERN void rAT_PercentCGREG         ( T_P_CGREG_STAT stat, USHORT lac, USHORT ci, BOOL bActiveContext );
#ifdef REL99
EXTERN void rAT_PlusCGCMOD           ( void ); /* added for rel99 */
#endif
EXTERN void rAT_PercentCGEV           ( T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param );
#endif

/*--------------- call-backs for AT CI ----------------------------*/

#ifdef CMH_F_C
/*lint -save -e18 */ /* Turn off Lint errors for this "construct" */
EXTERN void rCI_PlusCGACT            ( void );
EXTERN void rCI_PlusCGDATA           ( void );
EXTERN void rCI_PlusCGANS            ( void );
EXTERN void rCI_PlusCGEREP           ( void );
EXTERN void rCI_PlusCGREG            ( void );
EXTERN void rCI_changedQOS           ( void );
EXTERN void rCI_PercentSNCNT         ( void );
EXTERN void rCI_PercentCGREG         ( void );
#ifdef REL99
EXTERN void rCI_PlusCGCMOD           ( void ); /* rel99 */
#endif /* REL99 */
EXTERN void rCI_PercentCGEV           ( void );
/*lint -restore */
#else
EXTERN void rCI_PlusCGACT            ( SHORT link_id );
EXTERN void rCI_PlusCGDATA           ( SHORT link_id );
EXTERN void rCI_PlusCGANS            ( SHORT link_id );
EXTERN void rCI_PlusCGEREP           ( T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param );
EXTERN void rCI_PlusCGREG            ( T_CGREG_STAT stat, USHORT lac, USHORT ci );
EXTERN void rCI_changedQOS           ( SHORT cid, T_PS_qos *qos );
EXTERN void rCI_PercentSNCNT         ( UBYTE c_id,
                                       ULONG octets_uplink,
                                       ULONG octets_downlink,
                                       ULONG packets_uplink,
                                       ULONG packets_downlink );
EXTERN void rCI_PercentCGREG         ( T_P_CGREG_STAT stat, USHORT lac, USHORT ci, BOOL bActiveContext );
#ifdef REL99
EXTERN void rCI_PlusCGCMOD           ( void ); /* rel99 */
#endif /* REL99 */
EXTERN void rCI_PercentCGEV           ( T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param );
#endif

#endif
/*==== EOF ========================================================*/