Tnx again 4 your patience Denis,

2013/3/27 Denis Kenzior <>
Hi Marco,


            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..

If you tell oFono core that the sim is inserted, the first thing it does is read some sim files that are always available.  e.g. ICCID, etc. Then it proceeds to check the PIN.  If the PIN query fails due to a sim busy condition, then yes the init process will stall.  This is considered a bug in the driver.

got it. 

            3) could u explain me what should I really do in virtual fnc
            / 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'

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 ?

enable -> pre_sim, sim_inserted -> post_sim, set_online -> post_online.  Generally you do not call set_online before hitting the post_sim state.

could I don't  implement set_online if I don't need it?


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..

No, if you call ofono_modem_set_powered(modem, FALSE) it assumes that the modem powered off due to an internally generated event (e.g. not oFono's doing).  The driver has to clean up properly in this case.  The driver disable() method is only called on oFono initiated power down requests.

mmh If the modem restarts it's my business to disable and enable again all the driver' stuff , right?


            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 ?

I do not see anything wrong with that strategy.  Just keep in mind that querying things you will be resetting (potentially) anyway is likely a waste of time.  Only query things that are required for the initialization procedure.  For the rest, simply set the setting you want.

done today and it works.