From df2acb0b0e907082be5157b326a063c3387107f9 Mon Sep 17 00:00:00 2001 From: tick Date: Wed, 31 Oct 2007 06:42:58 +0000 Subject: gsmd: Adding IMSI support (Jim Rayner) git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@3309 99fdad57-331a-0410-800a-d7fa5415bdb3 --- include/gsmd/usock.h | 1 + include/libgsmd/phonebook.h | 3 +++ src/gsmd/usock.c | 25 +++++++++++++++++++++++++ src/libgsmd/libgsmd_phonebook.c | 6 ++++++ src/util/shell.c | 8 ++++++++ 5 files changed, 43 insertions(+) diff --git a/include/gsmd/usock.h b/include/gsmd/usock.h index b9ecfc6..3580a83 100644 --- a/include/gsmd/usock.h +++ b/include/gsmd/usock.h @@ -249,6 +249,7 @@ enum gsmd_msg_phonebook { GSMD_PHONEBOOK_SET_STORAGE = 8, GSMD_PHONEBOOK_RETRIEVE_READRG = 9, GSMD_PHONEBOOK_RETRIEVE_FIND = 10, + GSMD_PHONEBOOK_GET_IMSI = 11, }; /* Type-of-Address, Numbering-Plan-Identification field, GSM 03.40, 9.1.2.5 */ diff --git a/include/libgsmd/phonebook.h b/include/libgsmd/phonebook.h index 6e2d2b1..d17b006 100644 --- a/include/libgsmd/phonebook.h +++ b/include/libgsmd/phonebook.h @@ -112,4 +112,7 @@ extern int lgsm_pb_retrieve_readrg(struct lgsm_handle *lh, int num); /* Retrieve the records of FIND request */ extern int lgsm_pb_retrieve_find(struct lgsm_handle *lh, int num); +/* Retrieve IMSI information */ +extern int lgsm_get_imsi(struct lgsm_handle *lh); // TODO this needs to go into a SIM specific file + #endif diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c index a07fd6f..5b7edd4 100644 --- a/src/gsmd/usock.c +++ b/src/gsmd/usock.c @@ -1317,6 +1317,26 @@ static int phonebook_list_storage_cb(struct gsmd_atcmd *cmd, return 0; } +static int get_imsi_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) +{ + struct gsmd_user *gu = ctx; + struct gsmd_ucmd *ucmd; + + DEBUGP("resp: %s\n", resp); + + ucmd = gsmd_ucmd_fill(strlen(resp)+1, GSMD_MSG_PHONEBOOK, + GSMD_PHONEBOOK_GET_IMSI, 0); + if (!ucmd) + return -ENOMEM; + + strcpy(ucmd->buf, resp); + + usock_cmd_enqueue(ucmd, gu); + + return 0; +} + + static int usock_rcv_phonebook(struct gsmd_user *gu, struct gsmd_msg_hdr *gph,int len) { @@ -1491,6 +1511,11 @@ static int usock_rcv_phonebook(struct gsmd_user *gu, usock_cmd_enqueue(ucmd, gu); break; + + case GSMD_PHONEBOOK_GET_IMSI: + cmd = atcmd_fill("AT+CIMI", 7 + 1, &get_imsi_cb, gu, 0); + break; + default: return -EINVAL; } diff --git a/src/libgsmd/libgsmd_phonebook.c b/src/libgsmd/libgsmd_phonebook.c index 1f59e34..2c5664b 100644 --- a/src/libgsmd/libgsmd_phonebook.c +++ b/src/libgsmd/libgsmd_phonebook.c @@ -223,3 +223,9 @@ int lgsm_pb_retrieve_find(struct lgsm_handle *lh, int num) return 0; } + +int lgsm_get_imsi(struct lgsm_handle *lh) +{ + return lgsm_send_simple(lh, GSMD_MSG_PHONEBOOK, GSMD_PHONEBOOK_GET_IMSI); +} + diff --git a/src/util/shell.c b/src/util/shell.c index 096b2cf..0e77c44 100644 --- a/src/util/shell.c +++ b/src/util/shell.c @@ -128,6 +128,10 @@ static int pb_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh) nFIND = 0; break; + case GSMD_PHONEBOOK_GET_IMSI: + payload = (char *)gmh + sizeof(*gmh); + printf("imsi <%s>\n", payload); + break; default: return -EINVAL; } @@ -363,6 +367,7 @@ static int shell_help(void) "\tsM\tSMS Set preferred storage (sM=mem1,mem2,mem3)\n" "\tsc\tSMS Show Service Centre\n" "\tsC\tSMS Set Service Centre (sC=number)\n" + "\tim\tGet imsi\n" "\tq\tQuit\n" ); } @@ -629,6 +634,9 @@ int shell_main(struct lgsm_handle *lgsmh) lgsm_sms_set_smsc(lgsmh, ptr + 1); } else if (!strcmp(buf, "n")) { lgsm_get_subscriber_num(lgsmh); + } else if (!strncmp(buf, "im", 2)) { + printf("Get imsi\n"); + lgsm_get_imsi(lgsmh); } else { printf("Unknown command `%s'\n", buf); } -- cgit v1.2.3