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

erin_yueh at sita.openmoko.org erin_yueh at sita.openmoko.org
Fri Feb 15 12:10:25 CET 2008


Author: erin_yueh
Date: 2008-02-15 12:10:16 +0100 (Fri, 15 Feb 2008)
New Revision: 4067

Modified:
   trunk/src/target/gsm/include/gsmd/gsmd.h
   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_phone.c
   trunk/src/target/gsm/src/util/shell.c
Log:
gsmd: add retrieving phone info (Erin Yueh)


Modified: trunk/src/target/gsm/include/gsmd/gsmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/gsmd.h	2008-02-15 07:23:19 UTC (rev 4066)
+++ trunk/src/target/gsm/include/gsmd/gsmd.h	2008-02-15 11:10:16 UTC (rev 4067)
@@ -73,6 +73,7 @@
 #define GSMD_FLAG_SMS_FMT_TEXT	0x0002	/* TODO Use TEXT rather than PDU mode */
 
 #define GSMD_ATCMD_TIMEOUT	60	/* If doesn get respond within 60 secs, discard */
+#define GSMD_MAX_INFO_LEN	64	/* by the standard it should be 2048, way too much :) */
 
 struct gsmd {
 	unsigned int flags;

Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h	2008-02-15 07:23:19 UTC (rev 4066)
+++ trunk/src/target/gsm/include/gsmd/usock.h	2008-02-15 11:10:16 UTC (rev 4067)
@@ -135,6 +135,10 @@
 	GSMD_PHONE_POWERUP	= 1,
 	GSMD_PHONE_POWERDOWN	= 2,
 	GSMD_PHONE_GET_IMSI     = 3,
+	GSMD_PHONE_GET_MANUF	= 4,
+	GSMD_PHONE_GET_MODEL	= 5,
+	GSMD_PHONE_GET_REVISION	= 6,
+	GSMD_PHONE_GET_SERIAL	= 7,
 };
 
 enum gsmd_msg_modem {

Modified: trunk/src/target/gsm/include/libgsmd/misc.h
===================================================================
--- trunk/src/target/gsm/include/libgsmd/misc.h	2008-02-15 07:23:19 UTC (rev 4066)
+++ trunk/src/target/gsm/include/libgsmd/misc.h	2008-02-15 11:10:16 UTC (rev 4067)
@@ -11,20 +11,6 @@
 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,
-	LGSM_INFO_TYPE_MANUF		= 1,
-	LGSM_INFO_TYPE_MODEL		= 2,
-	LGSM_INFO_TYPE_REVISION		= 3,
-	LGSM_INFO_TYPE_SERIAL		= 4,
-	LGSM_INFO_TYPE_IMSI		= 5,
-};
-
-/* Get some information about the handset */
-extern int lgsm_get_info(struct lgsm_handle *lh,
-			 enum lgsm_info_type type,
-			 char *ret_string, u_int16_t len);
-
 /* Authenticate to SIM Card using specified null-terminated pin */
 extern int lgsm_pin_auth(struct lgsm_handle *lh, const char *pin);
 
@@ -73,6 +59,14 @@
 
 /* Retrieve IMSI information */
 extern int lgsm_get_imsi(struct lgsm_handle *lh);
+/* Retrieve manufacturer information */
+extern int lgsm_get_manufacturer(struct lgsm_handle *lh);
+/* Retrieve model information */
+extern int lgsm_get_model(struct lgsm_handle *lh);
+/* Retrieve revision information */
+extern int lgsm_get_revision(struct lgsm_handle *lh);
+/* Retrieve serial information */
+extern int lgsm_get_serial(struct lgsm_handle *lh);
 /* Set voice mail number */
 extern int lgsm_voicemail_set(struct lgsm_handle *lh, const char *number);
 /* Get currently configured voice mail number */

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c	2008-02-15 07:23:19 UTC (rev 4066)
+++ trunk/src/target/gsm/src/gsmd/usock.c	2008-02-15 11:10:16 UTC (rev 4067)
@@ -613,6 +613,58 @@
 			cmd->id, sizeof(ret), &ret);
 }
 
