\r\n -> \n
[gnokii.git] / common / misc.c
index d9c57ad..1adf9c8 100644 (file)
 
   A Linux/Unix toolset and driver for Nokia mobile phones.
 
-  Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml.
-
   Released under the terms of the GNU GPL, see file COPYING for more details.
 
-  $Id$
-  
-  $Log$
-  Revision 1.1.1.1  2001/11/25 21:59:04  short
-  :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001
-
-  Revision 1.19  2001/11/22 17:56:53  pkot
-  smslib update. sms sending
-
-  Revision 1.18  2001/09/09 21:45:49  machek
-  Cleanups from Ladislav Michl <ladis@psi.cz>:
-
-  *) do *not* internationalize debug messages
-
-  *) some whitespace fixes, do not use //
-
-  *) break is unneccessary after return
+*/
 
-  Revision 1.17  2001/08/09 12:34:34  pkot
-  3330 and 6250 support - I have no idea if it does work (mygnokii)
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+
+#ifndef WIN32
+  #include <sys/types.h>
+  #include <sys/stat.h>
+  #include <stdlib.h>
+  #include <fcntl.h>
+  #include <signal.h>
+  #include <unistd.h>
+  #include <errno.h>
+#endif
 
-  Revision 1.16  2001/03/21 23:36:04  chris
-  Added the statemachine
-  This will break gnokii --identify and --monitor except for 6210/7110
+#include "misc.h"
+#include "gsm-common.h"
+
+#ifndef HAVE_TIMEOPS
+
+/* FIXME: I have timersub defined in sys/time.h :-( PJ
+   FIXME: Jano wants this function too... PJ
+
+int timersub(struct timeval *a, struct timeval *b, struct timeval *result) {
+  do {
+    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;
+    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;
+    if ((result)->tv_usec < 0) {
+      --(result)->tv_sec;
+      (result)->tv_usec += 1000000;
+    }
+  } while (0);
+}
+*/
 
-  Revision 1.15  2001/03/06 10:38:52  machek
-  Dancall models added to the global list.
+#endif
 
-  Revision 1.14  2001/02/06 13:55:23  pkot
-  Enabled authentication in 51xx models
+int GetLine(FILE *File, char *Line, int count) {
 
-  Revision 1.13  2001/02/02 08:09:56  ja
-  New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code.
+  char *ptr;
 
+  if (fgets(Line, count, File)) {
+    ptr=Line+strlen(Line)-1;
 
-*/
+    while ( (*ptr == '\n' || *ptr == '\r') && ptr>=Line) *ptr--='\0';
 
-#include <string.h>
-#include "misc.h"
+    return strlen(Line);
+  } else return -1;
+}
 
