FreeCalypso > hg > freecalypso-sw
diff gsm-fw/g23m-aci/aci/cmh_smq.c @ 775:eedbf248bac0
gsm-fw/g23m-aci subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Oct 2014 01:45:14 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/g23m-aci/aci/cmh_smq.c Sun Oct 12 01:45:14 2014 +0000 @@ -0,0 +1,647 @@ +/* ++----------------------------------------------------------------------------- +| 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 : This module provides the query functions related to the +| protocol stack adapter for GPRS session management ( SM ). ++----------------------------------------------------------------------------- +*/ + +#ifdef GPRS +#ifndef CMH_SMQ_C +#define CMH_SMQ_C +#endif + +#include "aci_all.h" +#include "cl_inline.h" + +/*==== INCLUDES ===================================================*/ +#include "dti.h" /* functionality of the dti library */ +#include "aci_cmh.h" +#include "ati_cmd.h" +#include "aci_cmd.h" + +#include "pcm.h" + +#include "dti_conn_mng.h" +#include "dti_cntrl_mng.h" + +#include "gaci.h" +#include "gaci_cmh.h" +#include "psa.h" +#include "psa_sm.h" + +#include "cmh.h" +#include "cmh_sm.h" + +#include "psa_gmm.h" + + +#include "gaci_cmh.h" + +/*==== CONSTANTS ==================================================*/ + +/*==== EXPORT =====================================================*/ + +/*==== VARIABLES ==================================================*/ +EXTERN T_PDP_CONTEXT_INTERNAL *p_pdp_context_list; + +/*==== FUNCTIONS ==================================================*/ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GPRS (8441) MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGQREQ | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGQREG? AT + command and returns current settings for the specified + PDP context. The function is called for all cids. + Note: The QoS returned is always in Release 97 format. + RETURNS: - AT_CMPL : Completed. + - AT_FAIL : Command not valid for srcId. + UPDATES: - qos: Quality of service for cid. Not updated if cid is undefined. + - qos_valid: Indicates whether qos is updated not. +*/ +GLOBAL T_ACI_RETURN qAT_PlusCGQREQ ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + + TRACE_FUNCTION ("qAT_PlusCGQREQ()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + if ( pdp_context_get_state_for_cid( cid ) EQ PDP_CONTEXT_STATE_DEFINED ) + { + p_pdp_context_node = pdp_context_find_node_from_cid( cid ); + if( p_pdp_context_node ) + { + if( p_pdp_context_node->ctrl_qos EQ PS_is_R97 ) + { + memcpy( qos, &p_pdp_context_node->qos.qos_r97, sizeof(T_PS_qos_r97) ); + } + else + { + if( !cl_qos_convert_r99_to_r97( &p_pdp_context_node->qos.qos_r99, &qos->qos_r97 ) ) + { + /* Failed to convert to Release 97. Never end here !!!! */ + return( AT_FAIL ); + } + } + *qos_valid = TRUE; + } + else + { + TRACE_ERROR( "ERROR: PDP context not found" ); + *qos_valid = FALSE; + } + } + else + { + *qos_valid = FALSE; + } + + return( AT_CMPL ); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GPRS (8441) MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGQMIN | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGQMIN? AT + command and returns current settings for the specified + PDP context. The function is called for all cids. + Note: The QoS returned is always in Release 97 format. + RETURNS: - AT_CMPL : Completed. + - AT_FAIL : Command not valid for srcId. + UPDATES: - qos: Quality of service for cid. Not updated if cid is undefined. + - qos_valid: Indicates whether qos is updated not. +*/ +GLOBAL T_ACI_RETURN qAT_PlusCGQMIN ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + + TRACE_FUNCTION ("qAT_PlusCGQMIN()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + if ( pdp_context_get_state_for_cid( cid ) EQ PDP_CONTEXT_STATE_DEFINED ) + { + p_pdp_context_node = pdp_context_find_node_from_cid( cid ); + + if( p_pdp_context_node ) + { + if( p_pdp_context_node->ctrl_min_qos EQ (T_PS_ctrl_min_qos)PS_is_R97 ) + { + memcpy( qos, &p_pdp_context_node->min_qos, sizeof(T_PS_qos) ); + } + else + { + if( !cl_qos_convert_r99_to_r97( &p_pdp_context_node->min_qos.qos_r99, &qos->qos_r97 ) ) + { + /* Failed to convert to Release 97. Never end here !!!! */ + return( AT_FAIL ); + } + } + *qos_valid = TRUE; + } + else + { + TRACE_ERROR( "ERROR: PDP context not found" ); + *qos_valid = FALSE; + } + + } + else + { + *qos_valid = FALSE; + } + return( AT_CMPL ); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GPRS (8441) MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGDCONT | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGCONT? AT + command which returns current settings for each defined PDP context. +*/ + +GLOBAL T_ACI_RETURN qAT_PlusCGDCONT( T_ACI_CMD_SRC srcId, T_PDP_CONTEXT *p_pdp_context_array, SHORT *cid_array ) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + int i = 0; + + TRACE_FUNCTION ("qAT_PlusCGDSCONT()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc( srcId ) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + + p_pdp_context_node = p_pdp_context_list; + + while( p_pdp_context_node AND i < PDP_CONTEXT_CID_MAX ) + { + + if( p_pdp_context_node->type EQ PDP_CONTEXT_TYPE_PRIMARY ) + { + + memcpy( &p_pdp_context_array[i], &p_pdp_context_node->attributes, sizeof(T_PDP_CONTEXT) ); + +// memcpy( &p_pdp_context_array[i].pdp_type, &p_pdp_context_node->attributes.pdp_type, sizeof(T_PDP_CONTEXT_PDP_TYPE) ); +// memcpy( &p_pdp_context_array[i].pdp_apn, &p_pdp_context_node->attributes.pdp_apn, sizeof(T_PDP_CONTEXT_APN) ); +// memcpy( &p_pdp_context_array[i].pdp_addr, &p_pdp_context_node->attributes.pdp_addr, sizeof(T_PDP_CONTEXT_ADDR) ); + + cid_array[i] = p_pdp_context_node->cid; + i++; + + } + + p_pdp_context_node = p_pdp_context_node->p_next; + + } + + return( AT_CMPL ); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : UMTS MODULE : CMH_SMQ | +| STATE : ROUTINE : qAT_PlusCGDSCONT | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGCONT? AT + command which returns current settings for each defined PDP context. +*/ + +GLOBAL T_ACI_RETURN qAT_PlusCGDSCONT( T_ACI_CMD_SRC srcId, T_PDP_CONTEXT *p_pdp_context_array, U8 *cid_array ) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + int i = 0; + + TRACE_FUNCTION ("qAT_PlusCGDSCONT()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc( srcId ) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + + p_pdp_context_node = p_pdp_context_list; + + while( p_pdp_context_node AND i < PDP_CONTEXT_CID_MAX ) + { + + if( p_pdp_context_node->type EQ PDP_CONTEXT_TYPE_SECONDARY ) + { + p_pdp_context_array[i].p_cid = p_pdp_context_node->attributes.p_cid; + p_pdp_context_array[i].d_comp = p_pdp_context_node->attributes.d_comp; + p_pdp_context_array[i].h_comp = p_pdp_context_node->attributes.h_comp; + + cid_array[i] = p_pdp_context_node->cid; + i++; + + } + + p_pdp_context_node = p_pdp_context_node->p_next; + + } + + return( AT_CMPL ); +} + +GLOBAL T_ACI_RETURN qAT_PlusCGTFT( T_ACI_CMD_SRC srcId, U8 *cid_array ) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + int i = 0; + + TRACE_FUNCTION ("qAT_PlusCGTFT()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc( srcId ) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + + p_pdp_context_node = p_pdp_context_list; + + while( p_pdp_context_node AND i < PDP_CONTEXT_CID_MAX ) + { + if( p_pdp_context_node->p_tft_pf ) + { + cid_array[i++] = p_pdp_context_node->cid; + } + + p_pdp_context_node = p_pdp_context_node->p_next; + + } + + return( AT_CMPL ); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GPRS (8441) MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGACT | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGACT? AT + command which returns current activation states for all defined PDP context. +*/ + +GLOBAL T_ACI_RETURN qAT_PlusCGACT ( T_ACI_CMD_SRC srcId, BOOL *states, SHORT *cid ) +{ + T_PDP_CONTEXT_STATE state = PDP_CONTEXT_STATE_INVALID; + U8 i = 0, + j = 0; + + TRACE_FUNCTION ("qAT_PlusCGACT()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + for ( i=0; i < PDP_CONTEXT_CID_MAX; i++ ) + { + state = get_state_over_cid( (U8)(i+1) ); + /*if ( state NEQ PDP_CONTEXT_STATE_UNDEFINED AND state NEQ PDP_CONTEXT_STATE_INVALID )*/ + if ( state NEQ PDP_CONTEXT_STATE_INVALID ) + { + if ( state EQ PDP_CONTEXT_STATE_ACTIVATED OR state EQ PDP_CONTEXT_STATE_DATA_LINK ) + states[j] = TRUE; + else + states[j] = FALSE; + + cid[j] = i + 1 ; + j++; + } + } + cid [j] = PDP_CONTEXT_CID_INVALID; + + return( AT_CMPL ); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GPRS (8441) MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGAUTO | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGAUTO? AT + command which returns current mode of automatic response + to network requests. +*/ + +GLOBAL T_ACI_RETURN qAT_PlusCGAUTO ( T_ACI_CMD_SRC srcId, T_CGAUTO_N *n) +{ + + TRACE_FUNCTION ("qAT_PlusCGAUTO()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + *n = (T_CGAUTO_N) automatic_response_mode; + + return( AT_CMPL ); +} + + +GLOBAL T_ACI_RETURN qAT_PlusCGEREP ( T_ACI_CMD_SRC srcId, T_CGEREP_MODE *mode, T_CGEREP_BFR *bfr ) +{ + + TRACE_FUNCTION ("qAT_PlusCGEREP()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + *mode = sm_cgerep_mode; + *bfr = sm_cgerep_bfr; + + return( AT_CMPL ); +} + +GLOBAL T_ACI_RETURN qAT_PlusCGSMS( T_ACI_CMD_SRC srcId, T_CGSMS_SERVICE *service ) +{ + + TRACE_FUNCTION ("qAT_PlusCGSMS()"); + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + *service = sm_cgsms_service; + + return( AT_CMPL ); +} + +#ifdef REL99 +/* ++--------------------------------------------------------------------+ +| PROJECT : UMTS MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGEQREQ | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGEQREG? AT + command and returns current settings for the specified + PDP context. The function is called for all cids. + Note: The QoS returned is always in Release 99 format (3GPP). + RETURNS: - AT_CMPL : Completed. + - AT_FAIL : Command not valid for srcId. + UPDATES: - qos: Quality of service for cid. Not updated if cid is undefined. + - qos_valid: Indicates whether qos is updated not. +*/ +GLOBAL T_ACI_RETURN qAT_PlusCGEQREQ( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_qos *qos) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + + TRACE_FUNCTION ("qAT_PlusCGEQREQ()"); + + p_pdp_context_node = pdp_context_find_node_from_cid( cid ); + if( !p_pdp_context_node ) + { + *qos_valid = FALSE; + return( AT_CMPL ); + } + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if( !cmh_IsVldCmdSrc (srcId) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + if( get_state_over_cid(cid) EQ PDP_CONTEXT_STATE_DEFINED ) + { + if( p_pdp_context_node->ctrl_qos EQ PS_is_R99 ) + { + memcpy( qos, &p_pdp_context_node->qos, sizeof(T_PS_qos_r99) ); + } + else + { + /* The QoS is in Release 97 format and must be converted first. */ + if( !cl_qos_convert_r97_to_r99( &p_pdp_context_node->qos.qos_r97, &(qos->qos_r99)) ) + { + /* Failed to convert to Release 99. Never end here !!!! */ + return( AT_FAIL ); + } + } + *qos_valid = TRUE; + } + else + { + *qos_valid = FALSE; + } + + return( AT_CMPL ); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : UMTS MODULE : CMH_SMQ | +| STATE : finished ROUTINE : qAT_PlusCGEQMIN | ++--------------------------------------------------------------------+ + + PURPOSE : This is the functional counterpart to the +CGEQMIN? AT + command and returns current settings for the specified + PDP context. The function is called for all cids. + The QoS returned is always in Release 99 format (3GPP). + RETURNS: - AT_CMPL : Completed. + - AT_FAIL : Command not valid for srcId. + UPDATES: - qos: Quality of service for cid. Not updated if cid is undefined. + - qos_valid: Indicates whether qos is updated not. +*/ +GLOBAL T_ACI_RETURN qAT_PlusCGEQMIN( T_ACI_CMD_SRC srcId, U8 cid, BOOL *qos_valid, T_PS_min_qos *qos) +{ + T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; + + TRACE_FUNCTION ("qAT_PlusCGEQMIN()"); + + p_pdp_context_node = pdp_context_find_node_from_cid( cid ); + if( !p_pdp_context_node ) + { + *qos_valid = FALSE; + return( AT_CMPL ); + } + + +/* + *------------------------------------------------------------------- + * check command source - should be Serial link ? + *------------------------------------------------------------------- + */ + if ( !cmh_IsVldCmdSrc (srcId) ) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); + return( AT_FAIL ); + } + +/* + *------------------------------------------------------------------- + * fill in parameters + *------------------------------------------------------------------- + */ + if ( get_state_over_cid(cid) EQ PDP_CONTEXT_STATE_DEFINED ) + { + if( p_pdp_context_node->ctrl_min_qos EQ (T_PS_ctrl_min_qos)PS_is_R99 ) + { + memcpy( qos, &p_pdp_context_node->min_qos, sizeof(T_PS_qos) ); + } + else + { + /* The QoS is in Release 97 format and must be converted first. */ + if( !cl_qos_convert_r97_to_r99(&p_pdp_context_node->min_qos.qos_r97, &qos->qos_r99) ) + { + /* Failed to convert to Release 99. Never end here !!!! */ + return( AT_FAIL ); + } + } + *qos_valid = TRUE; + } + else + { + *qos_valid = FALSE; + } + + return( AT_CMPL ); +} +#endif /* REL99 */ + + +#endif /* GPRS */ +/*==== EOF ========================================================*/