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. r2727 - trunk/src/target/gsm/src/gsmd ([EMAIL PROTECTED])
   2. r2728 - in trunk/src/target/gsm: include/gsmd src/gsmd
      ([EMAIL PROTECTED])
   3. r2729 - trunk/src/target/gsm/src/gsmd ([EMAIL PROTECTED])
   4. r2730 - trunk/src/target/gsm/src/gsmd ([EMAIL PROTECTED])
   5. r2731 - trunk/src/target/gsm/src/gsmd ([EMAIL PROTECTED])
   6. r2732 - in trunk/src/target/gsm: include/gsmd src/gsmd
      ([EMAIL PROTECTED])
   7. r2733 - in trunk/src/target/gsm: include/gsmd include/libgsmd
      src/gsmd src/libgsmd src/util ([EMAIL PROTECTED])
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:33:56 +0200 (Fri, 17 Aug 2007)
New Revision: 2727

Modified:
   trunk/src/target/gsm/src/gsmd/Makefile.am
   trunk/src/target/gsm/src/gsmd/gsmd.c
Log:
Implement GSMD version printout (Matt Mets <[EMAIL PROTECTED]>)


Modified: trunk/src/target/gsm/src/gsmd/Makefile.am
===================================================================
--- trunk/src/target/gsm/src/gsmd/Makefile.am   2007-08-17 08:32:50 UTC (rev 
2726)
+++ trunk/src/target/gsm/src/gsmd/Makefile.am   2007-08-17 08:33:56 UTC (rev 
2727)
@@ -2,6 +2,12 @@
 AM_CFLAGS = -std=gnu99
 plugindir = $(libdir)/gsmd
 
+gsmd-version.h:
+       echo -e '#ifndef GSMD_VERSION' \
+       '\n#define GSMD_VERSION "'`svnversion`'"' \
+       '\n#endif' > gsmd-version.h
+
+BUILT_SOURCES = gsmd-version.h
 sbin_PROGRAMS = gsmd
 
 gsmd_CFLAGS = -D PLUGINDIR=\"$(plugindir)\"

Modified: trunk/src/target/gsm/src/gsmd/gsmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/gsmd.c        2007-08-17 08:32:50 UTC (rev 
2726)
+++ trunk/src/target/gsm/src/gsmd/gsmd.c        2007-08-17 08:33:56 UTC (rev 
2727)
@@ -36,6 +36,7 @@
 #include <sys/stat.h>
 
 #include "gsmd.h"
+#include "gsmd-version.h"
 
 #include <gsmd/gsmd.h>
 #include <gsmd/atcmd.h>
@@ -325,6 +326,11 @@
               "This program is FREE SOFTWARE under the terms of GNU GPL\n\n");
 }
 
