Hi Denis,
 first of all thanks 4 your reply.

2013/3/26 Denis Kenzior <denkenz@gmail.com>
Hi Marco,


On 03/26/2013 04:07 AM, Freedreamer wrote:
Hi Everybody,

I'm developing a driver for an embedded system which uses a sagem HiloNC
v2 and I really should need your help. It's my will to commit everything
when shall be ready and working.
First of all I will tell you what i did..I created a plugin sagem.c
,added a new Vendor ,  modified makefile & other stuff and seems to work
properly. I started from calypso driver 'cause the modem is based on a
Uart and I needed the MUX over that.
With a very raw/dirty code I was able to use PPP/SMS/net service over
virtual com.. Very good work dude! :)

Now I would like to clean up my code and get a better understanding of
the stack. Unfortunately I saw that functions/modules are not always
commented so I have to ask u a lot of questions (maybe also trivial):

1) AT cmds sent with "g_at_chat_send" are always async , is that right ?
Is there any chance to get them sync ?

There is not, we do not want to encourage any sort of blocking behavior in the daemon.  Remember there are potentially multiple modems being operated on and we do not use threads.
 
Ok get it, i thought there were pthreads somewhere.


2) in enable fnc the modem is powered but The sim is not ready so
sometimes It hangs up...Do I have to to poll the sim status until is
ready  , or the driver will do  that by itself ?

oFono never polls for anything.  It is the driver's responsibility to do that in the best possible way for the hardware.  Also, powering on the modem is separate from the sim being ready.  The general flow is this:

-Enable modem
-Wait for the modem to power on and use ofono_modem_set_powered when that happens successfully / fails.
- Figure out if the SIM is inserted and signal using ofono_sim_inserted_notify.  Do this step only once the SIM is ready to be queried for its PIN status and perform any I/O on SIM files that are always accessible (e.g. ICCID)

 Ok. If Sim not "ready" , sending a signal prematurely could stuck anyhow the stack ? 'cause it should explain a lot of thing..
 


3) could u explain me what should I really do in virtual fnc  set_online
/ post_online ? i tried to stub them but they have not never been called...

oFono has 3 basic states:
- Off
- Radio Off, Sim On
- Radio On, Sim On

set_online turns radio on / off
post_online populates the atoms that are available in radio 'On' state.


 
 This is what i thought but I do not understand why I don't see the trace log I put inside them...usually are called before pre_sim fn? are related to any signal i have to manage/post ?

 
4) unfortunately this modem has a SIM detection URC but it reset itself
every time the status changes... so i should call the disable function
and the enable again in order to have the MUX working... how can i do that?

I'm not following.  Care to elaborate?


 
I've managing vendor URC for sim detection right now but i have problems.For instance if I remove it when ofonod is ready the Hilonc sends an URC to notify sim status changed but after that it reboots itself(2 sec later)... what i did is to notify the stack that the SIM has been removed and modem is powered off . I thought that after calling set_powered fnc the stack should have called my driver virtual disable function in order to properly close the MUX .. but it's not..


 
5) I created and started the MUX as the first thing in enable fnc but is
that right ? sometimes seems that the modem hangs up if just powered up.
Put a delay but don't like it very much as a solution...moreover when I
power up the modem all the URC have been lost 'cause the MUX has not 
been created yet..

That is what we do for most devices with a MUX, put it into MUX state right away after basic initialization.  The devices we have can be queried for their state in addition to URCs, so it works out very well.

 
right now i've been using custom URC in the first power up phase to understand modem status. I manually set them but theoretically I should check the values saved on the modem every power cycle. What I was thinking was to test every time the values saved and enabling them if they were not .After that I should call an AT+cfun=1,1 in order to reset the modem and force it to send me again the needed URCs . What do u think ? 
 
Thanks again
Marco 

Regards,
-Denis