-int GetLine(FILE *File, char *Line, int count)
+/*
+ * like atoi, but of a non-null-terminated string of a specified portion
+ */
+int mem_to_int(const char str[], int len)
 {
-       char *ptr;
-
-       if (fgets(Line, count, File)) {
-               ptr = Line + strlen(Line) - 1;
+  char aux[81];
 
-               while ( (*ptr == '\n' || *ptr == '\r') && ptr>=Line)
-                       *ptr--='\0';
+  strncpy(aux, str, len);
+  aux[len]=0;
+  return( atoi(aux) );
+} 
 
-               return strlen(Line);
-       }
-       else
-               return 0;
-}
-
-static PhoneModel models[] = {
-       {NULL,    "", 0 },
-       {"2711",  "?????", PM_SMS },            /* Dancall */
-       {"2731",  "?????", PM_SMS },
-       {"1611",  "NHE-5", 0 },
-       {"2110i", "NHE-4", PM_SMS },
-       {"2148i", "NHK-4", 0 },
-       {"3110",  "0310" , PM_SMS | PM_DTMF | PM_DATA }, /* NHE-8 */
-       {"3210",  "NSE-8", PM_SMS | PM_DTMF },
-       {"3210",  "NSE-9", PM_SMS | PM_DTMF },
-       {"3310",  "NHM-5", PM_SMS | PM_DTMF },
-       {"3330",  "NHM-6", PM_SMS | PM_DTMF },
-       {"3810",  "0305" , PM_SMS | PM_DTMF | PM_DATA }, /* NHE-9 */
-       {"5110",  "NSE-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"5130",  "NSK-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"5160",  "NSW-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"5190",  "NSB-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6110",  "NSE-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6120",  "NSC-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6130",  "NSK-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6150",  "NSM-1", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"616x",  "NSW-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6185",  "NSD-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6190",  "NSB-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION },
-       {"6210",  "NPE-3", PM_CALLERGROUP | PM_CALENDAR | PM_EXTPBK | PM_SMS},
-       {"6250",  "NHM-3", PM_CALLERGROUP | PM_CALENDAR | PM_EXTPBK },
-       {"7110",  "NSE-5", PM_CALLERGROUP | PM_SPEEDDIAL | PM_EXTPBK },
-       {"8810",  "NSE-6", PM_SMS | PM_DTMF | PM_DATA },
-       {"8110i", "0423",  PM_SMS | PM_DTMF | PM_DATA }, /* Guess for NHE-6 */
-       {"8110",  "0423" , PM_SMS | PM_DTMF | PM_DATA }, /* NHE-6BX */
-       {"9000i", "RAE-4", 0 },
-       {"9110",  "RAE-2", 0 },
-       {"550",   "THF-10", 0 },
-       {"540",   "THF-11", 0 },
-       {"650",   "THF-12", 0 },
-       {"640",   "THF-13", 0 },
-       {NULL,    NULL, 0 }
-};
-
-PhoneModel *GetPhoneModel (const char *num)
+/*
+ * make hexdump of Message
+ */
+#ifdef DEBUG
+void hexdump(u16 MessageLength, u8 *MessageBuffer)
 {
-       register int i = 0;
-
-       while (models[i].number != NULL) {
-               if (strcmp (num, models[i].number) == 0) {
-                       dprintf("Found model\n");
-                       return (&models[i]);
-               }
-               else {
-                       dprintf("comparing %s and %s\n", num, models[i].number);
-               }
-               i++;
-       }
-
-       return (&models[0]);
+  int count;
+  int n=0;
+  char string1[80]="";
+  char string2[80]="";
+  char hex1[10];
+  char hex2[10];
+  for (count = 0; count < MessageLength; count ++)
+  {
+    n++;
+
+    switch (MessageBuffer[count]) {
+      case 0x09:
+        sprintf(hex1,"%02x  ",MessageBuffer[count]);
+        strcpy(hex2,".");
+        break;
+      default:
+        if (isprint(MessageBuffer[count]))
+          sprintf(hex1,"%02x%c ",MessageBuffer[count],MessageBuffer[count]);
+        else
+          sprintf(hex1,"%02x  ",MessageBuffer[count]);
+
+        if (isprint(MessageBuffer[count])) sprintf(hex2,"%c",MessageBuffer[count]);
+                                      else strcpy(hex2,".");
+        break;
+    }
+
+    if ( n!=15 && count != MessageLength-1 ) hex1[3]='|';
+    strcat(string1,hex1);
+    strcat(string2,hex2);
+    if ( n==15 || count == MessageLength-1 )
+    {      
+      fprintf(stdout,"%-60s%03x %s\n",string1,count+1,string2);
+      strcpy(string1,"");
+      strcpy(string2,"");
+      n=0;
+    }
+  }//for count
+
+  if (n!=0) fprintf (stdout,_("\n")); 
+  fflush(stdout);
 }
 
-inline char *GetModel (const char *num)
-{
-       return (GetPhoneModel(num)->model);
+void txhexdump(u16 MessageLength, u8 *MessageBuffer)
+{ 
+  int count;
+  int n=0;
+  for (count = 0; count < MessageLength; count ++)
+   {
+    n++;
+    fprintf(stdout,_("%02x"),MessageBuffer[count]);
+    switch (MessageBuffer[count]) {
+      case 0x09:
+        fprintf(stdout,_(" |"));
+        break;
+      default:
+        if (isprint(MessageBuffer[count])) fprintf(stdout, _("%c|"),MessageBuffer[count]);
+                                      else fprintf(stdout,_(" |"));
+        break;
+    }
+
+    if (n==18)
+    { 
+      fprintf (stdout,_("\n"));
+      n=0;
+    }
+   }//for count
+
+  if (n!=0) fprintf (stdout,_("\n")); 
+
+  fflush(stdout);
 }
-
-
+#endif