changeset 19:340f85ab71c1

AT+CGxx: remove leo2moko hacks
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 23 Sep 2016 06:16:09 +0000
parents 4346e5e95d3c
children a1d085f6d7e9
files g23m/condat/ms/src/aci/ati_bas.c
diffstat 1 files changed, 3 insertions(+), 118 deletions(-) [+]
line wrap: on
line diff
--- a/g23m/condat/ms/src/aci/ati_bas.c	Fri Sep 23 06:05:38 2016 +0000
+++ b/g23m/condat/ms/src/aci/ati_bas.c	Fri Sep 23 06:16:09 2016 +0000
@@ -2176,14 +2176,8 @@
 | STATE   : code                        ROUTINE : aciPrcsPlusCG      |
 +--------------------------------------------------------------------+
 
-Conditioned-out below is TI's original version of the function
-responsible for generating responses to +CGMI, +CGMM, +CGMR and +CGSN
-commands.  As you can see, it is very simple and straightforward.
-But see the comments afterward for why the FreeCalypso firmware has
-to use a not-very-clean hacked version instead.
+  PURPOSE :
 */
-
-#if 0
 LOCAL T_ATI_RSLT aciPrcsPlusCG (UBYTE srcId, CHAR* cl, CHAR* ef)
 {
   pcm_FileInfo_Type fileInfo;
@@ -2197,7 +2191,6 @@
     return ATI_FAIL;
   }
 
-
   if (pcm_ReadFile ((UBYTE*)ef, fileInfo.FileSize,
                     (UBYTE*)g_sa, &fileInfo.Version) NEQ DRV_OK)
   {
@@ -2206,118 +2199,10 @@
   }
 
   i = 0;
-  while ((UBYTE)g_sa[i] NEQ 0xFF)
-  {
+  while ((UBYTE)g_sa[i] NEQ 0xFF AND i < fileInfo.FileSize)
     i++;
-  }
   g_sa[i] = '\0';
-  io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT );
-
-  return ATI_CMPL;
-}
-#endif
-
-/*
-As you can see in the conditioned-out code above, TI's original
-implementation of +CGMI/+CGMM/+CGMR/+CGSN simply spits out whatever
-gets read out of PCM/FFS.  But if one runs that original TI code
-on the Openmoko GSM modem, there are some undesirable effects:
-
-* The strings stored in FFS in /pcm/CGM[IMR] (written there at the
-  factory along with the IMEI and the RF calibration data, I presume)
-  are just plain text, e.g., "FIC/OpenMoko" (w/o quotes) in /pcm/CGMI
-  and "Neo1973 GTA02" (ditto) in /pcm/CGMM.  The PCM code trustingly
-  reads them out of FFS and into the in-RAM PCM table.  But if you
-  look at the PCM compiled-in defaults in
-  ../../../../../chipsetsw/drivers/drv_app/ffs/board/pcmdata.c,
-  it appears that at some point they were intended to be enclosed
-  in angle brackets.  The experiments I (Space Falcon) did suggest
-  that the ATI layer is perfectly happy to emit these PlusCG responses
-  either in the angle-bracketed form, or in the form used by Om's
-  firmware, e.g., +CGMM: "Neo1973 whatever embedded modem".
-  But if PCM contains an unencapsulated string like "Neo1973 GTA02"
-  (read from FFS) and that string gets emitted raw, the ATI layer
-  gets confused somewhere.
-
-* TI's ATI layer is not the only code that needs to be kept happy.
-  The code that talks AT commands to our modem (fsogsmd or whatever)
-  probably expects the +CGMI/+CGMM/+CGMR/+CGSN responses to be
-  formatted (encapsulated) in the form in which Om's firmware emits
-  them, hence I reason we should do our best to reproduce that format.
-  My version below implements +CGMI and +CGMM by reading the string
-  value out of PCM (FFS in practice) and encapsulating it in the
-  Om-like manner before handing it to the ATI layer for output.
-
-* For +CGMR I return a compiled-in string identifying this FreeCalypso
-  firmware.  I see no point in reading anything out of FFS or PCM
-  at all in this case, as the objective of the +CGMR query is to
-  identify the firmware version in use, rather than factory FFS
-  programming.
-
-* With TI's vanilla code, the +CGSN query is logically independent of
-  the IMEI seen by the GSM stack: it fetches the CGSN record (not the
-  IMEI one) from PCM, and that record would have to be populated from
-  a /pcm/CGSN file in FFS, if there was one - but Om's GTA0x modems
-  have no such file in their FFS from the factory.  If one runs TI's
-  vanilla code, one would get this dummy output: <serial number>,
-  coming from the compiled-in PCM default table.  Om's firmware
-  responds with "+CGSN: 123456789012345" (IMEI digits, no quotes)
-  instead.  My implementation below replicates Om's functionality.
-
-So without further commentary, here is my hacked version of
-the aciPrcsPlusCG() function:
-*/
-
-LOCAL T_ATI_RSLT aciPrcsPlusCG (UBYTE srcId, CHAR* cl, CHAR* ef_req)
-{
-  CHAR* ef_read;
-  pcm_FileInfo_Type fileInfo;
-  int c, i, j, is_imei;
-  char buf[32];
-
-  TRACE_FUNCTION("aciPrcsPlusCG()");
-
-  if (!strcmp(ef_req, EF_CGMR_ID)) {
-    sprintf(g_sa, "+%s: \"FreeCalypso leo2moko port\"", ef_req);
-    io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT );
-    return ATI_CMPL;
-  } else if (!strcmp(ef_req, EF_CGSN_ID)) {
-    ef_read = EF_IMEI_ID;
-    is_imei = 1;
-  } else {
-    ef_read = ef_req;
-    is_imei = 0;
-  }
-
-  if (pcm_GetFileInfo ((UBYTE* )ef_read, &fileInfo) NEQ DRV_OK)
-  {
-    cmdCmeError (CME_ERR_MemFail);
-    return ATI_FAIL;
-  }
-
-  if (is_imei) {
-
-    for (i = 0, j = 0; i < fileInfo.FileSize; i++) {
-	buf[j++] = (fileInfo.FileLocation[i] & 0x0F) + '0';
-	buf[j++] = (fileInfo.FileLocation[i] >> 4) + '0';
-    }
-    buf[j-1] = '\0';
-
-  } else {
-
-    buf[0] = '\"';
-    for (i = 0, j = 1; i < fileInfo.FileSize; i++) {
-	c = fileInfo.FileLocation[i];
-	if (c == 0 || c == 0xFF)
-		break;
-	buf[j++] = c;
-    }
-    buf[j++] = '\"';
-    buf[j] = '\0';
-
-  }
-
-  sprintf(g_sa, "+%s: %s", ef_req, buf);
+
   io_sendMessage (srcId, g_sa, ATI_NORMAL_OUTPUT );
 
   return ATI_CMPL;