diff options
author | Yang Gu <yang.gu@intel.com> | 2010-07-13 18:30:00 +0800 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-07-13 09:55:02 -0500 |
commit | 9a71ae891b71f7e046f9600ec44cda4744720b8f (patch) | |
tree | 563536563aa6f557acf6919dc9d6e262b62985c2 /drivers/atmodem/stk.c | |
parent | c603efbf51dcf365f39ced1e9163976737c6a426 (diff) | |
download | ofono-9a71ae891b71f7e046f9600ec44cda4744720b8f.tar.bz2 |
atmodem: phonesim proactive command notification
Diffstat (limited to 'drivers/atmodem/stk.c')
-rw-r--r-- | drivers/atmodem/stk.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/atmodem/stk.c b/drivers/atmodem/stk.c index 1283cca0..ab29e71a 100644 --- a/drivers/atmodem/stk.c +++ b/drivers/atmodem/stk.c @@ -39,9 +39,11 @@ #include "atmodem.h" #include "stk.h" +#include "vendor.h" struct stk_data { GAtChat *chat; + unsigned int vendor; }; static const char *csim_prefix[] = { "+CSIM:", NULL }; @@ -262,10 +264,31 @@ error: CALLBACK_WITH_FAILURE(cb, data); } +static void phonesim_tcmd_notify(GAtResult *result, gpointer user_data) +{ + struct ofono_stk *stk = user_data; + GAtResultIter iter; + int length; + + g_at_result_iter_init(&iter, result); + + if (!g_at_result_iter_next(&iter, "*TCMD:")) + return; + + if (!g_at_result_iter_next_number(&iter, &length)) + return; + + at_sim_fetch_command(stk, length); +} + static gboolean at_stk_register(gpointer user) { struct ofono_stk *stk = user; + struct stk_data *sd = ofono_stk_get_data(stk); + if (sd->vendor == OFONO_VENDOR_PHONESIM) + g_at_chat_register(sd->chat, "*TCMD", phonesim_tcmd_notify, + FALSE, stk, NULL); ofono_stk_register(stk); return FALSE; @@ -278,6 +301,7 @@ static int at_stk_probe(struct ofono_stk *stk, unsigned int vendor, void *data) sd = g_new0(struct stk_data, 1); sd->chat = chat; + sd->vendor = vendor; ofono_stk_set_data(stk, sd); g_idle_add(at_stk_register, stk); |