diff gsm-fw/g23m-aci/aci/psa_t30p.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/psa_t30p.c	Sun Oct 12 01:45:14 2014 +0000
@@ -0,0 +1,616 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  GSM-PS (6147)
+|  Modul   :  PSA_T30P
++----------------------------------------------------------------------------- 
+|  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 defines the processing functions for the
+|             primitives send to the protocol stack adapter by T30.
++----------------------------------------------------------------------------- 
+*/ 
+
+#if defined (DTI) || defined (FF_FAX)
+
+#ifndef PSA_T30P_C
+#define PSA_T30P_C
+#endif
+
+#include "aci_all.h"
+
+/*==== INCLUDES ===================================================*/
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+#include "dti.h"      /* functionality of the dti library */
+
+#include "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+
+#include "aci_fd.h"
+#include "aci_io.h"
+#include "aci.h"
+#include "psa.h"
+#include "psa_t30.h"
+#include "cmh.h"
+#include "cmh_t30.h"
+
+#include "aci_lst.h"
+#include "psa_uart.h"
+#include "cmh_uart.h"
+#ifdef FF_PSI
+#include "psa_psi.h"
+#include "cmh_psi.h"
+#include "ati_src_psi.h"
+#endif /*FF_PSI*/
+
+#include "psa_cc.h"
+
+/*==== CONSTANTS ==================================================*/
+
+
+/*==== TYPES ======================================================*/
+
+
+/*==== EXPORT =====================================================*/
+
+
+/*==== VARIABLES ==================================================*/
+
+
+/*==== FUNCTIONS ==================================================*/
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_activate_cnf    |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_ACTIVATE_CNF primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_activate_cnf
+                              (T_T30_ACTIVATE_CNF *t30_activate_cnf)
+{
+  TRACE_FUNCTION ("psa_t30_activate_cnf()");
+
+  if (!psaCC_ctbIsValid (t30ShrdPrm.cId))
+  {
+    TRACE_ERROR ("t30ShrdPrm.cId invalid");
+    PFREE (t30_activate_cnf);
+    return;
+  }
+
+  t30ShrdPrm.tbs = t30_activate_cnf->buf_size_tx;
+  t30ShrdPrm.rbs = t30_activate_cnf->buf_size_rx;
+  t30ShrdPrm.T30_is_activated = TRUE;
+
+  PFREE (t30_activate_cnf);
+
+  cmhT30_Activated( );
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_cap_ind         |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_CAP_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_cap_ind (T_T30_CAP_IND *t30_cap_ind)
+{
+  TRACE_FUNCTION ("psa_t30_cap_ind()");
+
+  if (!psaCC_ctbIsValid (t30ShrdPrm.cId))
+  {
+    TRACE_ERROR ("t30ShrdPrm.cId invalid");
+    PFREE (t30_cap_ind);
+    return;
+  }
+
+  memcpy (&t30ShrdPrm.hdlc_rcv, &t30_cap_ind->hdlc_info,
+          sizeof (T_hdlc_info));
+
+  PFREE (t30_cap_ind);
+
+  cmhT30_CapRmtSite( );
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_dti_cnf         |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_DTI_CNF primitive sent by T30.
+
+*/
+
+GLOBAL void psa_t30_dti_cnf (T_T30_DTI_CNF *t30_dti_cnf)
+{
+  T_ACI_DTI_PRC *src_infos;
+  T_DTI_CONN_LINK_ID link_id = dti_cntrl_get_link_id( DTI_ENTITY_T30, DTI_INSTANCE_NOTPRESENT, DTI_SUB_NO_NOTPRESENT );
+
+  TRACE_FUNCTION ("psa_t30_dti_cnf()");
+
+
+  switch( t30_dti_cnf->dti_conn )
+  {
+  case( T30_CONNECT_DTI ):
+    /* by now, T30 is connected with UART. It should take care of
+     * disactivating flow control */
+    src_infos = find_element ( uart_src_params,
+                               (UBYTE)t30EntStat.entOwn,
+                               cmhUARTtest_srcId );
+    if (src_infos EQ NULL)
+    {
+      TRACE_EVENT_P1("[ERR] psa_t30_dti_cnf: t30EntStat.entOwn=%d not found",
+                     t30EntStat.entOwn) ;
+      return ;
+    }
+    BITFIELD_CLEAR (src_infos->data_cntr, UART_DTI_FLOW_OFF);
+    dti_cntrl_entity_connected( link_id, DTI_ENTITY_T30, DTI_OK );
+
+    break;
+
+  case( T30_DISCONNECT_DTI ):
+    /* it depends here on the context:
+    if network is disconnecting the call: */
+    if (!psaCC_ctbIsValid (t30ShrdPrm.cId) OR
+        (psaCC_ctb(t30ShrdPrm.cId)->calStat EQ CS_DSC_REQ))
+    {
+      dti_cntrl_entity_disconnected( link_id, DTI_ENTITY_T30 );
+    }
+    else /* other cases */
+    {
+      t30EntStat.isTempDisconnected = TRUE;
+      dti_cntrl_entity_disconnected( link_id, DTI_ENTITY_T30 );
+    }
+    break;
+  }
+
+  PFREE (t30_dti_cnf);
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_dti_ind         |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_DTI_IND primitive sent by T30.
+
+*/
+
+GLOBAL void psa_t30_dti_ind (T_T30_DTI_IND *t30_dti_ind)
+{
+  TRACE_FUNCTION ("psa_t30_dti_ind()");
+
+  PFREE (t30_dti_ind);
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_phase_ind       |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_PHASE_IND primitive sent by T30.
+
+*/
+
+GLOBAL void psa_t30_phase_ind (T_T30_PHASE_IND *t30_phase_ind)
+{
+#ifdef FF_PSI
+  T_ACI_DTI_PRC_PSI *src_infos = find_element (psi_src_params, 
+                            (UBYTE)t30EntStat.entOwn, cmhPSItest_srcId);
+#endif /*FF_PSI*/
+  TRACE_FUNCTION ("psa_t30_phase_ind()");
+
+  if (!psaCC_ctbIsValid (t30ShrdPrm.cId))
+  {
+    TRACE_ERROR ("t30ShrdPrm.cId invalid");
+    PFREE (t30_phase_ind);
+    return;
+  }
+
+  switch ( t30_phase_ind->phase )
+  {
+    case MSG_PHASE:
+      /* send connect message with flow control */
+
+      R_AT( RAT_CONNECT, t30EntStat.entOwn )
+        ( t30EntStat.curCmd, cmhT30_GetDataRate(), t30ShrdPrm.cId+1, TRUE );
+      if (IS_SRC_BT(t30EntStat.entOwn))
+      {
+        T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_BLUETOOTH, DTI_ENTITY_T30};
+        dti_cntrl_est_dpath((UBYTE)t30EntStat.entOwn, entity_list, 2, SPLIT, T30_connect_dti_cb);
+      }
+      else
+      {
+        T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_T30};
+        dti_cntrl_est_dpath_indirect ( (UBYTE)t30EntStat.entOwn,
+                                       entity_list,
+                                       1,
+                                       SPLIT,
+                                       T30_connect_dti_cb,
+                                       DTI_CPBLTY_SER,
+                                       DTI_CID_NOTPRESENT);
+      }
+      break;
+
+    case BCS_PHASE:
+      {
+        T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_ACI};
+#ifdef FF_PSI
+        if (src_infos NEQ NULL)
+          dti_cntrl_est_dpath_indirect ( (UBYTE)t30EntStat.entOwn,
+                                       entity_list,
+                                       1,
+                                       SPLIT,
+                                       atiPSI_dti_cb,
+                                       DTI_CPBLTY_CMD,
+                                       DTI_CID_NOTPRESENT);
+        else 
+#endif /*FF_PSI*/
+          dti_cntrl_est_dpath_indirect ( (UBYTE)t30EntStat.entOwn,
+                                       entity_list,
+                                       1,
+                                       SPLIT,
+                                       atiUART_dti_cb,
+                                       DTI_CPBLTY_CMD,
+                                       DTI_CID_NOTPRESENT);
+      }
+      break;
+
+    default:
+      break;
+  }
+  PFREE (t30_phase_ind);
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_cmpl_ind        |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_CMPL_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_cmpl_ind (T_T30_CMPL_IND *t30_cmpl_ind)
+{
+  UBYTE cmpl;
+
+  TRACE_FUNCTION ("psa_t30_cmpl_ind()");
+
+  cmpl = t30_cmpl_ind->cmpl;
+
+  PFREE (t30_cmpl_ind);
+
+  if (!psaCC_ctbIsValid (t30ShrdPrm.cId))
+  {
+    TRACE_ERROR ("t30ShrdPrm.cId invalid");
+    return;
+  }
+
+  switch (cmpl)
+  {
+    case CMPL_DCN:
+    {
+      cmhT30_Disconnected( );
+      break;
+    }
+
+    case CMPL_EOM:
+    {
+      cmhT30_NextDoc( );
+      break;
+    }
+
+    case CMPL_EOP:
+    {
+      cmhT30_TransCmpl( );
+      break;
+    }
+
+    case CMPL_PI:
+    {
+      cmhT30_ProcIntInst( );
+      break;
+    }
+
+    default:
+    {
+      break;
+    }
+  }
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_deactivate_cnf  |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_DEACTIVATE_CNF primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_deactivate_cnf
+                           (T_T30_DEACTIVATE_CNF *t30_deactivate_cnf)
+{
+  TRACE_FUNCTION ("psa_t30_deactivate_cnf()");
+
+  PFREE (t30_deactivate_cnf);
+
+  cmhT30_Deactivated( );
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_eol_ind         |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_EOL_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_eol_ind (T_T30_EOL_IND *t30_eol_ind)
+{
+  TRACE_FUNCTION ("psa_t30_eol_ind()");
+
+  t30ShrdPrm.eol = t30_eol_ind->eol;
+
+  PFREE (t30_eol_ind);
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_error_ind       |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_ERROR_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_error_ind (T_T30_ERROR_IND *t30_error_ind)
+{
+  T_DTI_CONN_LINK_ID link_id = dti_cntrl_get_link_id( DTI_ENTITY_T30, DTI_INSTANCE_NOTPRESENT, DTI_SUB_NO_NOTPRESENT );
+
+  TRACE_FUNCTION ("psa_t30_error_ind()");
+
+  if (!psaCC_ctbIsValid (t30ShrdPrm.cId))
+  {
+    TRACE_ERROR ("t30ShrdPrm.cId invalid");
+    PFREE (t30_error_ind);
+    return;
+  }
+
+  t30ShrdPrm.err_cause = t30_error_ind->cause;
+
+  PFREE (t30_error_ind);
+
+  /* tell dti_mng that an error occured: not connected anymore */
+  dti_cntrl_entity_disconnected( link_id, DTI_ENTITY_T30 );
+
+  cmhT30_Failure();
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_preamble_ind    |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_PREAMBLE_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_preamble_ind
+                               (T_T30_PREAMBLE_IND *t30_preamble_ind)
+{
+  TRACE_FUNCTION ("psa_t30_preamble_ind()");
+
+  PFREE (t30_preamble_ind);
+
+  cmhT30_PreambleRcvd( );
+}
+
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_report_ind      |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_REPORT_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_report_ind (T_T30_REPORT_IND *t30_report_ind)
+{
+  TRACE_FUNCTION ("psa_t30_report_ind()");
+
+  t30ShrdPrm.report.dir   = t30_report_ind->dir;
+  t30ShrdPrm.report.l_buf = t30_report_ind->sdu.l_buf;
+
+  memcpy (t30ShrdPrm.report.buf,
+          t30_report_ind->sdu.buf,
+          t30_report_ind->sdu.l_buf >> 3);
+
+  PFREE (t30_report_ind);
+
+  cmhT30_HDLCRpt( );
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_T30                 |
+|                                 ROUTINE : psa_t30_sgn_ind         |
++-------------------------------------------------------------------+
+
+  PURPOSE : processes the T30_SGN_IND primitive send by T30.
+
+*/
+
+GLOBAL void psa_t30_sgn_ind (T_T30_SGN_IND *t30_sgn_ind)
+{
+  TRACE_FUNCTION ("psa_t30_sgn_ind()");
+
+  if (!psaCC_ctbIsValid (t30ShrdPrm.cId))
+  {
+    TRACE_ERROR ("t30ShrdPrm.cId invalid");
+    PFREE (t30_sgn_ind);
+    return;
+  }
+
+  t30ShrdPrm.sgn_snd = t30_sgn_ind->sgn;
+
+  PFREE (t30_sgn_ind);
+
+  switch (t30ShrdPrm.sgn_snd)
+  {
+    case SGN_CRP:
+    case SGN_FCS_ERR:
+    case SGN_NO_RES:
+    {
+      psaT30_Capabilities();
+      break;
+    }
+
+    case SGN_FTT:
+    {
+      cmhT30_FTT( );
+      break ;
+    }
+
+    case SGN_DCN:
+    {
+      cmhT30_Disconnect( );
+      break;
+    }
+
+    case SGN_EOM:
+    {
+      cmhT30_DocReceived( );
+      break;
+    }
+
+    case SGN_EOP:
+    {
+      switch (t30ShrdPrm.faxStat)
+      {
+        case FS_RCV_DOC:
+          cmhT30_ProcEnd( );
+          break;
+        case FS_SND_DOC:
+          ppmPendFlg = TRUE;
+          if( psaT30_Ppm() < 0 )  /* T30 PPM request */
+          {
+            TRACE_EVENT( "FATAL RETURN psaT30 in cmhT30_PPMRcvd" );
+          }
+          ppmPendFlg = FALSE;
+          t30ShrdPrm.sgn_snd = SGN_NOT_USED;
+          break;
+        default:
+          TRACE_FUNCTION ("psa_t30_sgn_ind() - SGN_EOP ERROR");
+          break;
+      }
+      break;
+    }
+
+    case SGN_MPS:
+    {
+      switch (t30ShrdPrm.faxStat)
+      {
+        case FS_RCV_DOC:
+          cmhT30_PageReceived( );
+          break;
+        case FS_SND_DOC:
+          pageSentFlg = TRUE;
+          ppmPendFlg = TRUE;
+          if( psaT30_Ppm() < 0 )  /* T30 PPM request */
+          {
+            TRACE_EVENT( "FATAL RETURN psaT30 in cmhT30_PPMRcvd" );
+          }
+          ppmPendFlg = FALSE;
+          t30ShrdPrm.sgn_snd = SGN_NOT_USED;
+          cmhT30_NextPage( );
+          break;
+        default:
+          TRACE_FUNCTION ("psa_t30_sgn_ind() - SGN_MPS ERROR");
+          break;
+      }
+      break;
+    }
+
+    case SGN_PIP:
+    {
+      cmhT30_ProcInt( );
+      break;
+    }
+
+    case SGN_PIN:
+    {
+      cmhT30_ProcInt( );
+      break;
+    }
+
+    case SGN_PRI_EOM:
+    {
+      cmhT30_DocReceivedPRI( );
+      break;
+    }
+
+    case SGN_PRI_EOP:
+    {
+      cmhT30_ProcEndPRI( );
+      break;
+    }
+
+    case SGN_PRI_MPS:
+    {
+      cmhT30_PageReceivedPRI( );
+      break;
+    }
+
+    case SGN_RTN:
+    {
+      cmhT30_RTN();
+      break;
+    }
+
+    case SGN_RTP:
+    {
+      cmhT30_RTP();
+      break;
+    }
+
+    case SGN_NOT_USED:
+    default:
+    {
+      break;
+    }
+  }
+}
+#endif /* DTI OR FF_FAX */
+
+/*==== EOF =========================================================*/
+