+static int gsmd_get_manuf_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+	struct gsmd_user *gu = ctx;
+
+	DEBUGP("cmd = '%s', resp: '%s'\n", cmd->buf, resp);
+	if (strncmp(resp, "+CGMI: ", 7))
+		return -EINVAL;
+	resp += 7;
+	return gsmd_ucmd_submit(gu, GSMD_MSG_PHONE, GSMD_PHONE_GET_MANUF,
+			cmd->id, strlen(resp) + 1, resp);
+	return 0;
+}
+
+static int gsmd_get_model_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+	struct gsmd_user *gu = ctx;
+
+	DEBUGP("cmd = '%s', resp: '%s'\n", cmd->buf, resp);
+	if (strncmp(resp, "+CGMM: ", 7))
+		return -EINVAL;
+	resp += 7;
+	return gsmd_ucmd_submit(gu, GSMD_MSG_PHONE, GSMD_PHONE_GET_MODEL,
+			cmd->id, strlen(resp) + 1, resp);
+	return 0;
+}
+
+static int gsmd_get_revision_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+	struct gsmd_user *gu = ctx;
+
+	DEBUGP("cmd = '%s', resp: '%s'\n", cmd->buf, resp);
+	if (strncmp(resp, "+CGMR: ", 7))
+		return -EINVAL;
+	resp += 7;
+	return gsmd_ucmd_submit(gu, GSMD_MSG_PHONE, GSMD_PHONE_GET_REVISION,
+			cmd->id, strlen(resp) + 1, resp);
+	return 0;
+}
+
+static int gsmd_get_serial_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+	struct gsmd_user *gu = ctx;
+
+	DEBUGP("cmd = '%s', resp: '%s'\n", cmd->buf, resp);
+	if (strncmp(resp, "+CGSN: ", 7))
+		return -EINVAL;
+	resp += 7;
+	return gsmd_ucmd_submit(gu, GSMD_MSG_PHONE, GSMD_PHONE_GET_SERIAL,
+			cmd->id, strlen(resp) + 1, resp);
+	return 0;
+}
+
 static int usock_rcv_phone(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, 
 			   int len)
 {
@@ -621,18 +673,34 @@
 	switch (gph->msg_subtype) {
 	case GSMD_PHONE_POWERUP:
 		cmd = atcmd_fill("AT+CFUN=1", 9+1,
-				 &phone_powerup_cb, gu, 0, NULL);
+				&phone_powerup_cb, gu, 0, NULL);
 		break;
 
 	case GSMD_PHONE_POWERDOWN:
 		cmd = atcmd_fill("AT+CFUN=0", 9+1,
-				 &phone_powerdown_cb, gu, 0, NULL);
+				&phone_powerdown_cb, gu, 0, NULL);
 		gu->gsmd->dev_state.on = 0;
 		break;
 	case GSMD_PHONE_GET_IMSI:
 		return gsmd_ucmd_submit(gu, GSMD_MSG_PHONE, GSMD_PHONE_GET_IMSI,
 			0, strlen(gu->gsmd->imsi) + 1, gu->gsmd->imsi);
 		break;
+	case GSMD_PHONE_GET_MANUF:
+		cmd = atcmd_fill("AT+CGMI", 7+1,
+				&gsmd_get_manuf_cb, gu, 0, NULL);
+		break;
+	case GSMD_PHONE_GET_MODEL:
+		cmd = atcmd_fill("AT+CGMM", 7+1,
+				&gsmd_get_model_cb, gu, 0, NULL);
+		break;
+	case GSMD_PHONE_GET_REVISION:
+		cmd = atcmd_fill("AT+CGMR", 7+1,
+				&gsmd_get_revision_cb, gu, 0, NULL);
+		break;
+	case GSMD_PHONE_GET_SERIAL:
+		cmd = atcmd_fill("AT+CGSN", 7+1,
+				&gsmd_get_serial_cb, gu, 0, NULL);
+		break;
 
 	default:
 		return -EINVAL;

