Пример #1
0
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);
	}
}
Пример #2
0
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);
}