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. r3444 - trunk/src/host/qemu-neo1973/hw ([EMAIL PROTECTED])
   2. r3445 - trunk/src/host/qemu-neo1973 ([EMAIL PROTECTED])
   3. r3446 - trunk/src/host/qemu-neo1973/openmoko
      ([EMAIL PROTECTED])
   4. r3447 - in trunk/src/target/gsm: include/gsmd src/gsmd
      ([EMAIL PROTECTED])
   5. r3448 - trunk/src/target/gsm/src/util ([EMAIL PROTECTED])
   6. r3449 - in trunk/src/target/gsm: include/gsmd include/libgsmd
      src/gsmd src/libgsmd src/util ([EMAIL PROTECTED])
--- Begin Message ---
Author: andrew
Date: 2007-11-19 20:05:05 +0100 (Mon, 19 Nov 2007)
New Revision: 3444

Modified:
   trunk/src/host/qemu-neo1973/hw/neo1973.c
   trunk/src/host/qemu-neo1973/hw/s3c.h
   trunk/src/host/qemu-neo1973/hw/s3c2410.c
   trunk/src/host/qemu-neo1973/hw/s3c24xx_mmci.c
Log:
Remove s3c24xx_mmci dependency on sysemu.h.
Convert s3c24xx_mmci callbacks to qemu_irq api.


Modified: trunk/src/host/qemu-neo1973/hw/neo1973.c
===================================================================
--- trunk/src/host/qemu-neo1973/hw/neo1973.c    2007-11-19 18:54:17 UTC (rev 
3443)
+++ trunk/src/host/qemu-neo1973/hw/neo1973.c    2007-11-19 19:05:05 UTC (rev 
3444)
@@ -183,15 +183,6 @@
 }
 
 /* Handlers for input ports */
-static void neo_mmc_cover_switch(void *irq, int in)
-{
-    qemu_set_irq((qemu_irq) irq, !in);
-}
-
-static void neo_mmc_writeprotect_switch(void *irq, int wp)
-{
-}
-
 static void neo_nand_wp_switch(void *opaque, int line, int level)
 {
     struct neo_board_s *s = (struct neo_board_s *) opaque;
@@ -262,10 +253,9 @@
     s3c_timers_cmp_handler_set(s->cpu->timers, 0, neo_bl_intensity, s);
 
     /* MMC/SD host */
-    s3c_mmci_handlers(s->cpu->mmci,
-                    s3c_gpio_in_get(s->cpu->io)[GTA01_IRQ_nSD_DETECT],
-                    neo_mmc_writeprotect_switch,
-                    neo_mmc_cover_switch);
+    s3c_mmci_handlers(s->cpu->mmci, 0,
+                    qemu_irq_invert(s3c_gpio_in_get(
+                                    s->cpu->io)[GTA01_IRQ_nSD_DETECT]));
 }
 
 /* PMB 2520 Hammerhead A-GPS chip */

Modified: trunk/src/host/qemu-neo1973/hw/s3c.h
===================================================================
--- trunk/src/host/qemu-neo1973/hw/s3c.h        2007-11-19 18:54:17 UTC (rev 
3443)
+++ trunk/src/host/qemu-neo1973/hw/s3c.h        2007-11-19 19:05:05 UTC (rev 
3444)
@@ -157,10 +157,9 @@
 /* s3c24xx_mmci.c */
 struct s3c_mmci_state_s;
 struct s3c_mmci_state_s *s3c_mmci_init(target_phys_addr_t base,
-                qemu_irq irq, qemu_irq *dma);
-void s3c_mmci_handlers(struct s3c_mmci_state_s *s, void *opaque,
-                void (*readonly_cb)(void *, int),
-                void (*coverswitch_cb)(void *, int));
+                BlockDriverState *bd, qemu_irq irq, qemu_irq *dma);
+void s3c_mmci_handlers(struct s3c_mmci_state_s *s, qemu_irq readonly_cb,
+                qemu_irq coverswitch_cb);
 void s3c_mmci_reset(struct s3c_mmci_state_s *s);
 
 /* s3c24xx_rtc.c */

