The way other packages handle this is they enqueue the startup event
when their event queue is assigned. This happens automatically when you
call os_eventq_designate(); the last parameter is the event to enqueue
immediately.
Chris
On Sat, Dec 10, 2016 at 11:30:27AM -0800, Sterling Hughes wrote:
> Hi,
>
> I’m looking at using the default eventq (or allowing for it), in a
> library I’m working on. In order to do that, I have a function:
>
> static struct os_eventq *
> sensor_mgr_evq_get(void)
> {
> os_eventq_ensure(&sensor_mgr.mgr_eventq, NULL);
>
> return (sensor_mgr.mgr_eventq);
> }
>
> And this function gets called within my package’s sysinit, as I want
> to schedule a callout to run this function immediately on bootup:
>
> /**
> * Initialize sensor polling callout and set it to fire on boot.
> */
> os_callout_init(&sensor_mgr.mgr_wakeup_callout,
> sensor_mgr_evq_get(),
> sensor_mgr_wakeup_event, NULL);
> os_callout_reset(&sensor_mgr.mgr_wakeup_callout, 0);
>
> The problem is that the default event queue is not setup until after
> sysinit executes, as task setup is later on.
>
> What is the right way to do this? For now, I can move the
> initialization from sysinit and to the main() function at task level,
> however, I don’t think this is how we want to manage initialization
> over time. We probably need some way for a package to have a system
> initialization stage that runs after the OS has started, and the default
> event queue has been set.
>
> Cheers,
>
> Sterling