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

erin_yueh at sita.openmoko.org erin_yueh at sita.openmoko.org
Fri Jan 18 10:15:40 CET 2008


Author: erin_yueh
Date: 2008-01-18 10:15:33 +0100 (Fri, 18 Jan 2008)
New Revision: 3876

Modified:
   trunk/src/target/gsm/include/gsmd/usock.h
   trunk/src/target/gsm/src/gsmd/usock.c
   trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
   trunk/src/target/gsm/src/util/shell.c
Log:
gsmd: add 'lgsm_open_n_get' to retrieve the current country code (Sean Chiang)


Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h	2008-01-17 22:40:29 UTC (rev 3875)
+++ trunk/src/target/gsm/include/gsmd/usock.h	2008-01-18 09:15:33 UTC (rev 3876)
@@ -153,14 +153,15 @@
 	GSMD_NETWORK_VMAIL_GET	= 3,
 	GSMD_NETWORK_VMAIL_SET	= 4,
 	GSMD_NETWORK_OPER_GET	= 5,
-	GSMD_NETWORK_OPER_LIST	= 6,
-	GSMD_NETWORK_CIND_GET	= 7,
-	GSMD_NETWORK_DEREGISTER	= 8,
-	GSMD_NETWORK_GET_NUMBER = 9,
-	GSMD_NETWORK_PREF_LIST  = 10,
-	GSMD_NETWORK_PREF_DEL   = 11,
-	GSMD_NETWORK_PREF_ADD   = 12,
-	GSMD_NETWORK_PREF_SPACE = 13,
+	GSMD_NETWORK_OPER_N_GET	= 6,
+	GSMD_NETWORK_OPER_LIST	= 7,
+	GSMD_NETWORK_CIND_GET	= 8,
+	GSMD_NETWORK_DEREGISTER	= 9,
+	GSMD_NETWORK_GET_NUMBER = 10,
+	GSMD_NETWORK_PREF_LIST  = 11,
+	GSMD_NETWORK_PREF_DEL   = 12,
+	GSMD_NETWORK_PREF_ADD   = 13,
+	GSMD_NETWORK_PREF_SPACE = 14,
 };
 
 enum gsmd_msg_sms {

Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c	2008-01-17 22:40:29 UTC (rev 3875)
+++ trunk/src/target/gsm/src/gsmd/usock.c	2008-01-18 09:15:33 UTC (rev 3876)
@@ -767,6 +767,46 @@
 	return ret;
 }
 
+static int network_oper_n_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+	struct gsmd_user *gu = ctx;
+	int format, s, ret;
+	char buf[16+1] = {'\0'};
+	struct gsm_extrsp *er;
+
+	er = extrsp_parse(cmd, resp);
+
+	if ( !er )
+		return -ENOMEM;
+	
+	//extrsp_dump(er);	
+
+	/* Format: <mode>[,<format>,<oper>] */
+	if ( er->num_tokens == 1 &&
+			er->tokens[0].type == GSMD_ECMD_RTT_NUMERIC ) {
+		
+		/* In case we're not registered, return an empty string */
+		buf[0] = '\0';
+	}
+	else if ( er->num_tokens == 3 &&
+			er->tokens[0].type == GSMD_ECMD_RTT_NUMERIC &&
+			er->tokens[1].type == GSMD_ECMD_RTT_NUMERIC &&
+			er->tokens[2].type == GSMD_ECMD_RTT_STRING ) {
+
+		
+		strcpy(buf, er->tokens[2].u.string);
+	}
+	else {
+		DEBUGP("Invalid Input : Parse error\n");
+		return -EINVAL;
+	}
+	
+	talloc_free(er);
+
+	return gsmd_ucmd_submit(gu, GSMD_MSG_NETWORK, GSMD_NETWORK_OPER_N_GET,
+			cmd->id, sizeof(buf), buf);
+}
+
 static int network_opers_parse(const char *str, struct gsmd_msg_oper **out)
 {
 	int len = 0;
@@ -980,6 +1020,12 @@
 					&null_cmd_cb, gu, 0, NULL));
 		cmd = atcmd_fill("AT+COPS?", 8+1, &network_oper_cb, gu, 0, NULL);
 		break;
+	case GSMD_NETWORK_OPER_N_GET:
+		/* Set numeric format */
+		atcmd_submit(gu->gsmd, atcmd_fill("AT+COPS=3,2", 11+1,
+					&null_cmd_cb, gu, 0, NULL));
+		cmd = atcmd_fill("AT+COPS?", 8+1, &network_oper_n_cb, gu, 0, NULL);
+		break;
 	case GSMD_NETWORK_OPER_LIST:
 		cmd = atcmd_fill("AT+COPS=?", 9+1, &network_opers_cb, gu, 0, NULL);
 		break;

Modified: trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
===================================================================
--- trunk/src/target/gsm/src/libgsmd/libgsmd_network.c	2008-01-17 22:40:29 UTC (rev 3875)
+++ trunk/src/target/gsm/src/libgsmd/libgsmd_network.c	2008-01-18 09:15:33 UTC (rev 3876)
@@ -46,6 +46,11 @@
 	return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_OPER_GET);
 }
 
+int lgsm_oper_n_get(struct lgsm_handle *lh)
+{
+	return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_OPER_N_GET);
+}
+
 int lgsm_opers_get(struct lgsm_handle *lh)
 {
 	return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_OPER_LIST);

Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c	2008-01-17 22:40:29 UTC (rev 3875)
+++ trunk/src/target/gsm/src/util/shell.c	2008-01-18 09:15:33 UTC (rev 3876)
@@ -320,6 +320,7 @@
 		pending_responses --;
 		break;
 	case GSMD_NETWORK_OPER_GET:
+	case GSMD_NETWORK_OPER_N_GET:
 		if (oper[0])
 			printf("Our current operator is %s\n", oper);
 		else
@@ -500,6 +501,7 @@
 		"\tR\tRegister to given operator (R=number)\n"
 		"\tU\tUnregister from netowrk\n"
 		"\tP\tPrint current operator\n"
+		"\tN\tPrint current operator in numeric\n"
 		"\tL\tList available operators\n"
 		"\tQ\tRead signal quality\n"
 		"\tS\tSleep (S[=second], default 5)\n"
@@ -634,6 +636,10 @@
 				printf("Read current opername\n");
 				lgsm_oper_get(lgsmh);
 				pending_responses ++;
+			} else if (!strcmp(buf, "N")) {
+				printf("Read current opername in numeric format\n");
+				lgsm_oper_n_get(lgsmh);
+				pending_responses ++;
 			} else if (!strcmp(buf, "L")) {
 				printf("List operators\n");
 				lgsm_opers_get(lgsmh);





More information about the commitlog mailing list