Modified: trunk/src/host/qemu-neo1973/hw/s3c2410.c
===================================================================
--- trunk/src/host/qemu-neo1973/hw/s3c2410.c    2007-11-19 18:54:17 UTC (rev 
3443)
+++ trunk/src/host/qemu-neo1973/hw/s3c2410.c    2007-11-19 19:05:05 UTC (rev 
3444)
@@ -2908,7 +2908,7 @@
                     s->irq[S3C_PIC_SPI0], s->drq[S3C_RQ_SPI0],
                     s->irq[S3C_PIC_SPI1], s->drq[S3C_RQ_SPI1], s->io);
 
-    s->mmci = s3c_mmci_init(0x5a000000, s->irq[S3C_PIC_SDI], s->drq);
+    s->mmci = s3c_mmci_init(0x5a000000, sd_bdrv, s->irq[S3C_PIC_SDI], s->drq);
 
     if (usb_enabled) {
         usb_ohci_init_memio(0x49000000, 3, -1, s->irq[S3C_PIC_USBH]);

Modified: trunk/src/host/qemu-neo1973/hw/s3c24xx_mmci.c
===================================================================
--- trunk/src/host/qemu-neo1973/hw/s3c24xx_mmci.c       2007-11-19 18:54:17 UTC 
(rev 3443)
+++ trunk/src/host/qemu-neo1973/hw/s3c24xx_mmci.c       2007-11-19 19:05:05 UTC 
(rev 3444)
@@ -10,7 +10,6 @@
 #include "s3c.h"
 #include "sd.h"
 #include "hw.h"
-#include "sysemu.h"
 
 struct s3c_mmci_state_s {
     target_phys_addr_t base;
@@ -415,7 +414,7 @@
 }
 
 struct s3c_mmci_state_s *s3c_mmci_init(target_phys_addr_t base,
-                qemu_irq irq, qemu_irq *dma)
+                BlockDriverState *bd, qemu_irq irq, qemu_irq *dma)
 {
     int iomemtype;
     struct s3c_mmci_state_s *s = (struct s3c_mmci_state_s *)
@@ -434,14 +433,13 @@
     register_savevm("s3c24xx_mmci", 0, 0, s3c_mmci_save, s3c_mmci_load, s);
 
     /* Instantiate the actual storage */
-    s->card = sd_init(sd_bdrv);
+    s->card = sd_init(bd);
 
     return s;
 }
 
-void s3c_mmci_handlers(struct s3c_mmci_state_s *s, void *opaque,
-                void (*readonly_cb)(void *, int),
-                void (*coverswitch_cb)(void *, int))
+void s3c_mmci_handlers(struct s3c_mmci_state_s *s, qemu_irq readonly_cb,
+                qemu_irq coverswitch_cb)
 {
-    /*sd_set_cb(s->card, opaque, readonly_cb, coverswitch_cb);*/
+    sd_set_cb(s->card, readonly_cb, coverswitch_cb);
 }




--- End Message ---
--- Begin Message ---
Author: andrew
Date: 2007-11-19 22:05:49 +0100 (Mon, 19 Nov 2007)
New Revision: 3445

Modified:
   trunk/src/host/qemu-neo1973/usb-linux-gadget.c
Log:
Add a missing include for the no-gadgetfs case (ombug #1015).


Modified: trunk/src/host/qemu-neo1973/usb-linux-gadget.c
===================================================================
--- trunk/src/host/qemu-neo1973/usb-linux-gadget.c      2007-11-19 19:05:05 UTC 
(rev 3444)
+++ trunk/src/host/qemu-neo1973/usb-linux-gadget.c      2007-11-19 21:05:49 UTC 
(rev 3445)
@@ -814,6 +814,7 @@
 }
 
 #else
+# include "qemu-common.h"
 # include "hw/usb.h"
 
 int usb_gadget_init(void)




--- End Message ---
--- Begin Message ---
Author: andrew
Date: 2007-11-19 23:09:06 +0100 (Mon, 19 Nov 2007)
New Revision: 3446

Modified:
   trunk/src/host/qemu-neo1973/openmoko/flash.sh
Log:
Add a smart sh snippet that makes sure everything gets killed that should be 
killed.


Modified: trunk/src/host/qemu-neo1973/openmoko/flash.sh
===================================================================
--- trunk/src/host/qemu-neo1973/openmoko/flash.sh       2007-11-19 21:05:49 UTC 
(rev 3445)
+++ trunk/src/host/qemu-neo1973/openmoko/flash.sh       2007-11-19 22:09:06 UTC 
(rev 3446)
@@ -59,6 +59,9 @@
 echo Using \'$rootfs_image\' as the root filesystem image.
 echo Using \'$uboot_image\' as bootloader.
 
