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 = >a01_power,
.ex_submit = &atcmd_wakeup_modem,
.detect = >a01_detect,
.init = >a01_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