diff options
author | Guillaume Zajac <guillaume.zajac@linux.intel.com> | 2011-05-04 17:39:05 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-05-08 23:18:19 -0500 |
commit | 762dba6bc3e16f778fd1b4476f388e2b0d9ef626 (patch) | |
tree | b69d57f02e259301486f38a84802ae148875aa36 /src/emulator.c | |
parent | daf7c5717828a4a6e9fc82729668956fcc645af5 (diff) | |
download | ofono-762dba6bc3e16f778fd1b4476f388e2b0d9ef626.tar.bz2 |
emulator: add dun_ath_cb() and register it
Diffstat (limited to 'src/emulator.c')
-rw-r--r-- | src/emulator.c | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/src/emulator.c b/src/emulator.c index 5963ffb9..81cc6214 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -193,6 +193,53 @@ error: g_at_server_send_final(em->server, G_AT_SERVER_RESULT_ERROR); } +static void dun_ath_cb(GAtServer *server, GAtServerRequestType type, + GAtResult *result, gpointer user_data) +{ + struct ofono_emulator *em = user_data; + GAtResultIter iter; + int val; + + DBG(""); + + if (em->ppp == NULL) { + g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR); + return; + } + + switch (type) { + case G_AT_SERVER_REQUEST_TYPE_SET: + g_at_result_iter_init(&iter, result); + g_at_result_iter_next(&iter, ""); + + if (g_at_result_iter_next_number(&iter, &val) == FALSE) + goto error; + + if (val != 0) + goto error; + + g_at_ppp_unref(em->ppp); + em->ppp = NULL; + + g_at_server_send_final(server, G_AT_SERVER_RESULT_OK); + break; + + case G_AT_SERVER_REQUEST_TYPE_COMMAND_ONLY: + g_at_ppp_unref(em->ppp); + em->ppp = NULL; + + g_at_server_send_final(server, G_AT_SERVER_RESULT_OK); + break; + + default: +error: + g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR); + break; + } + + return; +} + static struct indicator *find_indicator(struct ofono_emulator *em, const char *name, int *index) { @@ -678,10 +725,17 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd) __ofono_atom_register(em->atom, emulator_unregister); - if (em->type == OFONO_EMULATOR_TYPE_DUN) + switch (em->type) { + case OFONO_EMULATOR_TYPE_DUN: g_at_server_register(em->server, "D", dial_cb, em, NULL); - else if (em->type == OFONO_EMULATOR_TYPE_HFP) + g_at_server_register(em->server, "H", dun_ath_cb, em, NULL); + break; + case OFONO_EMULATOR_TYPE_HFP: g_at_server_set_echo(em->server, FALSE); + break; + default: + break; + } } static void emulator_remove(struct ofono_atom *atom) |