summaryrefslogtreecommitdiffstats
path: root/gatchat/gatserver.c
diff options
context:
space:
mode:
authorOlivier Guiter <olivier.guiter@linux.intel.com>2011-03-24 11:03:14 +0100
committerDenis Kenzior <denkenz@gmail.com>2011-03-24 13:27:13 -0500
commit155cf8f9c45856a8dc8597f90806c5a8b3e30351 (patch)
tree47e88d65e4c7a4179bba82b61484854e40211269 /gatchat/gatserver.c
parent6e6aebf12b98b43752888576ef0ab8ff4d834d3e (diff)
downloadofono-155cf8f9c45856a8dc8597f90806c5a8b3e30351.tar.bz2
gatserver: add AT&F command
Diffstat (limited to 'gatchat/gatserver.c')
-rw-r--r--gatchat/gatserver.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index 57cc58ef..8266ead5 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -274,7 +274,8 @@ static gboolean get_result_value(GAtServer *server, GAtResult *result,
if (val < min || val > max)
return FALSE;
- *value = val;
+ if (value)
+ *value = val;
return TRUE;
}
@@ -464,10 +465,33 @@ static void at_c108_cb(GAtServer *server, GAtServerRequestType type,
at_template_cb(type, result, server, &server->v250.c108, "&D", 0, 2, 2);
}
-static void at_z_cb(GAtServer *server, GAtServerRequestType type,
+static void at_f_cb(GAtServer *server, GAtServerRequestType type,
GAtResult *result, gpointer user_data)
{
+ switch (type) {
+ case G_AT_SERVER_REQUEST_TYPE_SET:
+ if (!get_result_value(server, result, 0, 0, NULL)) {
+ g_at_server_send_final(server,
+ G_AT_SERVER_RESULT_ERROR);
+ return;
+ }
+ /* intentional fallback here */
+ case G_AT_SERVER_REQUEST_TYPE_COMMAND_ONLY:
+ /* default behavior on AT&F same as ATZ */
+ v250_settings_create(&server->v250);
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
+ break;
+
+ default:
+ g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
+ break;
+ }
+}
+
+static void at_z_cb(GAtServer *server, GAtServerRequestType type,
+ GAtResult *result, gpointer user_data)
+{
switch (type) {
case G_AT_SERVER_REQUEST_TYPE_COMMAND_ONLY:
v250_settings_create(&server->v250);
@@ -1134,6 +1158,7 @@ static void basic_command_register(GAtServer *server)
g_at_server_register(server, "&C", at_c109_cb, NULL, NULL);
g_at_server_register(server, "&D", at_c108_cb, NULL, NULL);
g_at_server_register(server, "Z", at_z_cb, NULL, NULL);
+ g_at_server_register(server, "&F", at_f_cb, NULL, NULL);
}
GAtServer *g_at_server_new(GIOChannel *io)