+# Make sure ^C wipes everything we might have spawned along the way.
+trap 'kill -- -$$' INT EXIT
+
 # Currently we just make the u-boot image accessible under u-boot.bin
 # and qemu will load it from the working directory.  This is a
 # temporary solution.




--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-11-20 05:17:35 +0100 (Tue, 20 Nov 2007)
New Revision: 3447

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] Adding atcmd_terminate_matching (remove from the queues any command 
whose .ctx matches given)(Andrzej Zaborowski)


Modified: trunk/src/target/gsm/include/gsmd/atcmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/atcmd.h   2007-11-19 22:09:06 UTC (rev 
3446)
+++ trunk/src/target/gsm/include/gsmd/atcmd.h   2007-11-20 04:17:35 UTC (rev 
3447)
@@ -13,8 +13,9 @@
 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);
+extern int atcmd_terminate_matching(struct gsmd *g, void *ctx);
 extern void atcmd_wake_pending_queue (struct gsmd *g);
-extern void atcmd_wait_pending_queue (struct gsmd *g); 
+extern void atcmd_wait_pending_queue (struct gsmd *g);
 
 #endif /* __GSMD__ */
 

Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c       2007-11-19 22:09:06 UTC (rev 
3446)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c       2007-11-20 04:17:35 UTC (rev 
3447)
@@ -719,3 +719,30 @@
 
        return gsmd_register_fd(&g->gfd_uart);
 }
+
+/* remove from the queues any command whose .ctx matches given */
+int atcmd_terminate_matching(struct gsmd *g, void *ctx)
+{
+       int num = 0;
+       struct gsmd_atcmd *cmd, *pos;
+
+       llist_for_each_entry_safe(cmd, pos, &g->busy_atcmds, list)
+               if (cmd->ctx == ctx) {
+                       cmd->ret = -ESHUTDOWN;
+                       cmd->cb(cmd, cmd->ctx, "ERROR");
+                       cmd->cb = NULL;
+                       cmd->ctx = NULL;
+                       num ++;
+               }
+
+       llist_for_each_entry_safe(cmd, pos, &g->pending_atcmds, list)
+               if (cmd->ctx == ctx) {
+                       llist_del(&cmd->list);
+                       cmd->ret = -ESHUTDOWN;
+                       cmd->cb(cmd, cmd->ctx, "ERROR");
+                       talloc_free(cmd);
+                       num ++;
+               }
+
+       return num;
+}

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c       2007-11-19 22:09:06 UTC (rev 
3446)
+++ trunk/src/target/gsm/src/gsmd/usock.c       2007-11-20 04:17:35 UTC (rev 
3447)
@@ -1205,9 +1205,11 @@
                        /* EOF, this client has just vanished */
                        gsmd_unregister_fd(&gu->gfd);
                        close(fd);
+                       /* finish pending atcmd's from this client thus
+                        * destroying references to the user structure.  */
+                       atcmd_terminate_matching(gu->gsmd, gu);
                        /* destroy whole user structure */
                        llist_del(&gu->list);
-                       /* FIXME: delete busy ucmds from finished_ucmds */
                        talloc_free(gu);
                        return 0;
                } else if (rcvlen < 0)




--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-11-20 05:19:04 +0100 (Tue, 20 Nov 2007)
New Revision: 3448

Modified:
   trunk/src/target/gsm/src/util/libgsmd-tool.c
   trunk/src/target/gsm/src/util/shell.c
   trunk/src/target/gsm/src/util/shell.h
Log:
[gsmd] Adding waiting mode for libgsmd-tool shell. (Andrzej Zaborowski)


Modified: trunk/src/target/gsm/src/util/libgsmd-tool.c
===================================================================
--- trunk/src/target/gsm/src/util/libgsmd-tool.c        2007-11-20 04:17:35 UTC 
(rev 3447)
+++ trunk/src/target/gsm/src/util/libgsmd-tool.c        2007-11-20 04:19:04 UTC 
(rev 3448)
@@ -74,6 +74,7 @@
        { "verbose", 0, 0, 'v' },
        { "mode", 1, 0, 'm' },
        { "pin", 1, 0, 'p' },
