# HG changeset patch # User Mychaela Falconia # Date 1476465308 0 # Node ID ab79cf3c29a568cdbb495a72cbd6c224cac220c0 # Parent dcc3b8646a3498fae71626a14a8cd0738a4a2f27 AT-over-RVTMUX mechanism ported over to the TCS3.2 version of ACI diff -r dcc3b8646a34 -r ab79cf3c29a5 components/aci-tcs3 --- 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 diff -r dcc3b8646a34 -r ab79cf3c29a5 src/g23m-aci/aci/aci_aci.c --- 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); diff -r dcc3b8646a34 -r ab79cf3c29a5 src/g23m-aci/aci/aci_cmh.h --- 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 */ diff -r dcc3b8646a34 -r ab79cf3c29a5 src/g23m-aci/aci/ati_cmd.c --- 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 */ diff -r dcc3b8646a34 -r ab79cf3c29a5 src/g23m-aci/aci/ati_src_rvt.c --- /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 +#include +#include + +#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); +}