---
 gatchat/gatserver.c |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index 06ea912..80e6d45 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -233,6 +233,53 @@ void g_at_server_send_info_text(GAtServer *server, GSList 
*text)
        send_common(server, buf, len);
 }
 
+static GAtServerResult at_s3_cb(GAtServerRequestType type, GAtResult *result,
+                                       gpointer user_data)
+{
+       GAtServerResult res = G_AT_SERVER_RESULT_ERROR;
+       GAtServer *server = user_data;
+       GSList *text = NULL;
+       char buf[20];
+
+       if (type == G_AT_SERVER_REQUEST_TYPE_SET) {
+               GAtResultIter iter;
+               int val = 13;
+
+               g_at_result_iter_init(&iter, result);
+
+               if (!g_at_result_iter_next(&iter, "S3="))
+                       goto done;
+
+               if (!g_at_result_iter_next_number(&iter, &val))
+                       goto done;
+
+               if (val < 0 || val > 127)
+                       goto done;
+
+               server->v250.s3 = val;
+
+               res = G_AT_SERVER_RESULT_OK;
+       } else if (type == G_AT_SERVER_REQUEST_TYPE_QUERY) {
+               sprintf(buf, "%03d", server->v250.s3);
+               text = g_slist_append(NULL, buf);
+               g_at_server_send_info_text(server, text);
+
+               res = G_AT_SERVER_RESULT_OK;
+       } else if (type == G_AT_SERVER_REQUEST_TYPE_SUPPORT) {
+               sprintf(buf, "S3: (0-127)");
+               text = g_slist_append(NULL, buf);
+               g_at_server_send_info_text(server, text);
+
+               res = G_AT_SERVER_RESULT_OK;
+       }
+
+       if (text)
+               g_slist_free(text);
+
+done:
+       return res;
+}
+
 static inline gboolean is_extended_command_prefix(const char c)
 {
        switch (c) {
@@ -889,6 +936,11 @@ static void at_notify_node_destroy(gpointer data)
        g_free(node);
 }
 
+static void basic_command_register(GAtServer *server)
+{
+       g_at_server_register(server, "S3", at_s3_cb, server, NULL);
+}
+
 GAtServer *g_at_server_new(GIOChannel *io)
 {
        GAtServer *server;
@@ -927,6 +979,8 @@ GAtServer *g_at_server_new(GIOChannel *io)
                                received_data, server,
                                (GDestroyNotify)read_watcher_destroy_notify);
 
+       basic_command_register(server);
+
        return server;
 
 error:
-- 
1.6.6.1

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to