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. r3305 - in
trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src
([EMAIL PROTECTED])
2. r3306 - in
trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src
([EMAIL PROTECTED])
3. r3307 - in trunk/src/target/gsm: include/gsmd src/gsmd
([EMAIL PROTECTED])
4. r3308 - in trunk/src/target/gsm: include/gsmd src/gsmd
([EMAIL PROTECTED])
5. r3309 - in trunk/src/target/gsm: include/gsmd include/libgsmd
src/gsmd src/libgsmd src/util ([EMAIL PROTECTED])
--- Begin Message ---
Author: thomas
Date: 2007-10-30 12:59:56 +0100 (Tue, 30 Oct 2007)
New Revision: 3305
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
Log:
* src/moko-dialer.c: (on_keypad_dial_clicked),
(on_keypad_pin_entry), (on_network_registered), (moko_dialer_init):
Clean up registration code (don't assume gsmd is broken!)
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
2007-10-30 03:39:17 UTC (rev 3304)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
2007-10-30 11:59:56 UTC (rev 3305)
@@ -1,3 +1,9 @@
+2007-10-30 Thomas Wood <[EMAIL PROTECTED]>
+
+ * src/moko-dialer.c: (on_keypad_dial_clicked),
+ (on_keypad_pin_entry), (on_network_registered), (moko_dialer_init):
+ Clean up registration code (don't assume gsmd is broken!)
+
2007-10-29 Michael Lauer <[EMAIL PROTECTED]>
* data/default_ringtone.ogg: REMOVED
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
2007-10-30 03:39:17 UTC (rev 3304)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
2007-10-30 11:59:56 UTC (rev 3305)
@@ -71,7 +71,6 @@
MokoTime *time;
/* Registration variables */
- guint reg_timeout;
MokoGsmdConnectionNetregType registered;
MokoGSMLocation gsm_location;
};
@@ -92,7 +91,6 @@
static void on_keypad_dial_clicked (MokoKeypad *keypad,
const gchar *number,
MokoDialer *dialer);
-static gboolean register_network_cb (MokoDialer *dialer);
/* DBus functions */
gboolean
@@ -271,14 +269,14 @@
gchar *strings[] = {
"None",
"Home network registered",
- "Waiting for network registration",
+ "Searching for network",
"Network registration denied",
"",
"Roaming network registered"
};
dlg = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- "Not connected to network.\nCurrent status = %s ",
strings[priv->registered]);
+ "Cannot dial number. %s", strings[priv->registered]);
gtk_dialog_run (GTK_DIALOG (dlg));
gtk_widget_destroy (dlg);
@@ -337,11 +335,6 @@
moko_gsmd_connection_send_pin (priv->connection, pin);
moko_keypad_set_pin_mode (MOKO_KEYPAD (priv->keypad), FALSE);
-
- priv->registered = MOKO_GSMD_CONNECTION_NETREG_NONE;
- priv->reg_timeout = g_timeout_add (GSM_REGISTER_TIMEOUT,
- (GSourceFunc)register_network_cb,
- dialer);
g_free (pin);
}
@@ -481,25 +474,21 @@
g_return_if_fail (MOKO_IS_DIALER (dialer));
priv = dialer->priv;
- g_warning ("on_network_registered: type is %d\n", type);
-
switch (type)
{
case MOKO_GSMD_CONNECTION_NETREG_NONE:
case MOKO_GSMD_CONNECTION_NETREG_SEARCHING:
/* Do nothing */
- g_debug ("NetReg: Searching for network");
+ g_debug ("Searching for network");
break;
case MOKO_GSMD_CONNECTION_NETREG_DENIED:
/* This may be a pin issue*/
break;
case MOKO_GSMD_CONNECTION_NETREG_HOME:
case MOKO_GSMD_CONNECTION_NETREG_ROAMING:
- g_debug ("NetReg: Network registered");
- g_debug ("\tLocationAreaCode = %x\n\tCellID = %x", lac, cell);
+ g_debug ("Network registered: LocationAreaCode: %x. CellID: %x.", lac,
cell);
priv->gsm_location.lac = lac;
priv->gsm_location.cid = cell;
- g_source_remove (priv->reg_timeout);
break;
default:
g_warning ("Unhandled register event type = %d\n", type);
@@ -597,7 +586,6 @@
g_return_if_fail (MOKO_IS_DIALER (dialer));
priv = dialer->priv;
- g_source_remove (priv->reg_timeout);
moko_keypad_set_pin_mode (MOKO_KEYPAD (priv->keypad), TRUE);
moko_dialer_show_dialer (dialer, NULL);
g_debug ("Pin Requested");
@@ -688,45 +676,7 @@
break;
}
}
-static gboolean
-register_network_cb (MokoDialer *dialer)
-{
- MokoDialerPrivate *priv;
- g_return_val_if_fail (MOKO_DIALER (dialer), TRUE);
- priv = MOKO_DIALER_GET_PRIVATE (dialer);
-
- /* We check whether we've been registered yet, otherwise keep poking
- * gsmd
- */
- switch (priv->registered)
- {
- case MOKO_GSMD_CONNECTION_NETREG_NONE:
- /* We have yet to request registration, so lets do it */
- /* FIXME: do the pin stuff */
- g_debug ("Requesting registration");
- moko_gsmd_connection_network_register (priv->connection);
- priv->registered = MOKO_GSMD_CONNECTION_NETREG_SEARCHING;
- break;
- case MOKO_GSMD_CONNECTION_NETREG_SEARCHING:
- g_debug ("Waiting for registration");
- break;
- case MOKO_GSMD_CONNECTION_NETREG_DENIED:
- g_debug ("Registration denied, retrying");
- moko_gsmd_connection_network_register (priv->connection);
- priv->registered = MOKO_GSMD_CONNECTION_NETREG_SEARCHING;
- break;
- case MOKO_GSMD_CONNECTION_NETREG_HOME:
- case MOKO_GSMD_CONNECTION_NETREG_ROAMING:
- g_debug ("Network Registered");
- return FALSE;
- default:
- g_warning ("Unhandled register event type = %d\n", priv->registered);
- }
-
- return TRUE;
-}
-
/* GObject functions */
static void
moko_dialer_dispose (GObject *object)
@@ -854,13 +804,7 @@
if (err && err->code == MOKO_GSMD_ERROR_CONNECT)
exit (1); /* no point continuing if we can't connect to gsmd? */
- /* Handle network registration a few seconds after powering up the
- * antenna*/
- priv->registered = MOKO_GSMD_CONNECTION_NETREG_NONE;
- priv->reg_timeout = g_timeout_add (GSM_REGISTER_TIMEOUT * 2,
- (GSourceFunc)register_network_cb,
- dialer);
-
+
/* Connect to the gsmd signals */
g_signal_connect (G_OBJECT (conn), "network-registration",
G_CALLBACK (on_network_registered), (gpointer)dialer);
@@ -873,6 +817,11 @@
g_signal_connect (G_OBJECT (conn), "call-progress",
G_CALLBACK (on_call_progress_changed), (gpointer)dialer);
+ /* FIXME:
+ * moko_gsmd_connection_get_network_status always seems to return 0 here */
+ priv->registered = MOKO_GSMD_CONNECTION_NETREG_SEARCHING;
+ moko_gsmd_connection_network_register (conn);
+
/* Set up the journal */
priv->journal = moko_journal_open_default ();
if (!priv->journal || !moko_journal_load_from_storage (priv->journal))
--- End Message ---
--- Begin Message ---
Author: thomas
Date: 2007-10-30 13:30:49 +0100 (Tue, 30 Oct 2007)
New Revision: 3306
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
Log:
* src/moko-dialer.c: (on_talking_reject_call): Stop ringing notification
if we reject an incoming call
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
2007-10-30 11:59:56 UTC (rev 3305)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
2007-10-30 12:30:49 UTC (rev 3306)
@@ -1,5 +1,10 @@
2007-10-30 Thomas Wood <[EMAIL PROTECTED]>
+ * src/moko-dialer.c: (on_talking_reject_call): Stop ringing notification
+ if we reject an incoming call
+
+2007-10-30 Thomas Wood <[EMAIL PROTECTED]>
+
* src/moko-dialer.c: (on_keypad_dial_clicked),
(on_keypad_pin_entry), (on_network_registered), (moko_dialer_init):
Clean up registration code (don't assume gsmd is broken!)
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
2007-10-30 11:59:56 UTC (rev 3305)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer.c
2007-10-30 12:30:49 UTC (rev 3306)
@@ -388,6 +388,7 @@
g_signal_emit (G_OBJECT (dialer), dialer_signals[REJECTED], 0);
moko_keypad_set_talking (MOKO_KEYPAD (priv->keypad), FALSE);
+ moko_notify_stop (priv->notify);
}
static void
--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-10-31 07:40:26 +0100 (Wed, 31 Oct 2007)
New Revision: 3307
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: Fix the bug 928, that user cannot hang up call/cancel_atcmd until a call
is connected.(Andrzej Zaborowski)
Modified: trunk/src/target/gsm/include/gsmd/atcmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/atcmd.h 2007-10-30 12:30:49 UTC (rev
3306)
+++ trunk/src/target/gsm/include/gsmd/atcmd.h 2007-10-31 06:40:26 UTC (rev
3307)
@@ -9,6 +9,7 @@
extern struct gsmd_atcmd *atcmd_fill(const char *cmd, int rlen, atcmd_cb_t
*cb, void *ctx, u_int16_t id);
extern int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd);
+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);
Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c 2007-10-30 12:30:49 UTC (rev
3306)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c 2007-10-31 06:40:26 UTC (rev
3307)
@@ -200,6 +200,52 @@
return -1;
}
+static inline void atcmd_wake_pending_queue (struct gsmd *g)
+{
+ g->gfd_uart.when |= GSMD_FD_WRITE;
+}
+
+static inline void atcmd_wait_pending_queue (struct gsmd *g)
+{
+ g->gfd_uart.when &= ~GSMD_FD_WRITE;
+}
+
+
+static int atcmd_done(struct gsmd *g, struct gsmd_atcmd *cmd, const char *buf)
+{
+ int rc = 0;
+ if (!cmd->cb) {
+ gsmd_log(GSMD_NOTICE, "command without cb!!!\n");
+ } else {
+ DEBUGP("Calling final cmd->cb()\n");
+ /* send final result code if there is no information
+ * response in mlbuf */
+ if (g->mlbuf_len) {
+ cmd->resp = g->mlbuf;
+ g->mlbuf[g->mlbuf_len] = 0;
+ } else {
+ cmd->resp = buf;
+ }
+ rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
+ DEBUGP("Clearing mlbuf\n");
+ g->mlbuf_len = 0;
+ }
+
+ /* remove from list of currently executing cmds */
+ llist_del(&cmd->list);
+ talloc_free(cmd);
+
+ /* if we're finished with current commands, but still have pending
+ * commands: we want to WRITE again */
+ if (llist_empty(&g->busy_atcmds)) {
+ //g->clear_to_send = 1;
+ if (!llist_empty(&g->pending_atcmds)) {
+ atcmd_wake_pending_queue(g);
+ }
+ }
+ return rc;
+}
+
static int ml_parse(const char *buf, int len, void *ctx)
{
struct gsmd *g = ctx;
@@ -389,9 +435,8 @@
}
g->mlunsolicited = 0;
g->mlbuf_len = 0;
- return rc;
}
- return 0;
+ return rc;
final_cb:
/* if reach here, the final result code of a command has been reached */
@@ -405,32 +450,7 @@
if (cmd && cms_error)
generate_event_from_cms(g, cmd->ret);
- if (!cmd->cb) {
- gsmd_log(GSMD_NOTICE, "command without cb!!!\n");
- } else {
- DEBUGP("Calling final cmd->cb()\n");
- /* send final result code if there is no information
- * response in mlbuf */
- if (g->mlbuf_len) {
- cmd->resp = g->mlbuf;
- g->mlbuf[g->mlbuf_len] = 0;
- } else
- cmd->resp = buf;
- rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
- DEBUGP("Clearing mlbuf\n");
- g->mlbuf_len = 0;
- }
-
- /* remove from list of currently executing cmds */
- llist_del(&cmd->list);
- talloc_free(cmd);
-
- /* if we're finished with current commands, but still have pending
- * commands: we want to WRITE again */
- if (llist_empty(&g->busy_atcmds) && !llist_empty(&g->pending_atcmds))
- g->gfd_uart.when |= GSMD_FD_WRITE;
-
- return rc;
+ return atcmd_done(g, cmd, buf);
}
/* called when the modem asked for a new line of a multiline atcmd */
@@ -438,7 +458,7 @@
{
struct gsmd *g = data;
- g->gfd_uart.when |= GSMD_FD_WRITE;
+ atcmd_wake_pending_queue(g);
}
/* callback to be called if [virtual] UART has some data for us */
@@ -510,7 +530,7 @@
}
/* Either pending_atcmds is empty or a command has to wait */
- g->gfd_uart.when &= ~GSMD_FD_WRITE;
+ atcmd_wait_pending_queue(g);
}
return 0;
@@ -547,15 +567,37 @@
/* submit an atcmd in the global queue of pending atcmds */
int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd)
{
+ int empty;
DEBUGP("submitting command `%s'\n", cmd->buf);
- if (llist_empty(&g->pending_atcmds))
- g->gfd_uart.when |= GSMD_FD_WRITE;
+ empty = llist_empty(&g->pending_atcmds);
llist_add_tail(&cmd->list, &g->pending_atcmds);
-
+ if (empty) {
+ atcmd_wake_pending_queue(g);
+ }
return 0;
}
+/* cancel a currently executing atcmd by issuing the command given as
+ * parameter, usually AT ot ATH. */
+int cancel_atcmd(struct gsmd *g, struct gsmd_atcmd *cmd)
+{
+ struct gsmd_atcmd *cur;
+ if (llist_empty(&g->busy_atcmds)) {
+ return atcmd_submit(g, cmd);
+ }
+ cur = llist_entry(g->busy_atcmds.next, struct gsmd_atcmd, list);
+ DEBUGP("cancelling command `%s' with an `%s'\n", cur->buf, cmd->buf);
+
+ if (g->mlbuf_len) {
+ DEBUGP("Discarding mlbuf: %.*s\n", g->mlbuf_len, g->mlbuf);
+ g->mlbuf_len = 0;
+ }
+
+ llist_add(&cmd->list, &g->pending_atcmds);
+ return atcmd_done(g, cur, "OK");
+}
+
void atcmd_drain(int fd)
{
int rc;
Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c 2007-10-30 12:30:49 UTC (rev
3306)
+++ trunk/src/target/gsm/src/gsmd/usock.c 2007-10-31 06:40:26 UTC (rev
3307)
@@ -135,7 +135,13 @@
break;
case GSMD_VOICECALL_HANGUP:
/* ATH0 is not supported by QC, we hope ATH is supported by
everone */
- cmd = atcmd_fill("ATH", 5, &usock_cmd_cb, gu, gph->id);
+ cmd = atcmd_fill("ATH", 4, &usock_cmd_cb, gu, gph->id);
+
+ /* This command is special because it needs to be sent to
+ * the MS even if a command is currently executing. */
+ if (cmd) {
+ return cancel_atcmd(gu->gsmd, cmd);
+ }
break;
case GSMD_VOICECALL_ANSWER:
cmd = atcmd_fill("ATA", 4, &usock_cmd_cb, gu, gph->id);
@@ -167,7 +173,7 @@
if (cmd)
return atcmd_submit(gu->gsmd, cmd);
else
- return 0;
+ return -ENOMEM;
}
static int null_cmd_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-10-31 07:41:45 +0100 (Wed, 31 Oct 2007)
New Revision: 3308
Modified:
trunk/src/target/gsm/include/gsmd/gsmd.h
trunk/src/target/gsm/src/gsmd/atcmd.c
Log:
gsmd: Mainly for working around the bug of GTA01 HW with moko3, but it can
also solve the start up timing issue. (Tick)
Modified: trunk/src/target/gsm/include/gsmd/gsmd.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/gsmd.h 2007-10-31 06:40:26 UTC (rev
3307)
+++ trunk/src/target/gsm/include/gsmd/gsmd.h 2007-10-31 06:41:45 UTC (rev
3308)
@@ -67,6 +67,8 @@
#define GSMD_FLAG_V0 0x0001 /* V0 responses to be expected from TA
*/
#define GSMD_FLAG_SMS_FMT_TEXT 0x0002 /* TODO Use TEXT rather than PDU mode */
+#define GSMD_MODEM_WAKEUP_TIMEOUT 3
+
struct gsmd {
unsigned int flags;
int interpreter_ready;
@@ -84,6 +86,7 @@
unsigned char *mlbuf; /* ml_parse buffer */
unsigned int mlbuf_len;
int mlunsolicited;
+ struct gsmd_timer *wakeup_timer;
};
struct gsmd_user {
Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c 2007-10-31 06:40:26 UTC (rev
3307)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c 2007-10-31 06:41:45 UTC (rev
3308)
@@ -564,10 +564,83 @@
return atcmd;
}
+static int null_wakeup_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+ struct gsmd *g = ctx;
+ if (g->wakeup_timer) {
+ DEBUGP("modem is awake, remove timer!\n");
+ gsmd_timer_unregister(g->wakeup_timer);
+ gsmd_timer_free(g->wakeup_timer);
+ g->wakeup_timer=NULL;
+ } else {
+ DEBUGP("ERROR!! The wake up response comes too late!!\n");
+ }
+ return 0;
+}
+
+static void wakeup_timeout(struct gsmd_timer *tmr, void *data)
+{
+ struct gsmd *g=data;
+ struct gsmd_atcmd *cmd=NULL;
+ DEBUGP("Wakeup time out!!\n");
+ if (g->wakeup_timer != tmr) {
+ DEBUGP("ERROR!! g->wakeup_timer != tmr\n");
+ return;
+ }
+ g->wakeup_timer = NULL;
+ gsmd_timer_free(tmr);
+ if (!llist_empty(&g->busy_atcmds)) {
+ cmd = llist_entry(g->busy_atcmds.next,struct gsmd_atcmd, list);
+ }
+ if (!cmd) {
+ DEBUGP("ERROR!! busy_atcmds is NULL\n");
+ return;
+ }
+ // It's a wakeup command
+ if ( cmd->buf[0]==' ') {
+ llist_del(&cmd->list);
+ talloc_free(cmd);
+ // discard the wakeup command, and pass the real command.
+ if (llist_empty(&g->busy_atcmds) &&
!llist_empty(&g->pending_atcmds)) {
+ atcmd_wake_pending_queue(g);
+ }
+ } else {
+ DEBUGP("ERROR!! Wakeup timeout and cmd->buf is not wakeup
command!! %s\n",cmd->buf);
+ }
+}
+
+void wakeup_timer (struct gsmd *g)
+{
+ struct timeval tv;
+ struct gsmd_timer *timer;
+ tv.tv_sec = GSMD_MODEM_WAKEUP_TIMEOUT;
+ tv.tv_usec = 0;
+ timer=gsmd_timer_create(&tv,&wakeup_timeout,g);
+ g->wakeup_timer=timer;
+
+}
+
+/// adding a null '\r' before real at command.
+struct gsmd_atcmd * atcmd_wakeup_modem(struct gsmd *g)
+{
+ if (!g->wakeup_timer) {
+ DEBUGP("try to wake up\n");
+ struct gsmd_atcmd * cmd= atcmd_fill("
\r",2,null_wakeup_cb,g,0);
+ wakeup_timer(g);
+ if (llist_empty(&g->pending_atcmds)) {
+ atcmd_wake_pending_queue(g);
+ }
+ llist_add_tail(&cmd->list, &g->pending_atcmds);
+ }
+}
+
+
+
/* submit an atcmd in the global queue of pending atcmds */
int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd)
{
int empty;
+ atcmd_wakeup_modem(g);
DEBUGP("submitting command `%s'\n", cmd->buf);
empty = llist_empty(&g->pending_atcmds);
@@ -628,6 +701,7 @@
g->mlbuf_len = 0;
g->mlunsolicited = 0;
+ g->wakeup_timer=NULL;
g->llp.cur = g->llp.buf;
g->llp.len = sizeof(g->llp.buf);
--- End Message ---
--- Begin Message ---
Author: tick
Date: 2007-10-31 07:42:58 +0100 (Wed, 31 Oct 2007)
New Revision: 3309
Modified:
trunk/src/target/gsm/include/gsmd/usock.h
trunk/src/target/gsm/include/libgsmd/phonebook.h
trunk/src/target/gsm/src/gsmd/usock.c
trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c
trunk/src/target/gsm/src/util/shell.c
Log:
gsmd: Adding IMSI support (Jim Rayner)
Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h 2007-10-31 06:41:45 UTC (rev
3308)
+++ trunk/src/target/gsm/include/gsmd/usock.h 2007-10-31 06:42:58 UTC (rev
3309)
@@ -249,6 +249,7 @@
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 */
Modified: trunk/src/target/gsm/include/libgsmd/phonebook.h
===================================================================
--- trunk/src/target/gsm/include/libgsmd/phonebook.h 2007-10-31 06:41:45 UTC
(rev 3308)
+++ trunk/src/target/gsm/include/libgsmd/phonebook.h 2007-10-31 06:42:58 UTC
(rev 3309)
@@ -112,4 +112,7 @@
/* 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
Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c 2007-10-31 06:41:45 UTC (rev
3308)
+++ trunk/src/target/gsm/src/gsmd/usock.c 2007-10-31 06:42:58 UTC (rev
3309)
@@ -1317,6 +1317,26 @@
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 @@
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;
}
Modified: trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c
===================================================================
--- trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c 2007-10-31
06:41:45 UTC (rev 3308)
+++ trunk/src/target/gsm/src/libgsmd/libgsmd_phonebook.c 2007-10-31
06:42:58 UTC (rev 3309)
@@ -223,3 +223,9 @@
return 0;
}
+
+int lgsm_get_imsi(struct lgsm_handle *lh)
+{
+ return lgsm_send_simple(lh, GSMD_MSG_PHONEBOOK,
GSMD_PHONEBOOK_GET_IMSI);
+}
+
Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c 2007-10-31 06:41:45 UTC (rev
3308)
+++ trunk/src/target/gsm/src/util/shell.c 2007-10-31 06:42:58 UTC (rev
3309)
@@ -128,6 +128,10 @@
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 @@
"\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 @@
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);
}
--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog