Send commitlog mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r3305 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src
      ([EMAIL PROTECTED])
   2. r3306 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src
      ([EMAIL PROTECTED])
   3. r3307 - in trunk/src/target/gsm: include/gsmd src/gsmd
      ([EMAIL PROTECTED])
   4. r3308 - in trunk/src/target/gsm: include/gsmd src/gsmd
      ([EMAIL PROTECTED])
   5. r3309 - in trunk/src/target/gsm: include/gsmd include/libgsmd
      src/gsmd src/libgsmd src/util ([EMAIL PROTECTED])
--- Begin Message ---
Author: thomas
Date: 2007-10-30 12:59:56 +0100 (Tue, 30 Oct 2007)
New Revision: 3305

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
Log:
* src/moko-dialer.c: (on_keypad_dial_clicked),
(on_keypad_pin_entry), (on_network_registered), (moko_dialer_init):
Clean up registration code (don't assume gsmd is broken!)


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2007-10-30 03:39:17 UTC (rev 3304)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2007-10-30 11:59:56 UTC (rev 3305)
@@ -1,3 +1,9 @@
+2007-10-30  Thomas Wood  <[EMAIL PROTECTED]>
+
+       * src/moko-dialer.c: (on_keypad_dial_clicked),
+       (on_keypad_pin_entry), (on_network_registered), (moko_dialer_init):
+       Clean up registration code (don't assume gsmd is broken!)
+
 2007-10-29     Michael Lauer <[EMAIL PROTECTED]>
 
        * data/default_ringtone.ogg: REMOVED

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c  
2007-10-30 03:39:17 UTC (rev 3304)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c  
2007-10-30 11:59:56 UTC (rev 3305)
@@ -71,7 +71,6 @@
   MokoTime           *time;
 
   /* Registration variables */
-  guint               reg_timeout;
   MokoGsmdConnectionNetregType registered;
   MokoGSMLocation     gsm_location;
 };
@@ -92,7 +91,6 @@
 static void  on_keypad_dial_clicked (MokoKeypad  *keypad,
                                      const gchar *number,
                                      MokoDialer  *dialer);
-static gboolean register_network_cb (MokoDialer *dialer);
 
 /* DBus functions */
 gboolean
@@ -271,14 +269,14 @@
     gchar *strings[] = {
       "None",
       "Home network registered",
-      "Waiting for network registration",
+      "Searching for network",
       "Network registration denied",
       "",
       "Roaming network registered"
     };
 
     dlg = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-        "Not connected to network.\nCurrent status = %s ", 
strings[priv->registered]);
+        "Cannot dial number. %s", strings[priv->registered]);
     gtk_dialog_run (GTK_DIALOG (dlg));
     gtk_widget_destroy (dlg);
 
@@ -337,11 +335,6 @@
   moko_gsmd_connection_send_pin (priv->connection, pin);
 
   moko_keypad_set_pin_mode (MOKO_KEYPAD (priv->keypad), FALSE);
-    
-  priv->registered = MOKO_GSMD_CONNECTION_NETREG_NONE;
-  priv->reg_timeout = g_timeout_add (GSM_REGISTER_TIMEOUT, 
-                                     (GSourceFunc)register_network_cb, 
-                                     dialer);
   g_free (pin);
 }
 
@@ -481,25 +474,21 @@
   g_return_if_fail (MOKO_IS_DIALER (dialer));
   priv = dialer->priv;
 
-  g_warning ("on_network_registered: type is %d\n", type);
-
   switch (type)
   {
     case MOKO_GSMD_CONNECTION_NETREG_NONE:
     case MOKO_GSMD_CONNECTION_NETREG_SEARCHING:
       /* Do nothing */
-      g_debug ("NetReg: Searching for network");
+      g_debug ("Searching for network");
       break;
     case MOKO_GSMD_CONNECTION_NETREG_DENIED:
       /* This may be a pin issue*/
       break;
     case MOKO_GSMD_CONNECTION_NETREG_HOME:
     case MOKO_GSMD_CONNECTION_NETREG_ROAMING:
-      g_debug ("NetReg: Network registered");
-      g_debug ("\tLocationAreaCode = %x\n\tCellID = %x", lac, cell);
+      g_debug ("Network registered: LocationAreaCode: %x. CellID: %x.", lac, 
cell);
       priv->gsm_location.lac = lac;
       priv->gsm_location.cid = cell;
-      g_source_remove (priv->reg_timeout);
       break;
     default:
       g_warning ("Unhandled register event type = %d\n", type);
@@ -597,7 +586,6 @@
   g_return_if_fail (MOKO_IS_DIALER (dialer));
   priv = dialer->priv;
   
-  g_source_remove (priv->reg_timeout);
   moko_keypad_set_pin_mode (MOKO_KEYPAD (priv->keypad), TRUE);
   moko_dialer_show_dialer (dialer, NULL);
   g_debug ("Pin Requested");
@@ -688,45 +676,7 @@
       break;
   }
 }
-static gboolean
-register_network_cb (MokoDialer *dialer)
-{
-  MokoDialerPrivate *priv;
 
-  g_return_val_if_fail (MOKO_DIALER (dialer), TRUE);
-  priv = MOKO_DIALER_GET_PRIVATE (dialer);
-
-  /* We check whether we've been registered yet, otherwise keep poking 
-   * gsmd
-   */
-  switch (priv->registered)
-  {
-    case MOKO_GSMD_CONNECTION_NETREG_NONE:
-      /* We have yet to request registration, so lets do it */
-      /* FIXME: do the pin stuff */
-      g_debug ("Requesting registration");
-      moko_gsmd_connection_network_register (priv->connection);
-      priv->registered = MOKO_GSMD_CONNECTION_NETREG_SEARCHING;
-      break;
-    case MOKO_GSMD_CONNECTION_NETREG_SEARCHING:
-      g_debug ("Waiting for registration");
-      break;
-    case MOKO_GSMD_CONNECTION_NETREG_DENIED:
-      g_debug ("Registration denied, retrying");
-      moko_gsmd_connection_network_register (priv->connection);
-      priv->registered = MOKO_GSMD_CONNECTION_NETREG_SEARCHING;
-      break;
-    case MOKO_GSMD_CONNECTION_NETREG_HOME:
-    case MOKO_GSMD_CONNECTION_NETREG_ROAMING:
-      g_debug ("Network Registered");
-           return FALSE;
-    default:
-      g_warning ("Unhandled register event type = %d\n", priv->registered);
-  }
-  
-  return TRUE;
-}
-
 /* GObject functions */
 static void
 moko_dialer_dispose (GObject *object)
@@ -854,13 +804,7 @@
   if (err && err->code == MOKO_GSMD_ERROR_CONNECT)
     exit (1); /* no point continuing if we can't connect to gsmd? */
 
-  /* Handle network registration a few seconds after powering up the 
-   * antenna*/ 
-  priv->registered = MOKO_GSMD_CONNECTION_NETREG_NONE;
-  priv->reg_timeout = g_timeout_add (GSM_REGISTER_TIMEOUT * 2, 
-                                     (GSourceFunc)register_network_cb, 
-                                     dialer);
-  
+ 
   /* Connect to the gsmd signals */
   g_signal_connect (G_OBJECT (conn), "network-registration", 
                     G_CALLBACK (on_network_registered), (gpointer)dialer);
@@ -873,6 +817,11 @@
   g_signal_connect (G_OBJECT (conn), "call-progress", 
                     G_CALLBACK (on_call_progress_changed), (gpointer)dialer);
 
+  /* FIXME:
+   *  moko_gsmd_connection_get_network_status always seems to return 0 here */
+  priv->registered = MOKO_GSMD_CONNECTION_NETREG_SEARCHING;
+  moko_gsmd_connection_network_register (conn);
+ 
   /* Set up the journal */
   priv->journal = moko_journal_open_default ();
   if (!priv->journal || !moko_journal_load_from_storage (priv->journal))




--- End Message ---
--- Begin Message ---
Author: thomas
Date: 2007-10-30 13:30:49 +0100 (Tue, 30 Oct 2007)
New Revision: 3306

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
Log:
* src/moko-dialer.c: (on_talking_reject_call): Stop ringing notification
 if we reject an incoming call


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2007-10-30 11:59:56 UTC (rev 3305)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2007-10-30 12:30:49 UTC (rev 3306)
@@ -1,5 +1,10 @@
 2007-10-30  Thomas Wood  <[EMAIL PROTECTED]>
 
+       * src/moko-dialer.c: (on_talking_reject_call): Stop ringing notification
+        if we reject an incoming call
+
+2007-10-30  Thomas Wood  <[EMAIL PROTECTED]>
+
        * src/moko-dialer.c: (on_keypad_dial_clicked),
        (on_keypad_pin_entry), (on_network_registered), (moko_dialer_init):
        Clean up registration code (don't assume gsmd is broken!)

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c  
2007-10-30 11:59:56 UTC (rev 3305)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c  
2007-10-30 12:30:49 UTC (rev 3306)
@@ -388,6 +388,7 @@
 
   g_signal_emit (G_OBJECT (dialer), dialer_signals[REJECTED], 0);
   moko_keypad_set_talking (MOKO_KEYPAD (priv->keypad), FALSE);
+  moko_notify_stop (priv->notify);
 }
 
 static void




--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-10-31 07:40:26 +0100 (Wed, 31 Oct 2007)
New Revision: 3307

Modified:
   trunk/src/target/gsm/include/gsmd/atcmd.h
   trunk/src/target/gsm/src/gsmd/atcmd.c
   trunk/src/target/gsm/src/gsmd/usock.c
Log:
gsmd: Fix the bug 928, that user cannot hang up call/cancel_atcmd until a call 
is connected.(Andrzej Zaborowski)


Modified: trunk/src/target/gsm/include/gsmd/atcmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/atcmd.h   2007-10-30 12:30:49 UTC (rev 
3306)
+++ trunk/src/target/gsm/include/gsmd/atcmd.h   2007-10-31 06:40:26 UTC (rev 
3307)
@@ -9,6 +9,7 @@
 
 extern struct gsmd_atcmd *atcmd_fill(const char *cmd, int rlen, atcmd_cb_t 
*cb, void *ctx, u_int16_t id);
 extern int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd);
+extern int cancel_atcmd(struct gsmd *g, struct gsmd_atcmd *cmd);
 extern int atcmd_init(struct gsmd *g, int sockfd);
 extern void atcmd_drain(int fd);
 

Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c       2007-10-30 12:30:49 UTC (rev 
3306)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c       2007-10-31 06:40:26 UTC (rev 
3307)
@@ -200,6 +200,52 @@
        return -1;
 }
 