+       { "wait", 0, 0, 'w' },
        { 0, 0, 0, 0 }
 };
 
@@ -84,20 +85,21 @@
                "\t-V\t--version\tPrint version number\n"
                "\t-v\t--verbose\tBe more verbose\n"
                "\t-m\t--mode\tSet mode {shell,eventlog,atcmd}\n"
+               "\t-w\t--wait\tIn shell mode wait for responses on exit\n"
                );
 }
 
 int main(int argc, char **argv)
 {
        char *pin = NULL;
-       int rc, i, mode;
+       int rc, i, mode, shellwait = 0;
 
        printf("libgsm-tool - (C) 2006 by Harald Welte\n"
                "This program is Free Software and has ABSOLUTELY NO 
WARRANTY\n\n");
 
        while (1) {
                int c, option_index = 0;
-               c = getopt_long(argc, argv, "vVhm:p:", opts, &option_index);
+               c = getopt_long(argc, argv, "vVhwm:p:", opts, &option_index);
                if (c == -1)
                        break;
 
@@ -122,6 +124,9 @@
                case 'p':
                        pin = optarg;
                        break;
+               case 'w':
+                       shellwait = 1;
+                       break;
                }
        }
 
@@ -139,7 +144,7 @@
                atcmd_main(lgsmh);
                break;
        case MODE_SHELL:
-               shell_main(lgsmh);
+               shell_main(lgsmh, shellwait);
                break;
        }
 

Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c       2007-11-20 04:17:35 UTC (rev 
3447)
+++ trunk/src/target/gsm/src/util/shell.c       2007-11-20 04:19:04 UTC (rev 
3448)
@@ -44,6 +44,8 @@
 static int nFIND = 0;
 static int nREADRG = 0;
 
+static int pending_responses = 0;
+
 /* this is the handler for receiving passthrough responses */
 static int pt_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
 {
@@ -88,6 +90,7 @@
        case GSMD_PHONEBOOK_GET_SUPPORT:
                gps = (struct gsmd_phonebook_support *) ((char *)gmh + 
sizeof(*gmh));
                printf("(1-%d), %d, %d\n", gps->index, gps->nlength, 
gps->tlength);
+               pending_responses --;
                break;
 
        case GSMD_PHONEBOOK_LIST_STORAGE:
@@ -131,6 +134,7 @@
        case GSMD_PHONEBOOK_GET_IMSI:
                payload = (char *)gmh + sizeof(*gmh);
                printf("imsi <%s>\n", payload);
+               pending_responses --;
                break;
        default:
                return -EINVAL;
@@ -186,8 +190,11 @@
                        printf("8-bit encoded data\n");
                else if (sms->payload.coding_scheme == ALPHABET_UCS2)
                        printf("Unicode-16 encoded text\n");
+               if (sms->is_last)
+                       pending_responses --;
                break;
        case GSMD_SMS_SEND:
+               pending_responses --;
                result = (int *) ((void *) gmh + sizeof(*gmh));
                if (*result >= 0) {
                        printf("Send: message sent as ref %i\n", *result);
@@ -204,6 +211,7 @@
                }
                break;
        case GSMD_SMS_WRITE:
+               pending_responses --;
                result = (int *) ((void *) gmh + sizeof(*gmh));
                if (*result >= 0) {
                        printf("Store: message stored with index %i\n",
@@ -221,6 +229,7 @@
                }
                break;
        case GSMD_SMS_DELETE:
+               pending_responses --;
                result = (int *) ((void *) gmh + sizeof(*gmh));
                switch (*result) {
                case 0:
@@ -255,13 +264,16 @@
                                mem->mem[2].memtype,
                                mem->mem[2].used,
                                mem->mem[2].total);
+               pending_responses --;
                break;
        case GSMD_SMS_GET_SERVICE_CENTRE:
                addr = (struct gsmd_addr *) ((void *) gmh + sizeof(*gmh));
                printf("Number of the default Service Centre is %s\n",
                                addr->number);
+               pending_responses --;
                break;
        default:
+               pending_responses --;
                return -EINVAL;
        }
 }
@@ -301,12 +313,14 @@
                        printf("Error rate undetectable\n");
                else
                        printf("Bit error rate %i\n", sq->ber);