+static void print_version(void)
+{
+       printf("gsmd, version %s\n",GSMD_VERSION);
+}
+
 static void print_usage(void)
 {
        printf("Usage:\n"
@@ -382,7 +388,8 @@
        while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:", opts, NULL)) 
!= -1) {
                switch (argch) {
                case 'V':
-                       /* FIXME */
+                       print_version();
+                       exit(0);
                        break;
                case 'L':
                        talloc_enable_leak_report_full();




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:34:29 +0200 (Fri, 17 Aug 2007)
New Revision: 2728

Modified:
   trunk/src/target/gsm/include/gsmd/vendorplugin.h
   trunk/src/target/gsm/src/gsmd/atcmd.c
   trunk/src/target/gsm/src/gsmd/vendor_qc.c
   trunk/src/target/gsm/src/gsmd/vendor_ti.c
   trunk/src/target/gsm/src/gsmd/vendor_tihtc.c
Log:
Use vendor specific ext_chars.


Modified: trunk/src/target/gsm/include/gsmd/vendorplugin.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/vendorplugin.h    2007-08-17 08:33:56 UTC 
(rev 2727)
+++ trunk/src/target/gsm/include/gsmd/vendorplugin.h    2007-08-17 08:34:29 UTC 
(rev 2728)
@@ -12,6 +12,7 @@
 struct gsmd_vendor_plugin {
        struct llist_head list;
        unsigned char *name;
+       unsigned char *ext_chars;
        unsigned int num_unsolicit;
        const struct gsmd_unsolicit *unsolicit;
        int (*detect)(struct gsmd *g);

Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c       2007-08-17 08:33:56 UTC (rev 
2727)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c       2007-08-17 08:34:29 UTC (rev 
2728)
@@ -237,7 +237,7 @@
         *    TBD
         */
 
-       if (buf[0] == '+' || buf[0] == '%') {
+       if (buf[0] == '+' || strchr(g->vendorpl->ext_chars, buf[0])) {
                /* an extended response */
                const char *colon = strchr(buf, ':');
                if (!colon) {
@@ -293,7 +293,7 @@
                }
 
                if (cmd) {
-                       if (cmd->buf[2] != '+' && cmd->buf[2] != '%') {
+                       if (cmd->buf[2] != '+' && 
strchr(g->vendorpl->ext_chars, cmd->buf[2]) == NULL) {
                                gsmd_log(GSMD_ERROR, "extd reply to non-extd 
command?\n");
                                return -EINVAL;
                        }

Modified: trunk/src/target/gsm/src/gsmd/vendor_qc.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/vendor_qc.c   2007-08-17 08:33:56 UTC (rev 
2727)
+++ trunk/src/target/gsm/src/gsmd/vendor_qc.c   2007-08-17 08:34:29 UTC (rev 
2728)
@@ -100,6 +100,7 @@
 
 struct gsmd_vendor_plugin gsmd_vendor_plugin = {
        .name = "Qualcomm msm6250",
+       .ext_chars = "@",
        .num_unsolicit = ARRAY_SIZE(qc_unsolicit),
        .unsolicit = qc_unsolicit,
        .detect = &qc_detect,

Modified: trunk/src/target/gsm/src/gsmd/vendor_ti.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/vendor_ti.c   2007-08-17 08:33:56 UTC (rev 
2727)
+++ trunk/src/target/gsm/src/gsmd/vendor_ti.c   2007-08-17 08:34:29 UTC (rev 
2728)
@@ -303,6 +303,7 @@
 
 struct gsmd_vendor_plugin gsmd_vendor_plugin = {
        .name = "TI Calypso",
+       .ext_chars = "%@",
        .num_unsolicit = ARRAY_SIZE(ticalypso_unsolicit),
        .unsolicit = ticalypso_unsolicit,
        .detect = &ticalypso_detect,

Modified: trunk/src/target/gsm/src/gsmd/vendor_tihtc.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/vendor_tihtc.c        2007-08-17 08:33:56 UTC 
(rev 2727)
+++ trunk/src/target/gsm/src/gsmd/vendor_tihtc.c        2007-08-17 08:34:29 UTC 
(rev 2728)
@@ -298,6 +298,7 @@
 
 struct gsmd_vendor_plugin gsmd_vendor_plugin = {
        .name = "TI Calypso / HTC firmware",
+       .ext_chars = "%",
        .num_unsolicit = ARRAY_SIZE(tihtc_unsolicit),
        .unsolicit = tihtc_unsolicit,
        .detect = &tihtc_detect,




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:34:52 +0200 (Fri, 17 Aug 2007)
New Revision: 2729

Modified:
   trunk/src/target/gsm/src/gsmd/gsmd.c
Log:
Wait for the AT Interpreter Ready message.


Modified: trunk/src/target/gsm/src/gsmd/gsmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/gsmd.c        2007-08-17 08:34:29 UTC (rev 
2728)
+++ trunk/src/target/gsm/src/gsmd/gsmd.c        2007-08-17 08:34:52 UTC (rev 
2729)
@@ -317,6 +317,7 @@
        { "leak-report", 0, NULL, 'L' },
        { "vendor", 1, NULL, 'v' },
        { "machine", 1, NULL, 'm' },
+       { "wait", 1, NULL, 'w' },
        { 0, 0, 0, 0 }
 };
 
@@ -344,6 +345,7 @@
               "\t-l file\t--logfile file\tSpecify a logfile to log to\n"
               "\t-v\t--vendor v\tSpecify GSM modem vendor plugin\n"
               "\t-m\t--machine m\tSpecify GSM modem machine plugin\n"
+              "\t-w\t--wait m\tWait for the AT Interpreter Ready message\n"
               );
 }
 
@@ -373,6 +375,7 @@
        char *logfile = "syslog";
        char *vendor_name = NULL;
        char *machine_name = NULL;
+       int wait = -1;
 
        signal(SIGTERM, sig_handler);
        signal(SIGINT, sig_handler);
@@ -385,7 +388,7 @@
        print_header();
 
        /*FIXME: parse commandline, set daemonize, device, ... */
-       while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:", opts, NULL)) 
!= -1) {
+       while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:w:", opts, 
NULL)) != -1) {
                switch (argch) {
                case 'V':
                        print_version();
@@ -423,6 +426,9 @@
                case 'm':
                        machine_name = optarg;
                        break;
+               case 'w':
+                       wait = atoi(optarg);
+                       break;
                }
        }
 
@@ -467,6 +473,9 @@
                exit(1);
        }
 
+       if (wait >= 0)
+               g.interpreter_ready = !wait;
+
        if (atcmd_init(&g, fd) < 0) {
                fprintf(stderr, "can't initialize UART device\n");
                exit(1);




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:35:10 +0200 (Fri, 17 Aug 2007)
New Revision: 2730

Modified:
   trunk/src/target/gsm/src/gsmd/vendor_tihtc.c
Log:
HTC TI modem sequence fixlet.


Modified: trunk/src/target/gsm/src/gsmd/vendor_tihtc.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/vendor_tihtc.c        2007-08-17 08:34:52 UTC 
(rev 2729)
+++ trunk/src/target/gsm/src/gsmd/vendor_tihtc.c        2007-08-17 08:35:10 UTC 
(rev 2730)
@@ -90,6 +90,8 @@
        struct gsmd_evt_auxdata *aux;
        struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, 
GSMD_EVT_SIGNAL,
                                             sizeof(*aux));
+       static int rssi_table[] = { 0,5,10,15,20,25,99 };
+       unsigned int i;
 
        DEBUGP("entering htccsq_parse param=`%s'\n", param);
        if (!ucmd)
@@ -98,9 +100,10 @@
 
        aux = (struct gsmd_evt_auxdata *) ucmd->buf;
 
-       /* FIXME: contains values 1-5, should be mapped to 0-31 somehow? */
-       /* 2 --> 11 */
-       aux->u.signal.sigq.rssi = atoi(buf);
+       i = atoi(buf);
+       if (i > 6)
+               i = 6;
+       aux->u.signal.sigq.rssi = rssi_table[atoi(buf)];
        aux->u.signal.sigq.ber = 99;
 
        DEBUGP("sending EVT_SIGNAL\n");




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:35:29 +0200 (Fri, 17 Aug 2007)
New Revision: 2731

Modified:
   trunk/src/target/gsm/src/gsmd/vendor_qc.c
Log:
Ignore [WCDMA] messages in HTC Universal.


Modified: trunk/src/target/gsm/src/gsmd/vendor_qc.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/vendor_qc.c   2007-08-17 08:35:10 UTC (rev 
2730)
+++ trunk/src/target/gsm/src/gsmd/vendor_qc.c   2007-08-17 08:35:29 UTC (rev 
2731)
@@ -69,8 +69,15 @@
        return -EIO;
 }
 
+static int wcdma_parse(char *buf, int len, const char *param,
+                    struct gsmd *gsmd)
+{
+       return 0;
+}
+
 static const struct gsmd_unsolicit qc_unsolicit[] = {
        { "@HTCCSQ",    &htccsq_parse },        /* Signal Quality */
+       { "[WCDMA]",    &wcdma_parse },         /* ignore [WCDMA] messages */
 
        /* FIXME: parse the below and generate the respective events */
 
@@ -100,7 +107,7 @@
 
 struct gsmd_vendor_plugin gsmd_vendor_plugin = {
        .name = "Qualcomm msm6250",
-       .ext_chars = "@",
+       .ext_chars = "@[",
        .num_unsolicit = ARRAY_SIZE(qc_unsolicit),
        .unsolicit = qc_unsolicit,
        .detect = &qc_detect,




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:36:11 +0200 (Fri, 17 Aug 2007)
New Revision: 2732

Modified:
   trunk/src/target/gsm/include/gsmd/gsmd.h
   trunk/src/target/gsm/src/gsmd/atcmd.c
Log:
mlbuf in gsmd struct (Andrzej Zaborowski)


Modified: trunk/src/target/gsm/include/gsmd/gsmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/gsmd.h    2007-08-17 08:35:29 UTC (rev 
2731)
+++ trunk/src/target/gsm/include/gsmd/gsmd.h    2007-08-17 08:36:11 UTC (rev 
2732)
@@ -79,6 +79,9 @@
        struct gsmd_device_state dev_state;
 
        struct llist_head operators;            /* cached list of operator 
names */
+       unsigned char *mlbuf;           /* ml_parse buffer */
+       unsigned int mlbuf_len;
+       int mlunsolicited;
 };
 
 struct gsmd_user {

Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c       2007-08-17 08:35:29 UTC (rev 
2731)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c       2007-08-17 08:36:11 UTC (rev 
2732)
@@ -194,10 +194,7 @@
 {
        struct gsmd *g = ctx;
        struct gsmd_atcmd *cmd = NULL;
-       static char mlbuf[MLPARSE_BUF_SIZE];
        int rc = 0;
-       static int mlbuf_len;
-       static int mlunsolicited = 0;
        int cme_error = 0;
 
        DEBUGP("buf=`%s'(%d)\n", buf, len);
@@ -278,9 +275,9 @@
                                 * input.  Wait for the next line, concatenate
                                 * and resumbit to unsolicited_parse().  */
                                DEBUGP("Multiline unsolicited code\n");
-                               mlbuf_len = len;
-                               memcpy(mlbuf, buf, len);
-                               mlunsolicited = 1;
+                               g->mlbuf_len = len;
+                               memcpy(g->mlbuf, buf, len);
+                               g->mlunsolicited = 1;
                                return 0;
                        }
                        /* if unsolicited parser didn't handle this 'reply', 
then we 
@@ -303,16 +300,16 @@
 
                        /* it might be a multiline response, so if there's a 
previous
                           response, send out mlbuf and start afresh with an 
empty buffer */
-                       if (mlbuf_len) {
+                       if (g->mlbuf_len) {
                                if (!cmd->cb) {
                                        gsmd_log(GSMD_NOTICE, "command without 
cb!!!\n");
                                } else {
                                        DEBUGP("Calling cmd->cb()\n");
-                                       cmd->resp = mlbuf;
+                                       cmd->resp = g->mlbuf;
                                        rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
                                        DEBUGP("Clearing mlbuf\n");
                                }
-                               mlbuf_len = 0;
+                               g->mlbuf_len = 0;
                        }
 
                        /* the current buf will be appended to mlbuf below */
@@ -360,17 +357,17 @@
        /* we reach here, if we are at an information response that needs to be
         * passed on */
 
-       if (mlbuf_len)
-               mlbuf[mlbuf_len ++] = '\n';
+       if (g->mlbuf_len)
+               g->mlbuf[g->mlbuf_len ++] = '\n';
        DEBUGP("Appending buf to mlbuf\n");
-       if (len > sizeof(mlbuf) - mlbuf_len)
-               len = sizeof(mlbuf) - mlbuf_len;
-       memcpy(mlbuf + mlbuf_len, buf, len);
-       mlbuf_len += len;
+       if (len > sizeof(g->mlbuf) - g->mlbuf_len)
+               len = sizeof(g->mlbuf) - g->mlbuf_len;
+       memcpy(g->mlbuf + g->mlbuf_len, buf, len);
+       g->mlbuf_len += len;
 
-       if (mlunsolicited) {
-               rc = unsolicited_parse(g, mlbuf, mlbuf_len,
-                               strchr(mlbuf, ':') + 1);
+       if (g->mlunsolicited) {
+               rc = unsolicited_parse(g, g->mlbuf, g->mlbuf_len,
+                               strchr(g->mlbuf, ':') + 1);
                if (rc == -EAGAIN) {
                        /* The parser wants one more line of
                         * input.  Wait for the next line, concatenate
@@ -378,8 +375,8 @@
                        DEBUGP("Multiline unsolicited code\n");
                        return 0;
                }
-               mlunsolicited = 0;
-               mlbuf_len = 0;
+               g->mlunsolicited = 0;
+               g->mlbuf_len = 0;
                return rc;
        }
        return 0;
@@ -397,15 +394,16 @@
                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 (mlbuf_len) {
-                       cmd->resp = mlbuf;
-                       mlbuf[mlbuf_len] = 0;
+               /* 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");
-               mlbuf_len = 0;
+               g->mlbuf_len = 0;
        }
 
        /* remove from list of currently executing cmds */
@@ -571,6 +569,9 @@
 
        llparse_init (&g->llp);
 
+       g->mlbuf_len = 0;
+       g->mlunsolicited = 0;
+
        g->llp.cur = g->llp.buf;
        g->llp.len = sizeof(g->llp.buf);
        g->llp.cb = &ml_parse;




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-08-17 10:36:48 +0200 (Fri, 17 Aug 2007)
New Revision: 2733

Modified:
   trunk/src/target/gsm/include/gsmd/usock.h
   trunk/src/target/gsm/include/libgsmd/misc.h
   trunk/src/target/gsm/src/gsmd/usock.c
   trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
   trunk/src/target/gsm/src/util/event.c
   trunk/src/target/gsm/src/util/shell.c
Log:
Add retrieving phone's own subscriber number. (Andrzej Zaborowski)


Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h   2007-08-17 08:36:11 UTC (rev 
2732)
+++ trunk/src/target/gsm/include/gsmd/usock.h   2007-08-17 08:36:48 UTC (rev 
2733)
@@ -478,6 +478,24 @@
        char storage[3];
 } __attribute__ ((packed));
 
+/* Subscriber number information from 3GPP TS 07.07, Clause 7.1 */
+enum gsmd_subscriber_service {
+       GSMD_SERVICE_UNKNOWN            = -1,
+       GSMD_SERVICE_ASYNC_MODEM        = 0,
+       GSMD_SERVICE_SYNC_MODEM,
+       GSMD_SERVICE_PAD_ACCESS,
+       GSMD_SERVICE_PACKET_ACCESS,
+       GSMD_SERVICE_VOICE,
+       GSMD_SERVICE_FAX,
+};
+
+struct gsmd_own_number {
+       int is_last;
+       enum gsmd_subscriber_service service;
+       struct gsmd_addr addr;
+       char name[0];
+};
+
 struct gsmd_msg_hdr {
        u_int8_t version;
        u_int8_t msg_type;

Modified: trunk/src/target/gsm/include/libgsmd/misc.h
===================================================================
--- trunk/src/target/gsm/include/libgsmd/misc.h 2007-08-17 08:36:11 UTC (rev 
2732)
+++ trunk/src/target/gsm/include/libgsmd/misc.h 2007-08-17 08:36:48 UTC (rev 
2733)
@@ -68,6 +68,9 @@
 extern int lgsm_prefoper_add(struct lgsm_handle *lh, gsmd_oper_numeric oper);
 extern int lgsm_prefoper_get_space(struct lgsm_handle *lh);
 
+/* Get subscriber's own phone number */
+extern int lgsm_get_subscriber_num(struct lgsm_handle *lh);
+
 /* CLIP, CLIR, COLP, Call Forwarding, Call Waiting, Call Deflecting */
 /* TBD */
 

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c       2007-08-17 08:36:11 UTC (rev 
2732)
+++ trunk/src/target/gsm/src/gsmd/usock.c       2007-08-17 08:36:48 UTC (rev 
2733)
@@ -548,6 +548,51 @@
        return 0;
 }
 
+static int network_ownnumbers_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+       struct gsmd_user *gu = (struct gsmd_user *) ctx;
+       struct gsmd_ucmd *ucmd;
+       struct gsmd_own_number *num;
+       int len, ret, type;
+       char dummy;
+
+       if (cmd->ret && cmd->ret != -255)
+               return 0;
+
+       if (sscanf(resp, "+CNUM: \"%*[^\"]\"%c%n", &dummy, &len) > 0)
+               len -= strlen("+CNUM: \"\",");
+       else
+               len = 0;
+
+       ucmd = gsmd_ucmd_fill(sizeof(*num) + len + 1,
+                       GSMD_MSG_NETWORK, GSMD_NETWORK_GET_NUMBER, cmd->id);
+       if (!ucmd)
+               return -ENOMEM;
+
+       num = (struct gsmd_own_number *) ucmd->buf;
+       if (len)
+               ret = sscanf(resp, "+CNUM: \"%[^\"]\",\"%32[^\"]\",%i,%*i,%i,",
+                               num->name, num->addr.number,
+                               &type, &num->service) - 1;
+       else
+               ret = sscanf(resp, "+CNUM: ,\"%32[^\"]\",%i,%*i,%i,",
+                               num->addr.number,
+                               &type, &num->service);
+       if (ret < 2) {
+               talloc_free(ucmd);
+               return -EINVAL;
+       }
+       if (ret < 3)
+               num->service = GSMD_SERVICE_UNKNOWN;
+       num->name[len] = 0;
+       num->addr.type = type;
+       num->is_last = (cmd->ret == 0);
+
+       usock_cmd_enqueue(ucmd, gu);
+
+       return 0;
+}
+
 static int usock_rcv_network(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, 
                             int len)
 {
@@ -607,6 +652,10 @@
                cmd = atcmd_fill("AT+CPOL=?", 9 + 1,
                                &network_pref_num_cb, gu, 0);
                break;
+       case GSMD_NETWORK_GET_NUMBER:
+               cmd = atcmd_fill("AT+CNUM", 7 + 1,
+                               &network_ownnumbers_cb, gu, 0);
+               break;
        default:
                return -EINVAL;
        }

Modified: trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
===================================================================
--- trunk/src/target/gsm/src/libgsmd/libgsmd_network.c  2007-08-17 08:36:11 UTC 
(rev 2732)
+++ trunk/src/target/gsm/src/libgsmd/libgsmd_network.c  2007-08-17 08:36:48 UTC 
(rev 2733)
@@ -128,3 +128,8 @@
 {
        return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_PREF_SPACE);
 }
+
+int lgsm_get_subscriber_num(struct lgsm_handle *lh)
+{
+       return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_GET_NUMBER);
+}

Modified: trunk/src/target/gsm/src/util/event.c
===================================================================
--- trunk/src/target/gsm/src/util/event.c       2007-08-17 08:36:11 UTC (rev 
2732)
+++ trunk/src/target/gsm/src/util/event.c       2007-08-17 08:36:48 UTC (rev 
2733)
@@ -26,6 +26,7 @@
 #include <common/linux_list.h>
 #include <libgsmd/libgsmd.h>
 #include <libgsmd/event.h>
+#include <libgsmd/sms.h>
 
 static int incall_handler(struct lgsm_handle *lh, int evt, struct 
gsmd_evt_auxdata *aux)
 {

Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c       2007-08-17 08:36:11 UTC (rev 
2732)
+++ trunk/src/target/gsm/src/util/shell.c       2007-08-17 08:36:48 UTC (rev 
2733)
@@ -298,12 +298,22 @@
        const char *oper = (char *) gmh + sizeof(*gmh);
        const struct gsmd_msg_oper *opers = (struct gsmd_msg_oper *)
                ((void *) gmh + sizeof(*gmh));
+       const struct gsmd_own_number *num = (struct gsmd_own_number *)
+               ((void *) gmh + sizeof(*gmh));
        static const char *oper_stat[] = {
                [GSMD_OPER_UNKNOWN] = "of unknown status",
                [GSMD_OPER_AVAILABLE] = "available",
                [GSMD_OPER_CURRENT] = "our current operator",
                [GSMD_OPER_FORBIDDEN] = "forbidden",
        };
+       static const char *srvname[] = {
+               [GSMD_SERVICE_ASYNC_MODEM] = "asynchronous modem",
+               [GSMD_SERVICE_SYNC_MODEM] = "synchronous modem",
+               [GSMD_SERVICE_PAD_ACCESS] = "PAD Access (asynchronous)",
+               [GSMD_SERVICE_PACKET_ACCESS] = "Packet Access (synchronous)",
+               [GSMD_SERVICE_VOICE] = "voice",
+               [GSMD_SERVICE_FAX] = "fax",
+       };
 
        switch (gmh->msg_subtype) {
        case GSMD_NETWORK_SIGQ_GET:
@@ -333,6 +343,15 @@
                                        opers->opname_shortalpha,
                                        oper_stat[opers->stat]);
                break;
+       case GSMD_NETWORK_GET_NUMBER:
+               printf("\t%s\t%10s%s%s%s\n", num->addr.number, num->name,
+                               (num->service == GSMD_SERVICE_UNKNOWN) ?
+                               "" : " related to ",
+                               (num->service == GSMD_SERVICE_UNKNOWN) ?
+                               "" : srvname[num->service],
+                               (num->service == GSMD_SERVICE_UNKNOWN) ?
+                               "" : " services");
+               break;
        default:
                return -EINVAL;
        }
@@ -352,6 +371,7 @@
                "\tL\tDetect available operators\n"
                "\tQ\tRead signal quality\n"
                "\tT\tSend DTMF Tone\n"
+               "\tn\tPrint subscriber numbers\n"
                "\tpd\tPB Delete (pb=index)\n"
                "\tpr\tPB Read (pr=index)\n"
                "\tprr\tPB Read Range (prr=index1,index2)\n"
@@ -630,6 +650,8 @@
                                        printf("No.\n");
                                else
                                        lgsm_sms_set_smsc(lgsmh, ptr + 1);
+                       } else if (!strcmp(buf, "n")) {
+                               lgsm_get_subscriber_num(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