diff options
author | Denis Kenzior <denkenz@gmail.com> | 2011-05-25 05:32:05 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-05-25 05:32:05 -0500 |
commit | bc52e40801666f2ffd5806f7ea8723e438c0a55b (patch) | |
tree | 4dc2ad6b8370395bd4bf654afa49901c3a3c1920 /gatchat | |
parent | 92e0657eed0b0777e5a7e3502b450aa42921fc8c (diff) | |
download | ofono-bc52e40801666f2ffd5806f7ea8723e438c0a55b.tar.bz2 |
gsmdial: Send escape sequence followed by ATH/ATO
This functionality can be triggered by sending SIGUSR1 / SIGUSR2 to
gsmdial. e.g. kill -10 <pid> and kill -12 <pid>
Diffstat (limited to 'gatchat')
-rw-r--r-- | gatchat/gsmdial.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gatchat/gsmdial.c b/gatchat/gsmdial.c index f8a980ad..11169840 100644 --- a/gatchat/gsmdial.c +++ b/gatchat/gsmdial.c @@ -89,6 +89,40 @@ static void power_down(gboolean ok, GAtResult *result, gpointer user_data) g_main_loop_quit(event_loop); } +static void kill_ppp(gboolean ok, GAtResult *result, gpointer user_data) +{ + g_print("kill_ppp: %d\n", ok); + + if (ok == FALSE) + return; + + g_at_ppp_unref(ppp); + ppp = NULL; +} + +static void ppp_suspend_ath0(gpointer user_data) +{ + g_at_chat_resume(modem); + g_at_chat_send(modem, "ATH0", none_prefix, kill_ppp, NULL, NULL); +} + +static void resume_ppp(gboolean ok, GAtResult *result, gpointer user_data) +{ + g_print("resume_ppp: %d\n", ok); + + if (ok == FALSE) + return; + + g_at_chat_suspend(modem); + g_at_ppp_resume(ppp); +} + +static void ppp_suspend_ato0(gpointer user_data) +{ + g_at_chat_resume(modem); + g_at_chat_send(modem, "ATO0", none_prefix, resume_ppp, NULL, NULL); +} + static gboolean signal_cb(GIOChannel *channel, GIOCondition cond, gpointer data) { static int terminated = 0; @@ -120,6 +154,20 @@ static gboolean signal_cb(GIOChannel *channel, GIOCondition cond, gpointer data) terminated++; break; + case SIGUSR1: + if (ppp == NULL) + break; + + g_at_ppp_set_suspend_function(ppp, ppp_suspend_ato0, NULL); + g_at_ppp_suspend(ppp); + break; + case SIGUSR2: + if (ppp == NULL) + break; + + g_at_ppp_set_suspend_function(ppp, ppp_suspend_ath0, NULL); + g_at_ppp_suspend(ppp); + break; default: break; } @@ -689,6 +737,7 @@ int main(int argc, char **argv) sigemptyset(&mask); sigaddset(&mask, SIGTERM); sigaddset(&mask, SIGINT); + sigaddset(&mask, SIGUSR1); sigaddset(&mask, SIGUSR2); sigaddset(&mask, SIGPIPE); |