diff src/aci2/aci/ati_omcompat.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children b16d79c550a2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/aci/ati_omcompat.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,265 @@
+/*
+ * This module has been added to the Leonardo GSM firmware source by
+ * Spacefalcon the Outlaw.  It contains the implementation of the AT@
+ * commands which were invented by Openmoko.  The addition of this code
+ * to the present leo2moko source tree allows our fw to serve as a
+ * compatible and fully functional replacement for the closed original
+ * mokoN firmware.
+ */
+
+#ifndef ATI_OMCOMPAT_C
+#define ATI_OMCOMPAT_C
+
+#include "aci_all.h"
+
+#include <ctype.h>
+#include <string.h>
+
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+#include "aci_io.h"
+#include "aci_cmd.h"
+#include "l4_tim.h"
+#include "line_edit.h"
+#include "aci_lst.h"
+
+#include "pcm.h"
+#include "audio.h"
+#include "aci.h"
+#include "rx.h"
+#include "pwr.h"
+#include "l4_tim.h"
+
+#ifdef GPRS
+#ifdef DTI
+#include "dti.h"
+#include "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+#endif /* DTI */
+#include "gaci.h"
+#include "gaci_cmh.h"
+#include "gaci_cmd.h"
+#endif  /* GPRS */
+
+#include "aci_mem.h"
+#include "aci_prs.h"
+
+#include "ati_int.h"
+
+#ifndef _SIMULATION_
+#include "ffs\ffs.h"
+#endif
+
+#ifdef FF_ATI_BAT
+
+#include "typedefs.h"
+#include "gdd.h"
+#include "bat.h"
+
+#include "ati_bat.h"
+
+#endif /*FF_ATI_BAT*/
+
+#include "audio\audio_api.h"
+#include "abb.h"
+#include "..\drivers\drv_app\power\power.h"
+
+#ifdef GPRS
+#include "p_mph.h"
+#include "p_mphc.h"
+#include "..\alr\alr_gprs.h"
+#endif
+#include "p_tb.h"
+#include "..\alr\alr.h"
+
+/*
+ * PURPOSE : @ST command (Configure the sidetone level)
+ */
+GLOBAL T_ATI_RSLT atAtST (char *cl, UBYTE srcId)
+{
+	T_ACI_RETURN ret = AT_FAIL;  
+	char tmp[8]={0};
+	INT8 gain = -26;
+	TRACE_FUNCTION("atAtST()");
+
+	/*
+	 * input functionality
+	 */
+	cl = parse(cl,"s", (LONG)8, tmp);
+
+	gain = atoi(tmp);
+
+	if ( cl )
+	{
+		if ( gain == -23 || gain == -20 || gain == -17 || gain == -14 || gain == -11 || gain == -8 || gain == -5 || gain == -2 || gain == 1 || gain == -26 )
+		{
+			Side_Tone_Write(gain);
+			return (ATI_CMPL);
+		}
+		else
+		{     
+			cmdCmsError(CMS_ERR_OpNotAllowed);
+			return (ATI_FAIL);
+		}
+	} 
+}
+
+GLOBAL T_ATI_RSLT queatAtST (char *cl, UBYTE srcId)
+{
+	char *me="+ST: ";
+	INT8 ST1;
+	T_ACI_RETURN ret = AT_FAIL;  
+
+	TRACE_FUNCTION("queatAtST()");
+
+	ST1 = Side_Tone_Read();
+
+	sprintf(g_sa,"%s%d",me,ST1);
+
+	io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
+
+	return (ATI_CMPL);
+
+}
+
+/*
+ * PURPOSE : @AUL command (Audio table load)
+ */
+
+static char tmp[8]={0};
+
+GLOBAL T_ATI_RSLT atAtAUL (char *cl, UBYTE srcId)
+{
+	T_ACI_RETURN ret = AT_FAIL;    
+	T_AUDIO_MODE_LOAD audio_mode_load_parameter;  
+	T_RV_RETURN return_path;
+
+	/* initalize the return path, for this test the return path is an message */
+	return_path.callback_func = NULL;
+	return_path.addr_id = rvf_get_taskid();
+
+	TRACE_FUNCTION("atAtAUL()"); 
+
+	/*
+	 * input functionality
+	 */
+	cl = parse(cl,"s", (LONG)8, tmp);   
+
+	sprintf(audio_mode_load_parameter.audio_mode_filename, "para%s", tmp);
+	
+	if ( audio_mode_load(&audio_mode_load_parameter, return_path) == AUDIO_ERROR )
+		return (ATI_FAIL);
+	else
+		return (ATI_CMPL);
+
+}
+
+GLOBAL T_ATI_RSLT queatAtAUL (char *cl, UBYTE srcId)
+{
+	char *me="@AUL: ";  
+	T_ACI_RETURN ret = AT_FAIL;  
+
+	TRACE_FUNCTION("queatAtAUL()");  
+
+	if (strlen(tmp))
+		sprintf(g_sa,"%s/aud/para%s.cfg",me, tmp);
+	else
+		sprintf(g_sa,"%s",me);  		
+
+	io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
+
+	return (ATI_CMPL);
+
+}
+
+/*
+ * PURPOSE : @POFF command (Power Off GSM Modem)
+ */
+ 
+GLOBAL T_ATI_RSLT atAtPOFF (char *cl, UBYTE srcId)
+{		
+	TRACE_FUNCTION("atAtPOFF");
+	
+	sprintf(g_sa,"%s","OK");  		
+	io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
+
+	ABB_Power_Off();
+	
+	return (ATI_CMPL);	
+}
+
+/*
+ * PURPOSE : @RST command (Reset GSM Modem)
+ */
+ 
+GLOBAL T_ATI_RSLT atAtRST (char *cl, UBYTE srcId)
+{		
+	TRACE_FUNCTION("atAtRST");			
+	
+	Power_OFF_Button();  
+	
+	return (ATI_CMPL);	
+}
+
+/*
+ * Openmoko's firmware contains an undocumented AT@SC command that
+ * sets/changes the IMEI of the modem.  However, it takes the IMEI
+ * input in an obfuscated form, and the implementation code is
+ * rather ugly - hence I don't feel like reimplementing it here.
+ *
+ * If you feel like changing your modem's IMEI, you can do it quite
+ * easily with FreeCalypso tools: use fc-loadtool to read the FFS
+ * sectors out of flash, then mpffs-edit to change the /pcm/IMEI file
+ * in the FFS image, then fc-loadtool again to program the modified
+ * FFS image back into flash.
+ */
+
+GLOBAL T_ATI_RSLT atAtSC (char *cl, UBYTE srcId)
+{		
+	TRACE_FUNCTION("atAtSC");			
+
+	return (ATI_FAIL);	
+}
+
+/*
+ * PURPOSE : @BAND command (Get RF band)
+ */
+
+GLOBAL T_ATI_RSLT atAtBAND (char *cl, UBYTE srcId)
+{		
+    char szDummy[32]; // to produce the exact same assembler code
+    char szBand[32];    
+    UBYTE band_sc = get_band (alr_data->serving_cell); // to produce the exact same assembler code
+
+	TRACE_FUNCTION("atAtBAND");			
+	band_sc = alr_data->sc_band;
+    switch(band_sc)
+    {
+    case BAND_GSM_900:
+      strcpy(szBand, "GSM 900");
+      break;
+    case BAND_DCS_1800:
+      strcpy(szBand, "DCS 1800");
+      break;
+    case BAND_PCS_1900:
+      strcpy(szBand, "PCS 1900");
+      break;
+    case BAND_E_GSM:
+      strcpy(szBand, "EGSM");
+      break;
+    case BAND_GSM_850:
+      strcpy(szBand, "GSM 850");
+      break;
+    default:
+      strcpy(szBand, "Unknown");
+      break;
+    }
+	sprintf(g_sa,"%s", szBand);  		
+	io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
+		
+	return (ATI_CMPL);	
+}
+
+#endif /* ATI_OMCOMPAT_C */
+