void producer_task (u_long a0, u_long a1, u_long a2, u_long a3) { u_long err, tmid, events, msg[4]; int next_msg = 0; u_long qid = a0; const char *s; err = tm_evevery(PRODUCER_TRIG,PERIODIC_EVENT,&tmid); if (err != SUCCESS) xnpod_fatal("tm_evevery() failed, errno %lu",err); for (;;) { err = ev_receive(PERIODIC_EVENT,EV_ANY,0,&events); if (err != SUCCESS) xnpod_fatal("ev_receive() failed, errno %lu",err); s = satch_s_tunes[next_msg++]; next_msg %= (sizeof(satch_s_tunes) / sizeof(satch_s_tunes[0])); msg[0] = (u_long)s; msg[1] = 0x0; msg[2] = 0x0; msg[3] = 0x0; err = q_send(qid,msg); if (err != SUCCESS) xnpod_fatal("q_send() failed, errno %lu",err); } }
static void task(u_long a0, u_long a1, u_long a2, u_long a3) { u_long events; int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 1); ret = tm_evafter(200, 0x1, &timer_id); traceobj_assert(&trobj, ret == SUCCESS); traceobj_mark(&trobj, 2); ret = ev_receive(0x3, EV_WAIT|EV_ALL, 300, &events); traceobj_assert(&trobj, ret == ERR_TIMEOUT); traceobj_mark(&trobj, 3); ret = ev_receive(0x2, EV_NOWAIT|EV_ANY, 0, &events); traceobj_assert(&trobj, ret == ERR_NOEVS); traceobj_mark(&trobj, 4); events = 0; ret = ev_receive(0x1, EV_NOWAIT|EV_ALL, 0, &events); traceobj_assert(&trobj, ret == SUCCESS && events == 0x1); traceobj_mark(&trobj, 5); events = 0; ret = ev_receive(0x1, EV_WAIT|EV_ALL, 400, &events); traceobj_assert(&trobj, ret == ERR_TIMEOUT); traceobj_mark(&trobj, 6); ret = tm_cancel(timer_id); traceobj_assert(&trobj, ret == ERR_BADTMID); traceobj_exit(&trobj); }