+static inline void atcmd_wake_pending_queue (struct gsmd *g) 
+{
+        g->gfd_uart.when |= GSMD_FD_WRITE;
+}
+
+static inline void atcmd_wait_pending_queue (struct gsmd *g) 
+{
+        g->gfd_uart.when &= ~GSMD_FD_WRITE;
+}
+
+
+static int atcmd_done(struct gsmd *g, struct gsmd_atcmd *cmd, const char *buf)
+{
+        int rc = 0;
+        if (!cmd->cb) {
+                gsmd_log(GSMD_NOTICE, "command without cb!!!\n");
+        } else {
+                DEBUGP("Calling final cmd->cb()\n");
+                /* send final result code if there is no information
+                * response in mlbuf */
+                if (g->mlbuf_len) {
+                        cmd->resp = g->mlbuf;
+                        g->mlbuf[g->mlbuf_len] = 0;
+                } else {
+                        cmd->resp = buf;
+                }
+                rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
+                DEBUGP("Clearing mlbuf\n");
+                g->mlbuf_len = 0;
+        }
+        
+        /* remove from list of currently executing cmds */
+        llist_del(&cmd->list);
+        talloc_free(cmd);
+        
+        /* if we're finished with current commands, but still have pending
+        * commands: we want to WRITE again */
+        if (llist_empty(&g->busy_atcmds)) {
+                //g->clear_to_send = 1;
+                if (!llist_empty(&g->pending_atcmds)) {
+                        atcmd_wake_pending_queue(g);
+                }
+        }
+        return rc;
+}
+
 static int ml_parse(const char *buf, int len, void *ctx)
 {
        struct gsmd *g = ctx;
@@ -389,9 +435,8 @@
                }
                g->mlunsolicited = 0;
                g->mlbuf_len = 0;
-               return rc;
        }
-       return 0;
+       return rc;
 
 final_cb:
        /* if reach here, the final result code of a command has been reached */
@@ -405,32 +450,7 @@
        if (cmd && cms_error)
                generate_event_from_cms(g, cmd->ret);
 
-       if (!cmd->cb) {
-               gsmd_log(GSMD_NOTICE, "command without cb!!!\n");
-       } else {
-               DEBUGP("Calling final cmd->cb()\n");
-               /* send final result code if there is no information
-                * response in mlbuf */
-               if (g->mlbuf_len) {
-                       cmd->resp = g->mlbuf;
-                       g->mlbuf[g->mlbuf_len] = 0;
-               } else
-                       cmd->resp = buf;
-               rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
-               DEBUGP("Clearing mlbuf\n");
-               g->mlbuf_len = 0;
-       }
-
-       /* remove from list of currently executing cmds */
-       llist_del(&cmd->list);
-       talloc_free(cmd);
-
-       /* if we're finished with current commands, but still have pending
-        * commands: we want to WRITE again */
-       if (llist_empty(&g->busy_atcmds) && !llist_empty(&g->pending_atcmds))
-               g->gfd_uart.when |= GSMD_FD_WRITE;
-
-       return rc;
+       return atcmd_done(g, cmd, buf);
 }
 
 /* called when the modem asked for a new line of a multiline atcmd */
@@ -438,7 +458,7 @@
 {
        struct gsmd *g = data;
 
-       g->gfd_uart.when |= GSMD_FD_WRITE;
+        atcmd_wake_pending_queue(g);
 }
 
 /* callback to be called if [virtual] UART has some data for us */
@@ -510,7 +530,7 @@
                }
 
                /* Either pending_atcmds is empty or a command has to wait */
-               g->gfd_uart.when &= ~GSMD_FD_WRITE;
+                atcmd_wait_pending_queue(g);
        }
 
        return 0;
@@ -547,15 +567,37 @@
 /* submit an atcmd in the global queue of pending atcmds */
 int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd)
 {
+        int empty;
        DEBUGP("submitting command `%s'\n", cmd->buf);
 
-       if (llist_empty(&g->pending_atcmds))
-               g->gfd_uart.when |= GSMD_FD_WRITE;
+        empty = llist_empty(&g->pending_atcmds);
        llist_add_tail(&cmd->list, &g->pending_atcmds);
-
+        if (empty) {
+                atcmd_wake_pending_queue(g);
+        }
        return 0;
 }
 
+/* cancel a currently executing atcmd by issuing the command given as
+ * parameter, usually AT ot ATH.  */
+int cancel_atcmd(struct gsmd *g, struct gsmd_atcmd *cmd)
+{
+        struct gsmd_atcmd *cur;
+        if (llist_empty(&g->busy_atcmds)) {
+                return atcmd_submit(g, cmd);
+        }
+        cur = llist_entry(g->busy_atcmds.next, struct gsmd_atcmd, list);
+        DEBUGP("cancelling command `%s' with an `%s'\n", cur->buf, cmd->buf);
+        
+        if (g->mlbuf_len) {
+                DEBUGP("Discarding mlbuf: %.*s\n", g->mlbuf_len, g->mlbuf);
+                g->mlbuf_len = 0;
+        }
+        
+        llist_add(&cmd->list, &g->pending_atcmds);
+        return atcmd_done(g, cur, "OK");
+}
+
 void atcmd_drain(int fd)
 {
        int rc;

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c       2007-10-30 12:30:49 UTC (rev 
3306)
+++ trunk/src/target/gsm/src/gsmd/usock.c       2007-10-31 06:40:26 UTC (rev 
3307)
@@ -135,7 +135,13 @@
                break;
        case GSMD_VOICECALL_HANGUP:
                /* ATH0 is not supported by QC, we hope ATH is supported by 
everone */
-               cmd = atcmd_fill("ATH", 5, &usock_cmd_cb, gu, gph->id);
+               cmd = atcmd_fill("ATH", 4, &usock_cmd_cb, gu, gph->id);
+                
+                /* This command is special because it needs to be sent to
+                * the MS even if a command is currently executing.  */
+                if (cmd) {
+                        return cancel_atcmd(gu->gsmd, cmd);
+                }
                break;
        case GSMD_VOICECALL_ANSWER:
                cmd = atcmd_fill("ATA", 4, &usock_cmd_cb, gu, gph->id);
@@ -167,7 +173,7 @@
        if (cmd)
                return atcmd_submit(gu->gsmd, cmd);
        else
-               return 0;
+               return -ENOMEM;
 }
 
 static int null_cmd_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)




--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-10-31 07:41:45 +0100 (Wed, 31 Oct 2007)
New Revision: 3308

Modified:
   trunk/src/target/gsm/include/gsmd/gsmd.h
   trunk/src/target/gsm/src/gsmd/atcmd.c
Log:
gsmd: Mainly for working around the bug of GTA01 HW with moko3,  but  it can 
also solve the start up timing issue.  (Tick)


Modified: trunk/src/target/gsm/include/gsmd/gsmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/gsmd.h    2007-10-31 06:40:26 UTC (rev 
3307)
+++ trunk/src/target/gsm/include/gsmd/gsmd.h    2007-10-31 06:41:45 UTC (rev 
3308)
@@ -67,6 +67,8 @@
 #define GSMD_FLAG_V0           0x0001  /* V0 responses to be expected from TA 
*/
 #define GSMD_FLAG_SMS_FMT_TEXT 0x0002  /* TODO Use TEXT rather than PDU mode */
 
+#define GSMD_MODEM_WAKEUP_TIMEOUT     3
+
 struct gsmd {
        unsigned int flags;
        int interpreter_ready;
@@ -84,6 +86,7 @@
        unsigned char *mlbuf;           /* ml_parse buffer */
        unsigned int mlbuf_len;
        int mlunsolicited;
+        struct gsmd_timer *wakeup_timer;
 };
 
 struct gsmd_user {

Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c       2007-10-31 06:40:26 UTC (rev 
3307)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c       2007-10-31 06:41:45 UTC (rev 
3308)
@@ -564,10 +564,83 @@
        return atcmd;
 }
 
