r3449 - in trunk/src/target/gsm: include/gsmd include/libgsmd src/gsmd src/libgsmd src/util

tick at sita.openmoko.org tick at sita.openmoko.org
Tue Nov 20 07:05:42 CET 2007


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 AT at POFF to GSM modem, modem will not work anymore and gsmd get no response
+			cmd = atcmd_fill("AT at POFF", 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);
 			}





More information about the commitlog mailing list