changeset 208:ab79cf3c29a5

AT-over-RVTMUX mechanism ported over to the TCS3.2 version of ACI
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 14 Oct 2016 17:15:08 +0000
parents dcc3b8646a34
children e9bab22e874c
files components/aci-tcs3 src/g23m-aci/aci/aci_aci.c src/g23m-aci/aci/aci_cmh.h src/g23m-aci/aci/ati_cmd.c src/g23m-aci/aci/ati_src_rvt.c
diffstat 5 files changed, 213 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/components/aci-tcs3	Fri Oct 14 16:11:13 2016 +0000
+++ b/components/aci-tcs3	Fri Oct 14 17:15:08 2016 +0000
@@ -148,7 +148,7 @@
 cfile_str2ind $SRCDIR/ati_cphs.c
 cfile_str2ind $SRCDIR/ati_dti.c
 
-#cfile_str2ind $SRCDIR/ati_src_rvt.c
+cfile_str2ind $SRCDIR/ati_src_rvt.c
 #cfile_str2ind $SRCDIR/ati_omcompat.c
 
 # ACI stuff
--- a/src/g23m-aci/aci/aci_aci.c	Fri Oct 14 16:11:13 2016 +0000
+++ b/src/g23m-aci/aci/aci_aci.c	Fri Oct 14 17:15:08 2016 +0000
@@ -105,8 +105,15 @@
 | STATE   : code                        ROUTINE : aci_aci_cmd_req    |
 +--------------------------------------------------------------------+
 
-  PURPOSE : handle ACI command request primitive. It is only a
-            signal and must not be freed by PFREE.
+  PURPOSE : handle ACI command request primitive. The original comment
+	    said "It is only a signal and must not be freed by PFREE",
+	    but it appears to have been wrong even before we touched
+	    this code.
+
+  FreeCalypso change: this primitive (not signal!) was originally used
+  for by TI's _SIMULATION_ environment (the code in ati_src_tst.c,
+  removed in the TCS3.2 version we got), but we have repurposed it
+  for our AT-over-RVTMUX implementation in ati_src_rvt.c.
 
 */
 
@@ -120,8 +127,8 @@
     cmd->cmd_seq[cmd->cmd_len] = '\0';
     TRACE_EVENT_P1 ("%s", cmd->cmd_seq);
   }
