Branch update for mygnokii2002_03_17_19_29nl
[gnokii.git] / common / gsm-api.c
index 229232d..00f1ee3 100644 (file)
@@ -33,6 +33,7 @@
 #include "gsm-api.h"
 
 #ifndef UCLINUX
+#include "newmodules/n3110.h"
 #include "newmodules/n6110.h"
 #include "newmodules/n7110.h"
 #include "newmodules/newat.h"
@@ -43,6 +44,7 @@
 #endif /* UCLINUX */
 #include "protocol/fbus.h"
 #ifndef UCLINUX
+#include "protocol/fbus3110.h"
 #include "protocol/mbus.h"
 #include "protocol/at.h"
 #endif /* UCLINUX */
@@ -274,6 +276,9 @@ bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType co
   if (strstr(InfoToCheck.TekramModels, model) != NULL) {
     if (connection==GCT_Tekram) found_match=true;
   }
+  if (strstr(InfoToCheck.FBUS3110Models, model) != NULL) {
+    if (connection==GCT_FBUS3110) found_match=true;
+  }
 #endif /* UCLINUX */
 
   return found_match;
@@ -329,7 +334,8 @@ GSM_Error TryNewNokia(char *model, char *device, char *initlength, GSM_Connectio
     sleep(1);
 
 #ifndef UCLINUX
-  if (!strcmp(phonemodel,"NPE-3") || !strcmp(phonemodel,"NSE-5"))
+  if (!strcmp(phonemodel,"NPE-3") || !strcmp(phonemodel,"NSE-5") || 
+      !strcmp(phonemodel,"NHM-3"))
   {
     GSM->Terminate();      
     
@@ -365,6 +371,9 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec
 
   CurrentRLP_RXCallback = rlp_callback;
   CurrentCallPassup=NULL;
+#ifndef UCLINUX
+  CurrentCallDivert=NULL;
+#endif /* UCLINUX */
   CurrentPhonebookEntry=NULL;
 #ifndef UCLINUX
   CurrentNetworkInfo = NULL;
@@ -378,6 +387,7 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec
 #ifndef UCLINUX
   CurrentDisableKeepAlive=false;
   CurrentCalendarNotesInfo.HowMany=2000;
+  CurrentSMSMessage=NULL;
 #endif /* UCLINUX */
   CurrentMagicError = GE_BUSY;  
   
@@ -438,13 +448,10 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec
       Protocol = &MBUS_Functions;
       CurrentConnectionType=GCT_MBUS;    
       connection2=GCT_MBUS;
-#ifndef UCLINUX
       if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
       {
         found_match=true;
-      } else
-#endif /* UCLINUX */
-                               {
+      } else {
         GSM->Terminate();      
       }
     }
@@ -453,61 +460,103 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec
 
     usleep(50);
         
-  } else
-#endif /* UCLINUX */
-               {
-#ifndef UCLINUX
-#ifdef DEBUG
-    if (CheckModel (Nsniff_Information, model, connection)) {
-      /* Set pointers to relevant addresses */
-      GSM = &Nsniff_Functions;
-      GSM_Info = &Nsniff_Information;
-      GSM_LinkOK = &CurrentLinkOK;
-      found_match=true;
-    }
-#endif
-#endif /* UCLINUX */
-
-    if (CheckModel (N6110_Information, model, connection)) {
-      /* Set pointers to relevant addresses */
+  } else {
+    if (!strcmp(model,"modelauto")) {
+      /* For now */
       GSM = &N6110_Functions;
       GSM_Info = &N6110_Information;
       GSM_LinkOK = &CurrentLinkOK;
-      found_match=true;
-    }
-#ifndef UCLINUX
-    if (CheckModel (N7110_Information, model, connection)) {
-      /* Set pointers to relevant addresses */
-      GSM = &N7110_Functions;
-      GSM_Info = &N7110_Information;
-      GSM_LinkOK = &CurrentLinkOK;
-      found_match=true;
-    }
-    if (CheckModel (Nat_Information, model, connection)) {
-      /* Set pointers to relevant addresses */
-      GSM = &Nat_Functions;
-      GSM_Info = &Nat_Information;
-      GSM_LinkOK = &CurrentLinkOK;
-      found_match=true;
-    }
-#endif /* UCLINUX */
-
-    if (found_match) {
+#ifdef DEBUG
+      fprintf(stdout,_("Trying to find connected model...\n"));
+#endif
       switch (connection) {
         case GCT_FBUS    : Protocol = &FBUS_Functions;    break;
-#ifndef UCLINUX
         case GCT_Infrared: Protocol = &FBUS_Functions;    break;
         case GCT_Tekram  : Protocol = &FBUS_Functions;    break;
         case GCT_DLR3    : Protocol = &FBUS_Functions;    break;
         case GCT_MBUS    : Protocol = &MBUS_Functions;    break;
         case GCT_Irda    : Protocol = &FBUSIRDA_Functions;break;
         case GCT_AT      : Protocol = &AT_Functions;      break;
-        case GCT_Default : Protocol = NULL;               break;
+        case GCT_FBUS3110: Protocol = &FBUS3110_Functions;break;
+      }
+      CurrentConnectionType=connection;    
+      connection2=connection;
+      if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE)
+      {
+        found_match=true;
+      } else {
+        GSM->Terminate();      
+      }
+
+      if (!found_match) return GE_NOTSUPPORTED;
+
+      usleep(50);
+
+  } else
+#endif /* UCLINUX */
+               {
+#ifndef UCLINUX
+#ifdef DEBUG
+      if (CheckModel (Nsniff_Information, model, connection)) {
+        /* Set pointers to relevant addresses */
+        GSM = &Nsniff_Functions;
+        GSM_Info = &Nsniff_Information;
+        GSM_LinkOK = &CurrentLinkOK;
+        found_match=true;
+      }
+#endif
+
+      if (CheckModel (N3110_Information, model, connection)) {
+        /* Set pointers to relevant addresses */
+        GSM = &N3110_Functions;
+        GSM_Info = &N3110_Information;
+        GSM_LinkOK = &CurrentLinkOK;
+        found_match=true;
+      }
 #endif /* UCLINUX */
+      if (CheckModel (N6110_Information, model, connection)) {
+        /* Set pointers to relevant addresses */
+        GSM = &N6110_Functions;
+        GSM_Info = &N6110_Information;
+        GSM_LinkOK = &CurrentLinkOK;
+        found_match=true;
+      }
+#ifndef UCLINUX
+      if (CheckModel (N7110_Information, model, connection)) {
+        /* Set pointers to relevant addresses */
+        GSM = &N7110_Functions;
+        GSM_Info = &N7110_Information;
+        GSM_LinkOK = &CurrentLinkOK;
+        found_match=true;
+      }
+      if (CheckModel (Nat_Information, model, connection)) {
+        /* Set pointers to relevant addresses */
+        GSM = &Nat_Functions;
+        GSM_Info = &Nat_Information;
+        GSM_LinkOK = &CurrentLinkOK;
+        found_match=true;
       }
-    } else
-      return GE_NOTSUPPORTED;
+#endif /* UCLINUX */
+
+      if (found_match) {
+        switch (connection) {
+          case GCT_FBUS    : Protocol = &FBUS_Functions;    break;
+#ifndef UCLINUX
+          case GCT_Infrared: Protocol = &FBUS_Functions;    break;
+          case GCT_Tekram  : Protocol = &FBUS_Functions;    break;
+          case GCT_DLR3    : Protocol = &FBUS_Functions;    break;
+          case GCT_MBUS    : Protocol = &MBUS_Functions;    break;
+          case GCT_Irda    : Protocol = &FBUSIRDA_Functions;break;
+          case GCT_AT      : Protocol = &AT_Functions;      break;
+          case GCT_FBUS3110: Protocol = &FBUS3110_Functions;break;
+#endif /* UCLINUX */
+        }
+      } else
+        return GE_NOTSUPPORTED;
+    }
+#ifndef UCLINUX
   }
