Open Source Telephony
 help / color / mirror / Atom feed
From: Jean-Christian de Rivaz <jc@eclis.ch>
To: ofono@ofono.org
Subject: Re: Some experiments with the SIMCOM SIM5216E modem on a ARM926 board
Date: Thu, 12 Jan 2012 05:08:13 +0100	[thread overview]
Message-ID: <4F0E5CAD.5070703@eclis.ch> (raw)
In-Reply-To: <1326175413.6454.185.camel@aeonflux>

[-- Attachment #1: Type: text/plain, Size: 7137 bytes --]

Hi Marcel,

Thanks for your valuable response. Here is an update of the situation.

>> The modem is connected by the USB and report: vendor=0x05c6
>> product=0x9000. This seem to indicate that it use a Qualcomm chip. It
>> expose 5 serial interfaces, where the 2 and 3 (starting from 0) are for
>> the AT commands. Since the "atgen" driver is no more, I tested it with
>> the "g1" driver. It was only a guess and I would like to know if an
>> other driver is a better choice.
>
> you really want to have a custom modem plugin for this chip. It is
> pretty easy to develop this. Modem plugins are dirt simple to write and
> that is intentional of course :)
>
> I think there was some kind of SIMCOM patch (or similar enough) posted
> on the mailing list some weeks ago.

It's a mystery for me if Simcom do there own software or only use the 
Qualcamm one. The chipset of this modem is the QSC6270 and I expected 
that ofono already have something appropriate. I suspect the "g1" driver 
to be a close match and if fact it work already quite well. Are you 
willing to accept a new modem plugin that is basically a copy of the "g1" ?

The "sim900" patch is still not accepted and, I as far as I understand, 
it don't handle as many feature as the "g1" in the post_sim(). I don't 
known yet if the two products are close enough to be handled by the same 
driver. I have asked Simcom about this question an I hope that there 
will give some indication.

> With USB as transport you really wanna do modem detection via udev. So
> you might wanna get this solved with uclibc.

After some additional work I was getting udev working on the target. But 
understanding how the udev ofono rules should be written for a composite 
device is really hard. I did not found an example on how this should be 
done to set both OFONO_DRIVER _and_ OFONO_LABEL. I was also confused by 
the fact that there is two plugins that handles the udev events: udev 
and udevng.

I finally gave up and used the patch below, without any udev rule. ( I 
use the "g1" driver for now, but I understand that I need to change that 
later. )

diff -ruN ofono/a/plugins/udevng.c ofono/b/plugins/udevng.c
--- ofono/a/plugins/udevng.c	2012-01-07 05:21:37.000000000 +0100
+++ ofono/b/plugins/udevng.c	2012-01-12 01:10:39.000000000 +0100
@@ -595,6 +595,36 @@
  	return TRUE;
  }

+static gboolean setup_g1(struct modem_info *modem)
+{
+	const char *device = NULL;
+	GSList *list;
+
+	DBG("%s", modem->syspath);
+
+	for (list = modem->devices; list; list = list->next) {
+		struct device_info *info = list->data;
+
+		DBG("%s %s %s %s", info->devnode, info->interface,
+						info->number, info->label);
+
+		if (g_strcmp0(info->interface, "255/255/255") == 0 &&
+					g_strcmp0(info->number, "03") == 0) {
+			device = info->devnode;
+			break;
+		}
+	}
+
+	if (device == NULL)
+		return FALSE;
+
+	DBG("device=%s", device);
+
+	ofono_modem_set_string(modem->modem, "Device", device);
+
+	return TRUE;
+}
+
  static struct {
  	const char *name;
  	gboolean (*setup)(struct modem_info *modem);
@@ -616,6 +646,7 @@
  	{ "telit",	setup_telit	},
  	{ "zte",	setup_zte	},
  	{ "samsung",	setup_samsung	},
+	{ "g1",		setup_g1	},
  	{ }
  };

@@ -808,6 +839,7 @@
  	{ "nokia",	"option",	"0421", "0623"	},
  	{ "samsung",	"option",	"04e8", "6889"	},
  	{ "samsung",	"kalmia"			},
+	{ "g1",		"option",	"05c6", "9000"	},
  	{ }
  };

Should I insist with the udev rules, or something like this (but the 
"g1") is ok ?

> For the backtrace() support, I am pretty disappointed that uclibc does
> not support this. It is a fundamental piece that you especially want in
> embedded system. So this is strange to me.
>
> Instead of us working around it, it might be better to get uclibc fixed
> to support this. On the other hand I am open to look at patches to make
> this optional.