+static int null_wakeup_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) 
+{
+        struct gsmd *g = ctx;
+        if (g->wakeup_timer) {
+                DEBUGP("modem is awake, remove timer!\n");
+                gsmd_timer_unregister(g->wakeup_timer);
+                gsmd_timer_free(g->wakeup_timer);
+                g->wakeup_timer=NULL;
+        } else {
+                DEBUGP("ERROR!! The wake up response comes too late!!\n");
+        }
+        return 0;
+}
+
+static void wakeup_timeout(struct gsmd_timer *tmr, void *data) 
+{
+        struct gsmd *g=data;
+        struct gsmd_atcmd *cmd=NULL;
+        DEBUGP("Wakeup time out!!\n");
+        if (g->wakeup_timer != tmr) {
+                DEBUGP("ERROR!! g->wakeup_timer != tmr\n");
+                return;
+        }
+        g->wakeup_timer = NULL;
+        gsmd_timer_free(tmr);
+        if (!llist_empty(&g->busy_atcmds)) {
+                cmd = llist_entry(g->busy_atcmds.next,struct gsmd_atcmd, list);
+        }
+        if (!cmd) { 
+                DEBUGP("ERROR!! busy_atcmds is NULL\n");
+                return;
+        }
+        // It's a wakeup command
+        if ( cmd->buf[0]==' ') {
+                llist_del(&cmd->list);
+                talloc_free(cmd);
+                // discard the wakeup command, and pass the real command.
+                if (llist_empty(&g->busy_atcmds) && 
!llist_empty(&g->pending_atcmds)) {
+                        atcmd_wake_pending_queue(g);
+                }
+        } else {
+                DEBUGP("ERROR!! Wakeup timeout and cmd->buf is not wakeup 
command!! %s\n",cmd->buf);
+        }
+}
+
+void wakeup_timer (struct gsmd *g) 
+{
+        struct timeval tv;
+        struct gsmd_timer *timer;
+        tv.tv_sec = GSMD_MODEM_WAKEUP_TIMEOUT;
+        tv.tv_usec = 0;
+        timer=gsmd_timer_create(&tv,&wakeup_timeout,g);
+        g->wakeup_timer=timer;
+        
+}
+
+/// adding a null '\r' before real at command.
+struct gsmd_atcmd * atcmd_wakeup_modem(struct gsmd *g) 
+{
+        if (!g->wakeup_timer) {
+                DEBUGP("try to wake up\n");
+                struct gsmd_atcmd * cmd= atcmd_fill(" 
\r",2,null_wakeup_cb,g,0);
+                wakeup_timer(g);
+                if (llist_empty(&g->pending_atcmds)) {
+                        atcmd_wake_pending_queue(g);
+                }
+                llist_add_tail(&cmd->list, &g->pending_atcmds);
+        }
+}
+
+
+
 /* submit an atcmd in the global queue of pending atcmds */
 int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd)
 {
         int empty;
+        atcmd_wakeup_modem(g);
        DEBUGP("submitting command `%s'\n", cmd->buf);
 
         empty = llist_empty(&g->pending_atcmds);
@@ -628,6 +701,7 @@
 
        g->mlbuf_len = 0;
        g->mlunsolicited = 0;
+        g->wakeup_timer=NULL;
 
        g->llp.cur = g->llp.buf;
        g->llp.len = sizeof(g->llp.buf);




--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-10-31 07:42:58 +0100 (Wed, 31 Oct 2007)
New Revision: 3309

Modified:
   trunk/src/target/gsm/include/gsmd/usock.h
   trunk/src/target/gsm/include/libgsmd/phonebook.h
   trunk/src/target/gsm/src/gsmd/usock.c
   trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c
   trunk/src/target/gsm/src/util/shell.c
Log:
gsmd: Adding IMSI support (Jim Rayner)


Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h   2007-10-31 06:41:45 UTC (rev 
3308)
+++ trunk/src/target/gsm/include/gsmd/usock.h   2007-10-31 06:42:58 UTC (rev 
3309)
@@ -249,6 +249,7 @@
        GSMD_PHONEBOOK_SET_STORAGE      = 8,
        GSMD_PHONEBOOK_RETRIEVE_READRG  = 9,
        GSMD_PHONEBOOK_RETRIEVE_FIND    = 10,
+       GSMD_PHONEBOOK_GET_IMSI         = 11,
 };
 
 /* Type-of-Address, Numbering-Plan-Identification field, GSM 03.40, 9.1.2.5 */

Modified: trunk/src/target/gsm/include/libgsmd/phonebook.h
===================================================================
--- trunk/src/target/gsm/include/libgsmd/phonebook.h    2007-10-31 06:41:45 UTC 
(rev 3308)
+++ trunk/src/target/gsm/include/libgsmd/phonebook.h    2007-10-31 06:42:58 UTC 
(rev 3309)
@@ -112,4 +112,7 @@
 /* Retrieve the records of FIND request */
 extern int lgsm_pb_retrieve_find(struct lgsm_handle *lh, int num);
 
+/* Retrieve IMSI information */
+extern int lgsm_get_imsi(struct lgsm_handle *lh); // TODO this needs to go 
into a SIM specific file
+
 #endif

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c       2007-10-31 06:41:45 UTC (rev 
3308)
+++ trunk/src/target/gsm/src/gsmd/usock.c       2007-10-31 06:42:58 UTC (rev 
3309)
@@ -1317,6 +1317,26 @@
        return 0;
 }
 
