diff src/g23m-aci/aci/cmh_smq.c @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-aci/aci/cmh_smq.c	Fri Oct 16 06:25:50 2020 +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 ========================================================*/