From: Guillaume Zajac <guillaume.zajac@linux.intel.com>
To: ofono@ofono.org
Subject: Re: The way to install proper driver for 3G dongle in oFono
Date: Thu, 05 Jan 2012 17:17:48 +0100 [thread overview]
Message-ID: <4F05CD2C.3010609@linux.intel.com> (raw)
In-Reply-To: <1325760266.6454.67.camel@aeonflux>
[-- Attachment #1: Type: text/plain, Size: 9836 bytes --]
Hi Marcel,
>>>>>>>>>>>>>> and what about the case when the SIM card is present, but PIN locked?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> According to the result, it might be interesting to send ATI when the
>>>>>>>>>>>>>>> constructor plugin is probe by oFono.
>>>>>>>>>>>>>>> Thus with +GCAP info we can decide which driver to use.
>>>>>>>>>>>>>> Is sending +GCAP after ATI really a standard? Have we tried anything
>>>>>>>>>>>>>> else besides Huawei or ZTE?
>>>>>>>>>>>>> I tried with more dongles from different vendors, as attached table.
>>>>>>>>>>>>> The scenarios include:
>>>>>>>>>>>>> With valid sim card, sim card PIN locked, no sim card, sim card locked.
>>>>>>>>>>>>> N(ROM) in table indicates the SIM in ROM already.
>>>>>>>>>>>>> ATI command can always return GCAP content in all tests.
>>>>>>>>>>>> and what about other manufactures other than Huawei, ZTE and SpeedUp?
>>>>>>>>>>>> What about Sierra, Ericsson etc.?
>>>>>>>>>>> Just checked Dell 5530 with Ericsson module,
>>>>>>>>>>> With SIM card or not, at+gcap can return +GCAP:+CGSM, +DS
>>>>>>>>>>> But the ATI only returns: D5530
>>>>>>>>>> I think it is clear that we need to do our homework here and properly
>>>>>>>>>> document the different manufacturers. Someone sending patches for our
>>>>>>>>>> doc/ directory?
>>>>>>>>> There're many vendors of 3G dongle..
>>>>>>>>> Huawei, ZTE (they share 70%+ of global market), Longcheer, Haier, Sentar, Viton, D-link, SCV, BandRich, Strongrising.. (more than 30 vendors in China)
>>>>>>>>> Sierra, Sony-Ericsson, Option, Novatel, Alcatel, Samsung, LG, AnyData, C-motech, Micromax...
>>>>>>>>> We can try with them step by step, but can we work out the 2 biggest firstly?
>>>>>>>>> Looks ATI command can work for both Huawei and ZTE dongles.
>>>>>>>>>
>>>>>>>> I agree here, the work to be done over all manufacturers will be
>>>>>>>> fastidious and might require a lot of dongles that we don't have currently.
>>>>>>>> Maybe we could do as Ying An proposed as we are sure ATI works for
>>>>>>>> Huawei and ZTE (at least the ones we have).
>>>>>>>> However, conerning ZTE I haven't seen any CDMA dongle for the moment.
>>>>>>>>
>>>>>>>>>>>>>> Also you do realize that the GAtChat object and thus the file descriptor
>>>>>>>>>>>>>> is owned by the modem plugin. The plugin itself is the only one that
>>>>>>>>>>>>>> should do any kind of IO.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> So if we require to run ATI first to identify if we are GSM or CDMA,
>>>>>>>>>>>>>> then this is a per modem manufacture specific detail. And we rather add
>>>>>>>>>>>>>> a helper function like we did for CPIN polling that makes this easier.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> In current code the 'driver' is hardcoded by comparing with vendor_list[].
>>>>>>>>>>>>> So if it possible to break the step into several:
>>>>>>>>>>>>> vendor_list[] in udevng just cares about vendor - by comparing vendor ID
>>>>>>>>>> only,
>>>>>>>>>>>>> and add all possible drivers according to that vendor - (for example add
>>>>>>>>>>>>> WCDMA, CDMA2k, TDSCDMA, LTE ...drivers if Huawei dongle is plugged
>>>>>>>>>> in),
>>>>>>>>>>>>> and the probe interface in each driver does real probe work as to issue
>>>>>>>>>>>>> ATI command to ensure only correct driver will be loaded?
>>>>>>>>>>>> As I said before, the only time IO can be started is when the ->enable()
>>>>>>>>>>>> callback of the modem plugin is called. Not a second earlier.
>>>>>>>>>>> But if done after enable() called, from semantic aspect the correct driver has
>>>>>>>>>> been
>>>>>>>>>>> chosen. Indeed the probe() interface in each driver is not doing something to
>>>>>>>>>> probe,
>>>>>>>>>>> then can the work be done in probe()? As set CFUN=1 then doing some dongle
>>>>>>>>>> vendor
>>>>>>>>>>> specific work as query model or network mode by ATI, AT+GCAP command,
>>>>>>>>>> etc..? After
>>>>>>>>>>> that disable dongle when quit probe()?
>>>>>>>>>> The probe() callback is for accepting the driver and allocating required
>>>>>>>>>> local data structures. It is not for IO. And as you can see it has no
>>>>>>>>>> callback handling like enable() with set_powered().
>>>>>>>>>>
>>>>>>>>>> As I said before, no AT commands before enable() has been called. That
>>>>>>>>>> is how it is suppose to be. We are not changing this.
>>>>>>>> First, ATI command is working without sending AT+CFUN=1, we could keep
>>>>>>>> CFUN=1 into enable() as we do some vendor/modem type specific job there.
>>>>>>>>
>>>>>>>> Then vendor plugin can be chosen using udevng using Vendor ID, however
>>>>>>>> driver type (CDMA/GSM) can't lie on the Product ID. So it will be hard
>>>>>>>> to chose the right vendor plugin with right type.
>>>>>>>> And if we can't send AT command before enable() time we will face to bag
>>>>>>>> end e.g. :
>>>>>>>> For huawei plugin we send GSM specific AT command (AT^RFSWITCH) during
>>>>>>>> the enable() time.
>>>>>>>> We are also querying the sim state using polling mechanism that might
>>>>>>>> fail for CDMA modems that is not using SIM.
>>>>>>>> What would you suggest here?
>>>>>>> as I said before, no AT commands before ->enable() callback from the
>>>>>>> core.
>>>>>>>
>>>>>>> The callback ->probe() is for accepting the modem driver binding and
>>>>>>> allocating modem specific data memory. The callback ->remove() is for
>>>>>>> cleanup.
>>>>>>>
>>>>>>> The callbacks ->enable(), ->disable() and ->set_online() are the only IO
>>>>>>> entry points for every modem driver. And we need to keep it like this.
>>>>>> Ok, so I suggest to do the ATI at the very beginning of ->enable() callback.
>>>>> the first command has to be always ATE0 +CMEE=1 since otherwise you a)
>>>>> can not use the permissive syntax parser and b) your error values will
>>>>> be useless.
>>>>>
>>>>> But yes, after that it is fine to send ATI.
>>>>>
>>>> Ok
>>>>
>>>>>> Then depending on the ATI answer:
>>>>>> - tag the huawei modem data with GSM / CDMA type.
>>>>>> - send the GSM / CDMA specific AT commands followed by AT+CFUN=1.
>>>>> What different commands depending on GSM or CDMA do you actually have?
>>>>>
>>>>> The AT^RFSWITCH=? is exactly designed to handle if that command is
>>>>> supported or not. There are plenty of GSM versions of the Huawei that do
>>>>> not support AT^RFSWITCH. You do need to know if this is supported or
>>>>> not.
>>>> I see, so we can send AT^RFSWITCH for both type. If it is not supported,
>>>> it will be ignored using terminator and then use
>>>> default AT+CFUN=5.
>>>>
>>>>> Also we do not send AT+CFUN=1 in ->enable() callback. We bring the modem
>>>>> into offline mode. The only time you send AT+CFUN=1 is if you have
>>>>> hardware that does not support online/offline distinction. So if this is
>>>>> true for Huawei CDMA modems, then the obvious questions is why that is
>>>>> the case? Or is this a bug with our CDMA support not supporting offline
>>>>> mode.
>>>>>
>>>> For the moment, CDMA modems are not using ->set_online() callback (it is
>>>> automatically set online into modem.c).
>>>> We will have to make some test to check AT+CFUN=5 is working on CDMA modems.
>>> The Huawei GSM support is using ->set_online() callback. And so this
>>> means that you need it also for CDMA support. Otherwise you are back at
>>> square one.
>>>
>>> Actually you need to test the full CDMA support and if it can properly
>>> handle ->set_online() support. If not, then this needs fixing.
>>>
>>> Also I am still not seeing proper support for CDMA SIM atom. We need to
>>> stop hacking around here. The core functionality needs to be implemented
>>> first. Without it, the modem plugins can not function properly.
>>>
>>> So why are we wasting time with modem details here. If I remember
>>> correctly, Denis and I made it pretty clear that SIM atom and network
>>> registration atom is a fundamental requirement for CDMA support.
>> I agree we need SIM support for CDMA modem.
>> However we have no info about AT commands to manage the SIM and its
>> file system from the vendor.
>> Every CDMA modems are Qualcomm based and their drivers are not open-sourced.
>> Unless you have some specifications concerning CDMA drivers I don't
>> think we will be able to manage completely any SIM atom for CDMA modems.
> you need to make sure that the core modem state logic with transitions
> from pre_sim, post_sim and post_online in conjunction with set_online is
> working smoothly for CDMA. And of course not breaking GSM.
>
> I do not see how this can be done properly without having SIM atom
> support in place.
We can have 3 states in CDMA (specified in Huawei documentation):
1: Valid UIM card status
240: ROMSIM version
255: UIM card not exist
Currently the problem is we have some CDMA modems with ROMSIM e.g.
embedded SIM.
When we send AT+CPIN? it answers CME ERROR Sim not inserted.
I discussed with Denis about this issue and he recommended me not to
create SIM atom when status is ROMSIM version.
However we have some other dongles with UIM whose state is 1: Valid UIM
card status.
They support some AT commands from "atmodem" drivers (AT+CPIN and
AT+CIMI only) but none to read the file system.
All the dongles we have let are not PIN locked:
AT+CPIN? answer is +CPIN: READY.
If you want a SIM atom it could be used for PIN management only but as I
told you I have met none for the moment.
Concerning ->set_online() callback, it can work without SIM atom but we
have to modify it into the unified plugin.
Even with SIM atom for CDMA modems, we will never be able to read the
UIM file system (AT+CRSM is not supported).
We can only expect some support from manufacturers to support UIM file
system management.
Kind regards,
Guillaume
[-- Attachment #2: attachment.html --]
[-- Type: text/html, Size: 13433 bytes --]
prev parent reply other threads:[~2012-01-05 16:17 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-20 8:44 The way to install proper driver for 3G dongle in oFono Deng, Ying An
2011-12-20 11:02 ` Guillaume Zajac
2011-12-20 16:01 ` Guillaume Zajac
2011-12-20 16:41 ` Marcel Holtmann
2011-12-21 7:34 ` Deng, Ying An
2011-12-21 16:05 ` Marcel Holtmann
2011-12-22 9:48 ` Guillaume Zajac
2011-12-22 17:09 ` Marcel Holtmann
2011-12-23 3:18 ` Deng, Ying An
2011-12-23 3:26 ` Marcel Holtmann
2011-12-23 4:01 ` Deng, Ying An
2011-12-23 4:44 ` Marcel Holtmann
2011-12-23 14:03 ` Deng, Ying An
2012-01-04 9:57 ` Guillaume Zajac
2012-01-04 15:29 ` Marcel Holtmann
2012-01-04 15:48 ` Guillaume Zajac
2012-01-04 16:12 ` Marcel Holtmann
2012-01-04 16:31 ` Guillaume Zajac
2012-01-04 16:48 ` Marcel Holtmann
2012-01-05 8:59 ` Guillaume Zajac
2012-01-05 10:44 ` Marcel Holtmann
2012-01-05 16:17 ` Guillaume Zajac [this message]
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=4F05CD2C.3010609@linux.intel.com \
--to=guillaume.zajac@linux.intel.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.