+static int get_imsi_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+       struct gsmd_user *gu = ctx;
+       struct gsmd_ucmd *ucmd;
+
+       DEBUGP("resp: %s\n", resp);
+
+       ucmd = gsmd_ucmd_fill(strlen(resp)+1, GSMD_MSG_PHONEBOOK,
+                                 GSMD_PHONEBOOK_GET_IMSI, 0);
+       if (!ucmd)
+               return -ENOMEM;
+
+       strcpy(ucmd->buf, resp);
+
+       usock_cmd_enqueue(ucmd, gu);
+
+       return 0;
+}
+
+
 static int usock_rcv_phonebook(struct gsmd_user *gu,
                struct gsmd_msg_hdr *gph,int len)
 {      
@@ -1491,6 +1511,11 @@
 
                usock_cmd_enqueue(ucmd, gu);
                break;
+        
+       case GSMD_PHONEBOOK_GET_IMSI:
+               cmd = atcmd_fill("AT+CIMI", 7 + 1, &get_imsi_cb, gu, 0);
+               break;
+
        default:
                return -EINVAL;
        }       

Modified: trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c
===================================================================
--- trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c        2007-10-31 
06:41:45 UTC (rev 3308)
+++ trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c        2007-10-31 
06:42:58 UTC (rev 3309)
@@ -223,3 +223,9 @@
 
        return 0;
 }
+
+int lgsm_get_imsi(struct lgsm_handle *lh)
+{
+       return lgsm_send_simple(lh, GSMD_MSG_PHONEBOOK, 
GSMD_PHONEBOOK_GET_IMSI);
+}
+

Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c       2007-10-31 06:41:45 UTC (rev 
3308)
+++ trunk/src/target/gsm/src/util/shell.c       2007-10-31 06:42:58 UTC (rev 
3309)
@@ -128,6 +128,10 @@
 
                nFIND = 0;
                break;
+       case GSMD_PHONEBOOK_GET_IMSI:
+               payload = (char *)gmh + sizeof(*gmh);
+               printf("imsi <%s>\n", payload);
+               break;
        default:
                return -EINVAL;
        }       
@@ -363,6 +367,7 @@
                "\tsM\tSMS Set preferred storage (sM=mem1,mem2,mem3)\n"
                "\tsc\tSMS Show Service Centre\n"
                "\tsC\tSMS Set Service Centre (sC=number)\n"
+               "\tim\tGet imsi\n"
                "\tq\tQuit\n"
                );
 }
@@ -629,6 +634,9 @@
                                        lgsm_sms_set_smsc(lgsmh, ptr + 1);
                        } else if (!strcmp(buf, "n")) {
                                lgsm_get_subscriber_num(lgsmh);
+                       } else if (!strncmp(buf, "im", 2)) {
+                               printf("Get imsi\n");
+                               lgsm_get_imsi(lgsmh);
                        } else {
                                printf("Unknown command `%s'\n", buf);
                        }




--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to