+#endif /* UCLINUX */
 
     
   /* Now call model specific initialisation code. */
@@ -645,6 +694,7 @@ GSM_ConnectionType GetConnectionTypeFromString(char *Connection) {
   if (!strcmp(Connection, "infrared")) connection=GCT_Infrared;
   if (!strcmp(Connection, "mbus"))     connection=GCT_MBUS;
   if (!strcmp(Connection, "dlr3"))     connection=GCT_DLR3;
+  if (!strcmp(Connection, "fbus3110")) connection=GCT_FBUS3110;
   if (!strcmp(Connection, "at"))       connection=GCT_AT;
   if (!strcmp(Connection, "tekram210"))connection=GCT_Tekram;
 #endif /* UCLINUX */
@@ -732,30 +782,30 @@ char *GetMygnokiiVersion() {
 1.Name,2.CodeName,3.Calendar,4.Netmonitor,5.Caller groups,6.Phonebook,
 7.Authentication 8.Datacalls 9.KeysPressing 10.SMSC Default Recipient
 11.SpeedDials 12.ScreenSavers 13.DTMF 14.SMS 15.NoPowerFrame 16.StartUpLogo
-17.Profiles 18.Ringtones 19.WAP
+17.Profiles 18.Ringtones 19.WAP 20.RIngtonesNumber
 */
 
 static OnePhoneModel allmodels[] = {
 
-/*1,    2,       3,      4,       5,        6       7      8        9      10        11      12       13     14      15        16       17       18        19 */
-{"3210","NSE-8",{      0,F_NETMON,        0,      0,     0,       0,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN,    0}},
-{"3210","NSE-9",{      0,F_NETMON,        0,      0,     0,       0,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN,    0}},
-{"3310","NHM-5",{F_CAL33,F_NETMON,        0,F_PBK33,     0,       0,     0,F_SMSCDEF,F_SPEED,F_SCRSAV,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF33,F_RING_SM,    0}},
-{"3330","NHM-6",{F_CAL33,F_NETMON,        0,F_PBK33,     0,       0,F_KEYB,F_SMSCDEF,F_SPEED,F_SCRSAV,     0,F_SMS  ,        0,F_STANIM,F_PROF33,F_RING_SM,F_WAP}},
-{"5110","NSE-1",{      0,F_NETMON,        0,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0}},
-{"5130","NSK-1",{      0,F_NETMON,        0,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0}},
-{"5190","NSB-1",{      0,F_NETMON,        0,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0}},
-{"6110","NSE-3",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
-{"6130","NSK-3",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
-{"6150","NSM-1",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
-{"6190","NSB-3",{F_CAL61,F_NETMON,F_CALER61,      0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
-{"6210","NPE-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}},
-{"6250","NHM-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}},    
-{"7110","NSE-5",{F_CAL71,F_NETMON,F_CALER61,F_PBK71,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA71 ,F_PROF61,F_RINGBIN,F_WAP}},
-{"8210","NSM-3",{      0,F_NETMON,F_CALER61,      0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
-{"8850","NSM-2",{      0,F_NETMON,F_CALER61,      0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},
-{"9210","RAE-3",{      0,F_NETMON,F_CALER61,      0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0}},//quesses only !
-{""    ,""     ,{      0,       0,        0,      0,     0,       0,     0,        0,      0,       0,     0,      0,        0,       0,       0,        0,    0}}
+/*1,    2,       3,      4,       5,        6          7      8        9      10        11      12       13     14      15        16       17       18        19    20 */
+{"3210","NSE-8",{      0,F_NETMON,        0,         0,     0,       0,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN,    0, 2}},
+{"3210","NSE-9",{      0,F_NETMON,        0,         0,     0,       0,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN,    0, 2}},
+{"3310","NHM-5",{F_CAL33,F_NETMON,        0,F_PBK33SIM,     0,       0,     0,F_SMSCDEF,F_SPEED,F_SCRSAV,     0,F_SMS  ,F_NOPOWER,F_STANIM,F_PROF33,F_RING_SM,    0, 7}},
+{"3330","NHM-6",{F_CAL33,F_NETMON,        0,F_PBK33INT,     0,       0,F_KEYB,F_SMSCDEF,F_SPEED,F_SCRSAV,     0,F_SMS  ,        0,F_STANIM,F_PROF33,F_RING_SM,F_WAP, 7}},
+{"5110","NSE-1",{      0,F_NETMON,        0,         0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0, 0}},
+{"5130","NSK-1",{      0,F_NETMON,        0,         0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0, 0}},
+{"5190","NSB-1",{      0,F_NETMON,        0,         0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,       0,F_PROF51,        0,    0, 0}},
+{"6110","NSE-3",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 1}},
+{"6130","NSK-3",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 1}},
+{"6150","NSM-1",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 1}},
+{"6190","NSB-3",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 1}},
+{"6210","NPE-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71INT,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP, 5}},
+{"6250","NHM-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71INT,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP, 5}},      
+{"7110","NSE-5",{F_CAL71,F_NETMON,F_CALER61,F_PBK71INT,     0,F_DATA71,     0,F_SMSCDEF,F_SPEED,       0,     0,F_SMS71,        0,F_STA71 ,F_PROF61,F_RINGBIN,F_WAP, 5}},
+{"8210","NSM-3",{      0,F_NETMON,F_CALER61,F_PBK61INT,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 1}},
+{"8850","NSM-2",{      0,F_NETMON,F_CALER61,F_PBK61INT,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 1}},
+{"9210","RAE-3",{      0,F_NETMON,F_CALER61,         0,     0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED,       0,F_DTMF,F_SMS  ,        0,F_STA   ,F_PROF61,F_RINGBIN,    0, 0}},//quesses only !
+{""    ,""     ,{      0,       0,        0,         0,     0,       0,     0,        0,      0,       0,     0,      0,        0,       0,       0,        0,    0, 0}}
 };
 
 static OnePhoneModel *GetPhoneModelData (const char *num)