-#ifdef DTI
-#ifdef _SIMULATION_
+
+#if defined _SIMULATION_ AND defined DTI
   if (cmd->cmd_src >= CMD_SRC_EXT AND cmd->cmd_src <= MAX_TST_SRC)
   {
 #ifdef FF_ATI_BAT
@@ -153,9 +160,12 @@
   {
     TRACE_EVENT_P1 ("aci_aci_cmd_req(): [WRN] srcId=%d, but must be 0x01 or 0x02", cmd->cmd_src);
   }
-#endif /* _SIMULATION_ */
-#endif /* DTI */
-#endif
+#elif 1 //CONFIG_AT_RVTMUX
+
+  ati_src_rvt_proc_cmd (cmd);
+
+#endif	/* old _SIMULATION_ vs FreeCalypso AT-over-RVTMUX */
+#endif	/* FF_ATI */
 
   PFREE (cmd);
 
--- a/src/g23m-aci/aci/aci_cmh.h	Fri Oct 14 16:11:13 2016 +0000
+++ b/src/g23m-aci/aci/aci_cmh.h	Fri Oct 14 17:15:08 2016 +0000
@@ -554,7 +554,8 @@
   CMD_SRC_ATI_5,           /* added in case of SAT run at cmd
                            THIS DOES NOT MEAN THIS IS THE SAT SOURCE THOUGH !!! */
 #endif /* SIM_TOOLKIT */
-#if defined FF_EOTD  OR  defined _SIMULATION_
+/* FreeCalypso debug hack: reusing CMD_SRC_ATI_6 for our AT-over-RVTMUX */
+#if 1 //defined FF_EOTD
   CMD_SRC_ATI_6,           /* added in case of Location Service (test purposes) */
 #endif /* FF_EOTD  OR  _SIMULATION_ */
 #endif /* GOLITE */
--- a/src/g23m-aci/aci/ati_cmd.c	Fri Oct 14 16:11:13 2016 +0000
+++ b/src/g23m-aci/aci/ati_cmd.c	Fri Oct 14 17:15:08 2016 +0000
@@ -1453,6 +1453,10 @@
   aci_sat_cmd_init();
 #endif
 
+#if 1 //CONFIG_AT_RVTMUX
+  ati_src_rvt_register();
+#endif
+
   cmd_clearCnmiBuf ();
 
   /* for ATI parameters that are source dependant */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-aci/aci/ati_src_rvt.c	Fri Oct 14 17:15:08 2016 +0000
@@ -0,0 +1,189 @@
+/*
+ * This module is a FreeCalypso addition.  Here we are going to implement
+ * a mechanism for passing AT commands and responses over RVTMUX.
+ */
+
+#if 0
+#include "config.h"
+#include "fixedconf.h"
+#include "condat-features.h"
+#include "aci_conf.h"
+#endif
+
+/* includes copied from ati_cmd.c */
+
+#undef DUMMY_ATI_STRINGS
+
+#include "aci_all.h"
+
+#include "dti.h"      /* functionality of the dti library */
+#include "line_edit.h" /* SKA 2002-09-05 */
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_io.h"
+#include "aci_cmd.h"
+#include "l4_tim.h"
+
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "psa.h"
+#include "cmh.h"
+
+#include "aci_lst.h"
+#include "dti_conn_mng.h"
+#ifdef UART
+#include "psa_uart.h"
+#endif
+#include "ati_io.h"
+#include "aci_mem.h"
+
+#ifdef SIM_TOOLKIT
+#include "ati_src_sat.h"
+#include "psa_cc.h"
+#include "psa_sat.h"
+#endif /* SIM_TOOLKIT */
+
+#ifdef GPRS
+#include "gaci_cmh.h"
+#include "gaci_cmd.h"
+#endif /* GPRS */
+
+#include "aci_prs.h"
+
+
+#ifndef _SIMULATION_
+#ifdef UART
+#include "cmh_uart.h"
+#endif
+#endif
+
+#include "psa_sms.h"
+#include "aci.h"
+#include "ati_ext_mech.h"
+
+#ifdef FF_ATI_BAT
+#include "ati_bat.h"
+#include "aci_bat.h"
+#endif
+
+EXTERN T_ACI_LIST *ati_src_list;
+
+#include "rvt/rvt_gen.h"
+
+static UBYTE rvt_src_id;
+static T_RVT_USER_ID rvt_user_id;
+
+/*
+ * The following function is the callback registered with RVT; it gets
+ * called in RVT HISR context.  We allocate an ACI_CMD_REQ primitive,
+ * copy the received string into it and post it to ACI to be processed
+ * in our own task context.
+ */
+GLOBAL void ati_src_rvt_input_callback (T_RVT_BUFFER in_str, UINT16 in_str_len)
+{
+	PALLOC (aci_cmd_req, ACI_CMD_REQ);
+
+	aci_cmd_req->cmd_src = rvt_src_id;
+	aci_cmd_req->cmd_len = in_str_len;
+	memcpy(aci_cmd_req->cmd_seq, in_str, in_str_len);
+
+	PSENDX (ACI, aci_cmd_req);
+}
+
+/*
+ * The following function is called from aci_aci.c when an ACI_CMD_REQ
+ * primitive (sent by the previous function) has been received.
+ */
+GLOBAL BOOL ati_src_rvt_proc_cmd (T_ACI_CMD_REQ *aci_cmd_req)
+{
+    T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, rvt_src_id,
+						 search_ati_src_id);
+
+    ati_user_output_cfg[rvt_src_id].atE = 0;
+
+    if (src_params->text_mode EQ CMD_MODE)
+    {
+      TRACE_FUNCTION ("ati_src_rvt_proc_cmd () CMD MODE");
+
+      aci_cmd_req->cmd_seq[aci_cmd_req->cmd_len] = '\r';     /* make it V.25 ter compatible */
+      aci_cmd_req->cmd_seq[(aci_cmd_req->cmd_len) + 1] = '\0';
+      aci_cmd_req->cmd_len++;
+    }
+    else /* text has to be terminated by Ctrl-Z */
+    {
+      TRACE_FUNCTION ("ati_src_rvt_proc_cmd () TEXT MODE");
+
+      aci_cmd_req->cmd_seq[aci_cmd_req->cmd_len] = 0x1a;     /* make it V.25 ter compatible */
+      aci_cmd_req->cmd_seq[(aci_cmd_req->cmd_len) + 1] = '\0';
+      aci_cmd_req->cmd_len++;
+    }
+
+    return (ati_execute (rvt_src_id,
+                         aci_cmd_req->cmd_seq,
+                         aci_cmd_req->cmd_len));
+}
+
+/*
+ * The following function is the callback registered with ATI; it gets
+ * called when ATI has something to send to the user.
+ */
+GLOBAL void ati_src_rvt_result_cb (UBYTE              src_id,
+                                   T_ATI_OUTPUT_TYPE  output_type,
+                                   UBYTE              *output,
+                                   USHORT             output_len)
+{
+  TRACE_FUNCTION ("ati_src_rvt_result_cb ()");
+  rvt_send_trace_cpy (output, rvt_user_id, output_len, RVT_ASCII_FORMAT);
+}
+
+/*
+ * The following function is the other callback registered with ATI.
+ */
+GLOBAL void ati_src_rvt_line_state_cb (UBYTE                 src_id,
+                                       T_ATI_LINE_STATE_TYPE line_state_type,
+                                       ULONG                 line_state_param)
+{
+  TRACE_FUNCTION ("ati_src_rvt_line_state_cb ()");
+
+  switch (line_state_type)
+  {
+    case ATI_LINE_STATE_OUTPUT_TYPE:
+      TRACE_EVENT_P1 ("[DBG] ati_src_rvt_line_state_cb (): ATI_LINE_STATE_OUTPUT_TYPE = %d", line_state_param);
+      break;
+
+    case ATI_LINE_STATE_DCD:
+      TRACE_EVENT_P1 ("[DBG] ati_src_rvt_line_state_cb (): ATI_LINE_STATE_DCD = %d", line_state_param);
+      break;
+
+    case ATI_LINE_STATE_RNG:  /* TODO */
+    {
+      T_IO_RING_PARAMS rng_params;
+
+      memcpy (&rng_params, (T_IO_RING_PARAMS*)line_state_param,
+              sizeof(T_IO_RING_PARAMS));
+
+      TRACE_EVENT_P1 ("[DBG] ati_src_rvt_line_state_cb (): ATI_LINE_STATE_RNG = %d", rng_params.ring_stat);
+
+      break;
+    }
+
+    default:
+      TRACE_EVENT_P1 ("[WRN] ati_src_rvt_line_state_cb (): UNKNOWN line_state_type = %d", line_state_type);
+      break;
+  }
+}
+
+/*
+ * The following function is called from ati_cmd_init() in ati_cmd.c
+ * to register our mechanism.
+ */
+GLOBAL void ati_src_rvt_register (void)
+{
+  rvt_register_id ("AT", &rvt_user_id, ati_src_rvt_input_callback);
+  rvt_src_id = ati_init (ATI_SRC_TYPE_TST,
+                         ati_src_rvt_result_cb,
+                         ati_src_rvt_line_state_cb);
+  ati_switch_mode(rvt_src_id, ATI_CMD_MODE);
+}