diff gsm-fw/g23m-aci/aci/ati_src_sat.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 beb8e9851a07
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/g23m-aci/aci/ati_src_sat.c	Sun Oct 12 01:45:14 2014 +0000
@@ -0,0 +1,290 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  GSM-PS (6147)
+|  Modul   :  ATI_SRC_SATC
++----------------------------------------------------------------------------- 
+|  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 :  .
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifdef SIM_TOOLKIT
+
+#ifndef ATI_SRC_SAT_C
+#define ATI_SRC_SAT_C
+#endif
+
+#include "aci_all.h"
+/*==== INCLUDES ===================================================*/
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+
+#ifdef UART
+#include "dti.h"      /* functionality of the dti library */
+#endif
+
+#include "aci_lst.h"
+
+#include "ati_src_sat.h"
+#include "psa.h"
+#include "psa_cc.h"
+#include "psa_sat.h"
+#include "cmh.h"
+
+#include "aci_mem.h"
+
+#ifdef UART
+#include "dti_conn_mng.h"
+#include "psa_uart.h"
+#endif
+
+#include "ati_io.h"
+
+#include "ati_int.h"
+
+/*==== CONSTANTS ==================================================*/
+
+/*==== TYPES ======================================================*/
+
+/*==== EXPORT =====================================================*/
+EXTERN T_ACI_LIST *ati_src_list;
+
+/*==== VARIABLES ==================================================*/
+USHORT sat_out_buf_len = 0;
+UBYTE  *sat_out_buf    = NULL;
+
+UBYTE         run_at_id = 0xFF;              /* srce id of source where run at cmd is processed */
+
+/*==== FUNCTIONS ==================================================*/
+EXTERN USHORT format_output (UBYTE *src, USHORT src_len, UBYTE *dst,
+                             T_ATI_OUTPUT_TYPE output_type);
+
+/*
++----------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  :                      |
+|                                 ROUTINE : sat_buffer_output    |
++----------------------------------------------------------------+
+
+  PURPOSE : Buffer messages for RUN AT. Send buffered messages with
+            confirm respond later
+*/
+LOCAL void sat_buffer_output(T_ACI_SAT_TERM_RESP resp_data)
+{
+  UBYTE *new_buf;
+  UBYTE *old_buf;
+  
+  TRACE_FUNCTION("sat_buffer_output");
+
+  if ( sat_out_buf EQ NULL ) /* first message to buffer */
+  {
+    ACI_MALLOC(sat_out_buf, resp_data.at_resp_count +1);
+  }
+  else 
+  {
+    /* enlarge buffer */
+    old_buf = sat_out_buf;
+    ACI_MALLOC(new_buf, sat_out_buf_len + resp_data.at_resp_count +1);
+    memcpy(new_buf, sat_out_buf, sat_out_buf_len);
+    sat_out_buf = new_buf;
+    ACI_MFREE(old_buf);
+  }
+
+  /* add new message text to the end of the output buffer */
+  memcpy(sat_out_buf + sat_out_buf_len, 
+         resp_data.at_resp, resp_data.at_resp_count);
+  sat_out_buf_len += resp_data.at_resp_count;
+  sat_out_buf[sat_out_buf_len] = 0;
+  
+}
+
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  :                         |
+|                                 ROUTINE :sat_send_buffered_output |
++-------------------------------------------------------------------+
+
+  PURPOSE : for RUN AT : send buffered messages with confirm respond
+*/
+LOCAL void sat_send_buffered_output(T_ACI_SAT_TERM_RESP resp_data)
+{
+  TRACE_FUNCTION("sat_send_buffered_output");
+
+  /* copy confirm respond to end of output buffer */
+  sat_buffer_output(resp_data);
+
+  /* send buffered respond */
+  resp_data.at_resp       = sat_out_buf;
+  resp_data.at_resp_count = sat_out_buf_len;
+  TRACE_EVENT_P2("Buffer (%d): %s", resp_data.at_resp_count, (char*) resp_data.at_resp);
+  psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data );
+
+  /* free buffered output */
+  ACI_MFREE(sat_out_buf);
+  sat_out_buf     = NULL;
+  sat_out_buf_len = 0;
+
+}
+
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  :                         |
+|                                 ROUTINE : sat_src_result_cb       |
++-------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+
+
+GLOBAL void sat_src_result_cb ( UBYTE             src_id,
+                                T_ATI_OUTPUT_TYPE	output_type,
+                                UBYTE             *output,
+                                USHORT            output_len)
+{
+  UBYTE *formated_response;
+  T_ACI_SAT_TERM_RESP resp_data;
+  T_ATI_SRC_PARAMS *src_params;
+//  T_at_resp *at_response;
+  
+  psaSAT_InitTrmResp( &resp_data );
+
+  TRACE_FUNCTION("sat_src_result_cb()");
+
+  /* search for SAT source Id */
+  src_params = find_element (ati_src_list, src_id, search_ati_src_id);
+  if (src_params EQ NULL)
+  {
+    TRACE_EVENT ("[ERR] source ID not found");
+    return;
+  }
+  else if( src_params->src_type NEQ ATI_SRC_TYPE_SAT)
+  {
+    TRACE_EVENT ("[ERR] source ID is not from type SAT");
+    return;
+  }
+  else if( !IS_INDICATION_OUTPUT(output_type) )
+  {
+    /* size of response goes up to MAX_CMD_AT_LEN
+    The rest will be truncated */
+    ACI_MALLOC(formated_response, MAX_CMD_AT_LEN+5);
+    if( output_len > MAX_CMD_AT_LEN )
+    {
+      output_len = MAX_CMD_AT_LEN;
+    }
+
+    resp_data.at_resp_count  
+             = format_output(output, output_len, formated_response, output_type);
+    resp_data.at_resp = formated_response;
+
+
+    if ( resp_data.at_resp NEQ NULL AND !IS_CONFIRM_OUTPUT(output_type))
+    { /* Buffer messages for RUN AT. Send buffered messages with
+         confirm respond later */
+
+      TRACE_EVENT("buffer OUTPUT");
+      sat_buffer_output(resp_data);
+    }
+    else if ( resp_data.at_resp NEQ NULL AND sat_out_buf_len > 0 )
+    { /* for RUN AT: send buffered messages with confirm respond */
+      sat_send_buffered_output(resp_data);
+    }
+    else
+    { /* send respond */
+      psaSAT_SendTrmResp( RSLT_PERF_SUCCESS, &resp_data );
+    }
+
+    ACI_MFREE(formated_response);
+  }
+}
+
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  :                         |
+|                                 ROUTINE : sat_new_source          |
++-------------------------------------------------------------------+
+
+  PURPOSE : Create a new source for ATI with the corresponding struct.
+*/
+
+GLOBAL void sat_new_source( void )
+{
+/*#ifdef _SIMULATION_
+  static BOOL already_done = FALSE;
+  static UBYTE id;
+
+  TRACE_FUNCTION("sat_new_source: Win 32");
+
+  if( already_done )
+  {
+    TRACE_EVENT_P1("SAT related id: %d", id);
+    satShrdPrm.run_at_id = id;
+    return;
+  }
+  already_done = TRUE;
+#else
+  UBYTE id;
+
+  TRACE_FUNCTION("sat_new_source: target");
+#endif*/
+  /* _SIMULATION_ */
+  run_at_id = ati_init(ATI_SRC_TYPE_SAT, sat_src_result_cb, NULL);
+  if (run_at_id<CMD_SRC_MAX)
+  {
+    if (run_at_id==CMD_SRC_LCL)
+      aci_cmd_src_mode_set(run_at_id,CMD_MODE_ACI);
+    else
+      aci_cmd_src_mode_set(run_at_id,CMD_MODE_ATI);
+  }
+
+  TRACE_EVENT_P1 ("sat_new_source: SAT srcId=%d", run_at_id);
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : CMH_DTIR                |
+|                                 ROUTINE : sat_src_proc_chars      |
++-------------------------------------------------------------------+
+
+  PURPOSE : 
+*/
+
+GLOBAL BOOL sat_src_proc_chars ( UBYTE *chars )
+{
+  T_ATI_SRC_PARAMS *src_params = NULL;
+  T_ACI_SAT_TERM_RESP resp_data;
+  
+  psaSAT_InitTrmResp( &resp_data );
+
+  TRACE_FUNCTION ("sat_src_proc_chars()");
+
+  /* search for SAT source Id */
+  src_params = find_element (ati_src_list, run_at_id, search_ati_src_id);
+  if (src_params EQ NULL)
+  {
+    TRACE_EVENT ("[ERR] ati_execute: no SAT source ID present");
+    psaSAT_SendTrmResp( RSLT_ME_UNAB_PROC, &resp_data );
+    return(FALSE);
+  }
+  
+  /* do not echo AT-cmds which are sent by SAT */
+  ati_user_output_cfg[src_params->src_id].atE = 0;
+
+  return(ati_execute_sat_cmd (src_params, chars, MAX_CMD_AT_LEN));
+}
+
+
+
+#endif /* SIM_TOOLKIT */