+               pending_responses --;
                break;
        case GSMD_NETWORK_OPER_GET:
                if (oper[0])
                        printf("Our current operator is %s\n", oper);
                else
                        printf("No current operator\n");
+               pending_responses --;
                break;
        case GSMD_NETWORK_OPER_LIST:
                for (; !opers->is_last; opers ++)
@@ -318,6 +332,7 @@
                                        sizeof(opers->opname_shortalpha),
                                        opers->opname_shortalpha,
                                        oper_stat[opers->stat]);
+               pending_responses --;
                break;
        case GSMD_NETWORK_GET_NUMBER:
                printf("\t%s\t%10s%s%s%s\n", num->addr.number, num->name,
@@ -327,6 +342,7 @@
                                "" : srvname[num->service],
                                (num->service == GSMD_SERVICE_UNKNOWN) ?
                                "" : " services");
+               pending_responses --;
                break;
        default:
                return -EINVAL;
@@ -373,7 +389,7 @@
                );
 }
 
-int shell_main(struct lgsm_handle *lgsmh)
+int shell_main(struct lgsm_handle *lgsmh, int sync)
 {
        int rc;
        char buf[STDIN_BUF_SIZE+1];
@@ -381,6 +397,7 @@
        int rlen = sizeof(rbuf);
        fd_set readset;
        char *ptr, *fcomma, *lcomma;
+       int gsm_fd = lgsm_fd(lgsmh);
 
        lgsm_register_handler(lgsmh, GSMD_MSG_PASSTHROUGH, &pt_msghandler);
        lgsm_register_handler(lgsmh, GSMD_MSG_PHONEBOOK, &pb_msghandler);
@@ -388,7 +405,7 @@
        lgsm_register_handler(lgsmh, GSMD_MSG_NETWORK, &net_msghandler);
 
        fcntl(0, F_SETFD, O_NONBLOCK);
-       fcntl(lgsm_fd(lgsmh), F_SETFD, O_NONBLOCK);
+       fcntl(gsm_fd, F_SETFD, O_NONBLOCK);
 
        FD_ZERO(&readset);
 
@@ -396,12 +413,11 @@
 
        while (1) {
                fd_set readset;
-               int gsm_fd = lgsm_fd(lgsmh);
                FD_SET(0, &readset);
                FD_SET(gsm_fd, &readset);
 
                rc = select(gsm_fd+1, &readset, NULL, NULL, NULL);
-               if (rc <= 0)    
+               if (rc <= 0)
                        break;
                if (FD_ISSET(gsm_fd, &readset)) {
                        /* we've received something on the gsmd socket, pass it
@@ -466,12 +482,15 @@
                        } else if (!strcmp(buf, "P")) {
                                printf("Read current opername\n");
                                lgsm_oper_get(lgsmh);
+                               pending_responses ++;
                        } else if (!strcmp(buf, "L")) {
                                printf("List operators\n");
                                lgsm_opers_get(lgsmh);
+                               pending_responses ++;
                        } else if (!strcmp(buf, "Q")) {
                                printf("Signal strength\n");
                                lgsm_signal_quality(lgsmh);
+                               pending_responses ++;
                        } else if (!strcmp(buf, "q")) {
                                exit(0);
                         } else if (buf[0] == 'S' ) {
@@ -545,6 +564,7 @@
                        } else if ( !strncmp(buf, "ps", 2)) {   
                                printf("Get Phonebook Support\n");
                                lgsm_pb_get_support(lgsmh);
+                               pending_responses ++;
                        } else if( !strncmp(buf, "pRr", 3) ) {
                                printf("Retrieve Readrg Records\n");
 
@@ -565,16 +585,19 @@
                                sms_del.delflg = atoi(ptr+1);   
                        
                                lgsm_sms_delete(lgsmh, &sms_del);
-                       } else if ( !strncmp(buf, "sl", 2)) {           
-                               printf("List SMS\n");   
-                               ptr = strchr(buf, '='); 
-                                       
-                               lgsm_sms_list(lgsmh, atoi(ptr+1));              
        
-                       } else if ( !strncmp(buf, "sr", 2)) {                   
        
-                               printf("Read SMS\n");   
-                               ptr = strchr(buf, '='); 
-                                       
-                               lgsm_sms_read(lgsmh, atoi(ptr+1));              
                
+                               pending_responses ++;
+                       } else if ( !strncmp(buf, "sl", 2)) {
+                               printf("List SMS\n");
+                               ptr = strchr(buf, '=');
+
+                               lgsm_sms_list(lgsmh, atoi(ptr+1));
+                               pending_responses ++;
+                       } else if ( !strncmp(buf, "sr", 2)) {
+                               printf("Read SMS\n");
+                               ptr = strchr(buf, '=');
+
+                               lgsm_sms_read(lgsmh, atoi(ptr+1));
+                               pending_responses ++;
                        } else if ( !strncmp(buf, "ss", 2)) {
                                struct lgsm_sms sms;
 
@@ -602,6 +625,7 @@
                                packing_7bit_character(lcomma+1, &sms);
 
                                lgsm_sms_send(lgsmh, &sms);
+                               pending_responses ++;
                        } else if ( !strncmp(buf, "sw", 2)) {   
                                printf("Write SMS\n");                          
                                struct lgsm_sms_write sms_write;
@@ -618,9 +642,11 @@
                                sms_write.sms.ask_ds = 0;
 
                                lgsm_sms_write(lgsmh, &sms_write);
+                               pending_responses ++;
                        } else if (!strncmp(buf, "sm", 2)) {
                                printf("Get SMS storage preferences\n");
                                lgsm_sms_get_storage(lgsmh);
+                               pending_responses ++;
                        } else if (!strncmp(buf, "sM", 2)) {
                                int mem[3];
 
@@ -634,6 +660,7 @@
                        } else if (!strncmp(buf, "sc", 2)) {
                                printf("Get the default SMSC\n");
                                lgsm_sms_get_smsc(lgsmh);
+                               pending_responses ++;
                        } else if (!strncmp(buf, "sC", 2)) {
                                printf("Set the default SMSC\n");
                                ptr = strchr(buf, '=');
@@ -643,9 +670,11 @@
                                        lgsm_sms_set_smsc(lgsmh, ptr + 1);
                        } else if (!strcmp(buf, "n")) {
                                lgsm_get_subscriber_num(lgsmh);
+                               pending_responses ++;
                        } else if (!strncmp(buf, "im", 2)) {
                                printf("Get imsi\n");
                                lgsm_get_imsi(lgsmh);
+                               pending_responses ++;
                        } else {
                                printf("Unknown command `%s'\n", buf);
                        }

Modified: trunk/src/target/gsm/src/util/shell.h
===================================================================
--- trunk/src/target/gsm/src/util/shell.h       2007-11-20 04:17:35 UTC (rev 
3447)
+++ trunk/src/target/gsm/src/util/shell.h       2007-11-20 04:19:04 UTC (rev 
3448)
@@ -1,2 +1,2 @@
 
-extern int shell_main(struct lgsm_handle *lgsmh);
+extern int shell_main(struct lgsm_handle *lgsmh, int sync);




--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-11-20 07:05:28 +0100 (Tue, 20 Nov 2007)
New Revision: 3449

Modified:
   trunk/src/target/gsm/include/gsmd/machineplugin.h
   trunk/src/target/gsm/include/gsmd/usock.h
   trunk/src/target/gsm/include/libgsmd/misc.h
   trunk/src/target/gsm/src/gsmd/machine_generic.c
   trunk/src/target/gsm/src/gsmd/machine_gta01.c
   trunk/src/target/gsm/src/gsmd/machine_tihtc.c
   trunk/src/target/gsm/src/gsmd/usock.c
   trunk/src/target/gsm/src/libgsmd/Makefile.am
   trunk/src/target/gsm/src/util/shell.c
Log:
[gsmd] New feature for power on/off GSM modem (Sean Chiang)


Modified: trunk/src/target/gsm/include/gsmd/machineplugin.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/machineplugin.h   2007-11-20 04:19:04 UTC 
(rev 3448)
+++ trunk/src/target/gsm/include/gsmd/machineplugin.h   2007-11-20 06:05:28 UTC 
(rev 3449)
@@ -11,6 +11,7 @@
 struct gsmd_machine_plugin {
        struct llist_head list;
        unsigned char *name;
+       int (*power)(struct gsmd *g, int power);
        int (*ex_submit)(struct gsmd *g);
        int (*detect)(struct gsmd *g);
        int (*init)(struct gsmd *g, int fd);

Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h   2007-11-20 04:19:04 UTC (rev 
3448)
+++ trunk/src/target/gsm/include/gsmd/usock.h   2007-11-20 06:05:28 UTC (rev 
3449)
@@ -24,6 +24,7 @@
        GSMD_MSG_PIN            = 8,
        GSMD_MSG_SMS            = 9,
        GSMD_MSG_CB             = 10,
+       GSMD_MSG_MODEM          = 11,
        __NUM_GSMD_MSGS
 };
 
@@ -57,6 +58,11 @@
        GSMD_PHONE_POWERDOWN    = 2,
 };
 
+enum gsmd_msg_modem {
+       GSMD_MODEM_POWERUP      = 1,
+       GSMD_MODEM_POWERDOWN    = 2,
+};
+
 enum gsmd_msg_cb {
        GSMD_CB_SUBSCRIBE       = 1,
        GSMD_CB_UNSUBSCRIBE     = 2,

Modified: trunk/src/target/gsm/include/libgsmd/misc.h
===================================================================
--- trunk/src/target/gsm/include/libgsmd/misc.h 2007-11-20 04:19:04 UTC (rev 
3448)
+++ trunk/src/target/gsm/include/libgsmd/misc.h 2007-11-20 06:05:28 UTC (rev 
3449)
@@ -9,6 +9,7 @@
 #include <libgsmd/libgsmd.h>
 
 extern int lgsm_phone_power(struct lgsm_handle *lh, int power);
+extern int lgsm_modem_power(struct lgsm_handle *lh, int power);
 
 enum lgsm_info_type {
        LGSM_INFO_TYPE_NONE             = 0,

Modified: trunk/src/target/gsm/src/gsmd/machine_generic.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/machine_generic.c     2007-11-20 04:19:04 UTC 
(rev 3448)
+++ trunk/src/target/gsm/src/gsmd/machine_generic.c     2007-11-20 06:05:28 UTC 
(rev 3449)
@@ -56,6 +56,7 @@
 
 struct gsmd_machine_plugin gsmd_machine_plugin = {
        .name = "generic",
+       .power = NULL,
        .ex_submit = NULL,
        .detect = &generic_detect,
        .init = &generic_init,

Modified: trunk/src/target/gsm/src/gsmd/machine_gta01.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/machine_gta01.c       2007-11-20 04:19:04 UTC 
(rev 3448)
+++ trunk/src/target/gsm/src/gsmd/machine_gta01.c       2007-11-20 06:05:28 UTC 
(rev 3449)
@@ -15,7 +15,53 @@
 #include <gsmd/atcmd.h>
 
 #define GSMD_MODEM_WAKEUP_TIMEOUT     3
+#define GSMD_MODEM_POWEROFF_TIMEOUT    3        
 
+static void poweroff_timeout(struct gsmd_timer *tmr, void *data) 
+{
+       exit(0);
+}
+
+static struct gsmd_timer * poweroff_timer(struct gsmd *g)
+{
+       struct timeval tv;
+       tv.tv_sec = GSMD_MODEM_POWEROFF_TIMEOUT;
+       tv.tv_usec = 0;
+       DEBUGP("Create power off timer\n");
+
+       return gsmd_timer_create(&tv,&poweroff_timeout,g);
+}
+
+static int gta01_power(struct gsmd *g, int power)
+{
+       struct gsmd_atcmd * cmd = NULL;
+
+       switch (power) 
+       {
+               case GSMD_MODEM_POWERUP: 
+                       break;
+
+               case GSMD_MODEM_POWERDOWN:      
+
+                       //After send [EMAIL PROTECTED] to GSM modem, modem will 
not work anymore and gsmd get no response
+                       cmd = atcmd_fill("[EMAIL PROTECTED]", 7+1, NULL, g, 0, 
poweroff_timer);
+
+                       if (!cmd)
+                               return -ENOMEM;
+
+                       llist_add_tail(&cmd->list, &g->pending_atcmds);
+                       if (llist_empty(&g->busy_atcmds) && 
!llist_empty(&g->pending_atcmds)) {
+                               atcmd_wake_pending_queue(g);
+                       }
+                       break;
+
+               default:
+                       return -EINVAL;
+       }
+
+       return 0;
+}
+
 static int null_wakeup_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) 
 {
        DEBUGP("The wake up callback!!\n");
@@ -103,6 +149,7 @@
 
 struct gsmd_machine_plugin gsmd_machine_plugin = {
        .name = "TI Calypso / FIC firmware",
+       .power = &gta01_power,
        .ex_submit = &atcmd_wakeup_modem,
        .detect = &gta01_detect,
        .init = &gta01_init,

Modified: trunk/src/target/gsm/src/gsmd/machine_tihtc.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/machine_tihtc.c       2007-11-20 04:19:04 UTC 
(rev 3448)
+++ trunk/src/target/gsm/src/gsmd/machine_tihtc.c       2007-11-20 06:05:28 UTC 
(rev 3449)
@@ -66,6 +66,7 @@
 
 struct gsmd_machine_plugin gsmd_machine_plugin = {
        .name = "TI Calypso / HTC firmware",
+       .power = NULL,
        .ex_submit = NULL,
        .detect = &tihtc_detect,
        .init = &tihtc_init,

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c       2007-11-20 04:19:04 UTC (rev 
3448)
+++ trunk/src/target/gsm/src/gsmd/usock.c       2007-11-20 06:05:28 UTC (rev 
3449)
@@ -288,6 +288,18 @@
        return atcmd_submit(gu->gsmd, cmd);
 }
 
+static int usock_rcv_modem(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, 
+                          int len)
+{
+       struct gsmd *g = gu->gsmd;
+
+       if (g->machinepl->power) {
+               g->machinepl->power(g, gph->msg_subtype);
+       }
+
+       return 0; 
+}
+
 static int network_vmail_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
 {
        struct gsmd_user *gu = ctx;
@@ -1168,6 +1180,7 @@
        [GSMD_MSG_SMS]          = &usock_rcv_sms,
        [GSMD_MSG_CB]           = &usock_rcv_cb,
        [GSMD_MSG_PHONEBOOK]    = &usock_rcv_phonebook,
+       [GSMD_MSG_MODEM]        = &usock_rcv_modem,
 };
 
 static int usock_rcv_pcmd(struct gsmd_user *gu, char *buf, int len)

Modified: trunk/src/target/gsm/src/libgsmd/Makefile.am
===================================================================
--- trunk/src/target/gsm/src/libgsmd/Makefile.am        2007-11-20 04:19:04 UTC 
(rev 3448)
+++ trunk/src/target/gsm/src/libgsmd/Makefile.am        2007-11-20 06:05:28 UTC 
(rev 3449)
@@ -5,6 +5,6 @@
 lib_LTLIBRARIES = libgsmd.la
 
 libgsmd_la_LDFLAGS = -Wc,-nostartfiles -version-info $(LIBVERSION)
-libgsmd_la_SOURCES = libgsmd.c libgsmd_input.c libgsmd_voicecall.c 
libgsmd_passthrough.c libgsmd_event.c libgsmd_phone.c libgsmd_network.c 
libgsmd_pin.c libgsmd_sms.c libgsmd_phonebook.c
+libgsmd_la_SOURCES = libgsmd.c libgsmd_input.c libgsmd_voicecall.c 
libgsmd_passthrough.c libgsmd_event.c libgsmd_phone.c libgsmd_network.c 
libgsmd_pin.c libgsmd_sms.c libgsmd_phonebook.c libgsmd_modem.c
 
 noinst_HEADERS = lgsm_internals.h

Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c       2007-11-20 04:19:04 UTC (rev 
3448)
+++ trunk/src/target/gsm/src/util/shell.c       2007-11-20 06:05:28 UTC (rev 
3449)
@@ -356,6 +356,8 @@
                "\tH\tHangup call\n"
                "\tO\tPower On\n"
                "\to\tPower Off\n"
+               "\tM\tModem Power On\n"
+               "\tm\tModem Power Off\n"
                "\tr\tRegister to network\n"
                "\tR\tRegister to given operator (R=number)\n"
                "\tU\tUnregister from netowrk\n"
@@ -675,6 +677,12 @@
                                printf("Get imsi\n");
                                lgsm_get_imsi(lgsmh);
                                pending_responses ++;
+                        } else if (!strncmp(buf, "M", 1)) {
+                                printf("Modem Power On\n");
+                                lgsm_modem_power(lgsmh, 1);
+                        } else if (!strncmp(buf, "m", 1)) {
+                                printf("Modem Power Off\n");
+                                lgsm_modem_power(lgsmh, 0);
                        } 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