Modified: trunk/src/target/gsm/src/libgsmd/libgsmd_phone.c
===================================================================
--- trunk/src/target/gsm/src/libgsmd/libgsmd_phone.c	2008-02-15 07:23:19 UTC (rev 4066)
+++ trunk/src/target/gsm/src/libgsmd/libgsmd_phone.c	2008-02-15 11:10:16 UTC (rev 4067)
@@ -50,3 +50,23 @@
 	return lgsm_send_simple(lh, GSMD_MSG_PHONE, GSMD_PHONE_GET_IMSI);
 }
 
+int lgsm_get_manufacturer(struct lgsm_handle *lh)
+{
+	return lgsm_send_simple(lh, GSMD_MSG_PHONE, GSMD_PHONE_GET_MANUF);
+}
+
+int lgsm_get_model(struct lgsm_handle *lh)
+{
+	return lgsm_send_simple(lh, GSMD_MSG_PHONE, GSMD_PHONE_GET_MODEL);
+}
+
+int lgsm_get_revision(struct lgsm_handle *lh)
+{
+	return lgsm_send_simple(lh, GSMD_MSG_PHONE, GSMD_PHONE_GET_REVISION);
+}
+
+int lgsm_get_serial(struct lgsm_handle *lh)
+{
+	return lgsm_send_simple(lh, GSMD_MSG_PHONE, GSMD_PHONE_GET_SERIAL);
+}
+

Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c	2008-02-15 07:23:19 UTC (rev 4066)
+++ trunk/src/target/gsm/src/util/shell.c	2008-02-15 11:10:16 UTC (rev 4067)
@@ -400,6 +400,22 @@
 		payload = (char *)gmh + sizeof(*gmh);
 		printf("imsi <%s>\n", payload);
 		break;
+	case GSMD_PHONE_GET_MANUF:
+		payload = (char *)gmh + sizeof(*gmh);
+		printf("manufacturer: %s\n", payload);
+		break;
+	case GSMD_PHONE_GET_MODEL:
+		payload = (char *)gmh + sizeof(*gmh);
+		printf("model: %s\n", payload);
+		break;
+	case GSMD_PHONE_GET_REVISION:
+		payload = (char *)gmh + sizeof(*gmh);
+		printf("revision: %s\n", payload);
+		break;
+	case GSMD_PHONE_GET_SERIAL:
+		payload = (char *)gmh + sizeof(*gmh);
+		printf("serial: %s\n", payload);
+		break;
 	case GSMD_PHONE_POWERUP:
 		if (*intresult)
 			printf("Modem power-up failed: %i\n", *intresult);
@@ -551,6 +567,10 @@
 		"\tgvm\tGet Voicemail number\n"
 		"\tsvm\tSet Voicemail number(svm=number)\n"
 		"\tim\tGet imsi\n"
+		"\tmf\tGet manufacturer\n"
+		"\tml\tGet model\n"
+		"\trv\tGet revision\n"
+		"\tsn\tGet serial number\n"
 		"\tcs\tGet Call status\n"
 		"\tgp\tGet PIN status\n"
 		"\tRh\tRelease all held calls (+CHLD=0)\n"
@@ -864,6 +884,22 @@
 				printf("Get imsi\n");
 				lgsm_get_imsi(lgsmh);
 				pending_responses ++;
+			} else if (!strncmp(buf, "mf", 2)) {
+				printf("Get manufacturer\n");
+				lgsm_get_manufacturer(lgsmh);
+				pending_responses ++;
+			} else if (!strncmp(buf, "ml", 2)) {
+				printf("Get model\n");
+				lgsm_get_model(lgsmh);
+				pending_responses ++;
+			} else if (!strncmp(buf, "rv", 2)) {
+				printf("Get revision\n");
+				lgsm_get_revision(lgsmh);
+				pending_responses ++;
+			} else if (!strncmp(buf, "sn", 2)) {
+				printf("Get serial number\n");
+				lgsm_get_serial(lgsmh);
+				pending_responses ++;
 			} else if ( strlen(buf)==1 && !strncmp(buf, "M", 1)) {
 				printf("Modem Power On\n");
 				lgsm_modem_power(lgsmh, 1);





More information about the commitlog mailing list