Hi Pablo,

On 05/28/2012 09:14 PM, [email protected] wrote:
From: Pablo Neira Ayuso<[email protected]>

This patch adds a couple of quirks to support Q2403/Q2686.

The existing wavecom driver in tree slightly differs from these
modems. Thus, it doesn't work work with them. We (the osmocom
team) use these Wavecom Q2403/Q2686 modems in our testbed.
---
  drivers/atmodem/sim.c    |    3 ++-
  drivers/atmodem/sms.c    |   27 ++++++++++++++++++++++-----
  drivers/atmodem/vendor.h |    1 +
  3 files changed, 25 insertions(+), 6 deletions(-)


Actually we prefer each atom driver change to be in a separate patch, but I fixed this up for you.

diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c
index 971b0ea..79db63d 100644
--- a/drivers/atmodem/sim.c
+++ b/drivers/atmodem/sim.c
@@ -926,7 +926,8 @@ static void at_cpin_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
                return;
        }

-       if (sd->vendor == OFONO_VENDOR_WAVECOM) {
+       if (sd->vendor == OFONO_VENDOR_WAVECOM ||
+           sd->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) {

Please do not use spaces for indentation, our coding style guidelines can be found in doc/coding-style.txt and explain this quite thoroughly. I went ahead and fixed this up for you.

                /* +CPIN:<pin>  */
                pin_required = final + 7;
        } else {
diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c
index f2dc257..62933f8 100644
--- a/drivers/atmodem/sms.c
+++ b/drivers/atmodem/sms.c
@@ -985,8 +985,11 @@ static gboolean set_cpms(gpointer user_data)
        const char *incoming = storages[data->incoming];
        char buf[128];

-       snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"",
-                       store, store, incoming);
+       if (data->vendor == OFONO_VENDOR_WAVECOM_Q2XXX)
+               snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\"", store);
+       else
+               snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"",
+                               store, store, incoming);

        g_at_chat_send(data->chat, buf, cpms_prefix,
                        at_cpms_set_cb, sms, NULL);
@@ -1038,7 +1041,7 @@ static void at_cpms_query_cb(gboolean ok, GAtResult 
*result,
        gboolean supported = FALSE;

        if (ok) {
-               int mem = 0;
+               int mem = 0, mem_max;
                GAtResultIter iter;
                const char *store;
                gboolean me_supported[3];
@@ -1054,7 +1057,20 @@ static void at_cpms_query_cb(gboolean ok, GAtResult 
*result,
                if (!g_at_result_iter_next(&iter, "+CPMS:"))
                        goto out;

-               for (mem = 0; mem<  3; mem++) {
+               if (data->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) {
+                       /* skip initial `(' */
+                       if (!g_at_result_iter_open_list(&iter))
+                               goto out;
+
+                       /*
+                        * Wavecom Q2 replies: +CPMS: (("SM","BM","SR"),("SM"))
+                        * This reply is broken according to 3GPP TS 07.05.
+                        */
+                       mem_max = 2;
+               } else
+                       mem_max = 3;
+
+               for (mem = 0; mem<  mem_max; mem++) {
                        if (!g_at_result_iter_open_list(&iter))
                                goto out;

@@ -1071,7 +1087,8 @@ static void at_cpms_query_cb(gboolean ok, GAtResult 
*result,
                                goto out;
                }

-               if (!sm_supported[2]&&  !me_supported[2]&&  !mt_supported[2])
+               if (data->vendor != OFONO_VENDOR_WAVECOM_Q2XXX&&
+                   !sm_supported[2]&&  !me_supported[2]&&  !mt_supported[2])

Same as above.

                        goto out;

                if (sm_supported[0]&&  sm_supported[1]) {
diff --git a/drivers/atmodem/vendor.h b/drivers/atmodem/vendor.h
index 25c09f6..80aed3e 100644
--- a/drivers/atmodem/vendor.h
+++ b/drivers/atmodem/vendor.h
@@ -40,4 +40,5 @@ enum ofono_vendor {
        OFONO_VENDOR_SAMSUNG,
        OFONO_VENDOR_SIMCOM,
        OFONO_VENDOR_ICERA,
+       OFONO_VENDOR_WAVECOM_Q2XXX,
  };

I broke up the patch into 3 and amended the aforementioned areas. These have been pushed, thanks.

Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to