diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2010-04-12 16:28:59 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-04-12 16:28:59 -0700 |
commit | a21499ca01f9abe4ec6ede6c131399c724d38a0c (patch) | |
tree | c9a52dd78fae9507a4941d3188ea0a49132fa4f6 /gatchat/test-server.c | |
parent | 4add05f4f021ee21aece4b20057d57fca8b2cdb6 (diff) | |
download | ofono-a21499ca01f9abe4ec6ede6c131399c724d38a0c.tar.bz2 |
Add basic support for emulating AT+CGATT inside AT server
Diffstat (limited to 'gatchat/test-server.c')
-rw-r--r-- | gatchat/test-server.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/gatchat/test-server.c b/gatchat/test-server.c index f36f665b..b57a88bb 100644 --- a/gatchat/test-server.c +++ b/gatchat/test-server.c @@ -53,6 +53,7 @@ static int modem_mode = 0; static int modem_creg = 0; static int modem_cgreg = 0; static int network_status = 4; +static int network_attach = 0; struct sock_server{ int server_sock; @@ -396,6 +397,59 @@ error: g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR); } +static void cgatt_cb(GAtServerRequestType type, GAtResult *cmd, gpointer user) +{ + GAtServer *server = user; + char buf[12]; + + if (modem_mode == 0) { + g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR); + return; + } + + switch (type) { + case G_AT_SERVER_REQUEST_TYPE_SUPPORT: + g_at_server_send_info(server, "+CGATT: (0-1)", TRUE); + g_at_server_send_final(server, G_AT_SERVER_RESULT_OK); + break; + case G_AT_SERVER_REQUEST_TYPE_QUERY: + snprintf(buf, sizeof(buf), "+CGATT: %d", network_attach); + g_at_server_send_info(server, buf, TRUE); + g_at_server_send_final(server, G_AT_SERVER_RESULT_OK); + break; + case G_AT_SERVER_REQUEST_TYPE_SET: + { + GAtResultIter iter; + int mode; + + g_at_result_iter_init(&iter, cmd); + g_at_result_iter_next(&iter, "+CGATT="); + + if (g_at_result_iter_next_number(&iter, &mode) == FALSE) + goto error; + + if (mode != 0 && mode != 1) + goto error; + + if (network_attach == mode) { + g_at_server_send_final(server, G_AT_SERVER_RESULT_OK); + break; + } + + network_attach = mode; + g_timeout_add_seconds(1, send_ok, server); + break; + } + default: + goto error; + }; + + return; + +error: + g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR); +} + static void cimi_cb(GAtServerRequestType type, GAtResult *cmd, gpointer user) { GAtServer *server = user; @@ -579,6 +633,7 @@ static void add_handler(GAtServer *server) g_at_server_register(server, "+COPS", cops_cb, server, NULL); g_at_server_register(server, "+CREG", creg_cb, server, NULL); g_at_server_register(server, "+CGREG", cgreg_cb, server, NULL); + g_at_server_register(server, "+CGATT", cgatt_cb, server, NULL); g_at_server_register(server, "+CIMI", cimi_cb, server, NULL); g_at_server_register(server, "+CSMS", csms_cb, server, NULL); g_at_server_register(server, "+CMGF", cmgf_cb, server, NULL); |