I discovered that the last version of uClibc have now the libubactrace. 
So I updated to it. I can propose this really simple patch to assert the 
presence of the backtrace call:

 From 662640e0afb2eb38d896c2673b3afe4c5a280737 Mon Sep 17 00:00:00 2001
From: Jean-Christian de Rivaz <jc@eclis.ch>
Date: Wed, 11 Jan 2012 11:39:22 +0100
Subject: [PATCH] Add autoconfigure rule to search for backtrace().

Add autoconfigure rule to search for backtrace().
On system with the uClibc, it can be into the libubacktrace.

---
  configure.ac |    4 ++++
  1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/configure.ac b/configure.ac
index 4115e34..b07544e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,6 +67,10 @@ AC_CHECK_FUNC(signalfd, dummy=yes,
  AC_CHECK_LIB(dl, dlopen, dummy=yes,
  			AC_MSG_ERROR(dynamic linking loader is required))

+AC_SEARCH_LIBS([backtrace], [execinfo ubacktrace], [], [
+			AC_MSG_ERROR(backtrace support is required)
+])
+
  PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.22, dummy=yes,
  				AC_MSG_ERROR(GLib >= 2.22 is required))
  AC_SUBST(GLIB_CFLAGS)
-- 
1.7.6.3

>> ofonod[1346]:>  AT+CLCC\r
>> ofonod[1346]:<  \r\n+CLCC: 1,1,4,0,0,"0786577442",129\r\n\r\nOK\r\n
>> ofonod[1346]:>  AT+CLCC\r
>> ofonod[1346]:<  \r\n+CME ERROR: unknown\r\n
>> ofonod[1346]: We are polling CLCC and received an error
>> ofonod[1346]: All bets are off for call management
>> ofonod[1346]:<  \r\nMISSED_CALL: 09:34AM 0786577442\r\n
>> After that Ofono seem to be lost and only able to be terminated.
>
> This looks like the voice call handling via AT+CLCC is really broken on
> this modem. So you have a real problem here.
>
> Do have the AT command specification for this modem? Maybe Simcom has a
> vendor specific command for voice call state handling. And you are
> suppose to use that instead.

Simcom have now provided to me a complete documentation of all the AT 
commands supported by this modem. The AT+CLCC command seem to be ok:

+CLCC:<id1>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type>[,<alpha>]]

I can give more details if needed. The +CME ERROR: <err> is listed as a 
possible response of the command. I noticed that the error raise when 
the a call change his state (typically a hangup) at the same time that 
the AT+CLCC is processing. The AT+CLCC command after the call state 
change returns a valid result. Here is an example:

ofonod[28737]: > AT+CLCC\r
ofonod[28737]: < \r\n+CLCC: 1,1,4,0,0,"0786577442",129\r\n\r\nOK\r\n
ofonod[28737]: > AT+CHUP\r
ofonod[28737]: < \r\nOK\r\n
ofonod[28737]: > AT+CLCC\r
ofonod[28737]: < \r\n+CME ERROR: unknown\r\n
ofonod[28737]: We are polling CLCC and received an error
ofonod[28737]: All bets are off for call management
ofonod[28737]: < \r\nMISSED_CALL: 04:11AM 0786577442\r\n
ofonod[28737]: > AT+CLCC\r
ofonod[28737]: < \r\nOK\r\n

Look like a -EINTR on UNIX that require to make a new invocation. Maybe 
we should ignore this error for this modem in this particular case. I 
have contacted the Simcom support to ask why this modem can return a 
"+CME ERROR: unknown" to the AT+CLCC and how we should handle this.

Regards,

Jean-Christian

  reply	other threads:[~2012-01-12  4:08 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-10  3:21 Some experiments with the SIMCOM SIM5216E modem on a ARM926 board Jean-Christian de Rivaz
2012-01-10  6:03 ` Marcel Holtmann
2012-01-12  4:08   ` Jean-Christian de Rivaz [this message]
2012-01-12  5:12     ` Marcel Holtmann
2012-01-13  3:13       ` Jean-Christian de Rivaz
2012-01-13  3:19         ` Jean-Christian de Rivaz
2012-01-13  3:57           ` Marcel Holtmann
2012-01-13  4:39             ` Jean-Christian de Rivaz
2012-01-13  3:51         ` Marcel Holtmann
2012-01-13  4:54           ` Jean-Christian de Rivaz
2012-01-13  6:23           ` Jean-Christian de Rivaz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F0E5CAD.5070703@eclis.ch \
    --to=jc@eclis.ch \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox