The modem.conf options for the driver portion of the patch.

Regards,
Ryan

---
 plugins/atgen.c     |   48 ++++++++++++++++++++++++++++++++++++++--
 plugins/modemconf.c |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 103 insertions(+), 4 deletions(-)

diff --git a/plugins/atgen.c b/plugins/atgen.c
index c0fbbb2..db59e36 100644
--- a/plugins/atgen.c
+++ b/plugins/atgen.c
@@ -48,6 +48,24 @@
 #include <ofono/ussd.h>
 #include <ofono/voicecall.h>

+static const char *tty_opts[] =
+  {
+         "Baud",
+         "Read",
+         "Local",
+         "StopBits",
+         "DataBits",
+         "Parity",
+         "XonXoff",
+         "Rtscts",
+         NULL,
+  };
+
+static void unregister_tty_option(gpointer data)
+{
+       g_free(data);
+}
+
 static int atgen_probe(struct ofono_modem *modem)
 {
        return 0;
@@ -68,6 +86,9 @@ static int atgen_enable(struct ofono_modem *modem)
        GIOChannel *channel;
        GAtSyntax *syntax;
        const char *device;
+       const char *value;
+       GHashTable *options;
+       int i = 0;

        DBG("%p", modem);

@@ -75,23 +96,44 @@ static int atgen_enable(struct ofono_modem *modem)
        if (!device)
                return -EINVAL;

-       channel = g_at_tty_open(device, NULL);
-       if (!channel)
+       options = g_hash_table_new_full(g_str_hash, g_str_equal,
+                                       g_free, unregister_tty_option);
+       if (!options)
+               return -ENOMEM;
+
+       while (tty_opts[i]) {
+
+               value = ofono_modem_get_string(modem, tty_opts[i]);
+               if (value) {
+                       g_hash_table_replace(options, g_strdup(tty_opts[i]),
+                                            g_strdup(value));
+               }
+               i++;
+       };
+
+       channel = g_at_tty_open(device, options);
+       if (!channel) {
+               g_hash_table_destroy(options);
                return -EIO;
+       }

        syntax = g_at_syntax_new_gsmv1();
        chat = g_at_chat_new(channel, syntax);
        g_at_syntax_unref(syntax);
        g_io_channel_unref(channel);

-       if (!chat)
+       if (!chat) {
+               g_hash_table_destroy(options);
                return -ENOMEM;
+       }

        if (getenv("OFONO_AT_DEBUG"))
                g_at_chat_set_debug(chat, atgen_debug, NULL);

        ofono_modem_set_data(modem, chat);

+       g_hash_table_destroy(options);
+
        return 0;
 }

diff --git a/plugins/modemconf.c b/plugins/modemconf.c
index 192faa6..6b317e6 100644
--- a/plugins/modemconf.c
+++ b/plugins/modemconf.c
@@ -72,7 +72,7 @@ static int set_address(struct ofono_modem *modem,
 static int set_device(struct ofono_modem *modem,
                                        GKeyFile *keyfile, const char *group)
 {
-       char *device;
+       char *device, *value;

        device = g_key_file_get_string(keyfile, group, "Device", NULL);
        if (!device)
@@ -82,6 +82,63 @@ static int set_device(struct ofono_modem *modem,

        g_free(device);

+       value = g_key_file_get_string(keyfile, group, "Baud", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "Baud", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "Baud", "115200");
+
+       value = g_key_file_get_string(keyfile, group, "Read", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "Read", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "Read", "on");
+
+       value = g_key_file_get_string(keyfile, group, "Local", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "Local", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "Local", "none");
+
+       value = g_key_file_get_string(keyfile, group, "StopBits", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "StopBits", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "StopBits", "1");
+
+       value = g_key_file_get_string(keyfile, group, "DataBits", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "DataBits", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "Databits", "8");
+
+       value = g_key_file_get_string(keyfile, group, "Parity", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "Parity", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "Parity", "none");
+
+       value = g_key_file_get_string(keyfile, group, "XonXoff", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "XonXoff", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "XonXoff", "off");
+
+       value = g_key_file_get_string(keyfile, group, "Rtscts", NULL);
+       if (value) {
+               ofono_modem_set_string(modem, "Rtscts", value);
+               g_free(value);
+       } else
+               ofono_modem_set_string(modem, "Rtscts", "on");
+
+
        return 0;
 }

-- 
1.6.4.GIT
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to