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