CDXLPlay added with permission from Fredik Wikstrom.
[AROS-Contrib.git] / MultiMedia / cdxlplay / usleep_aros.c
blob610ffc571e3a097baa9c383ef0587108fd1a48d9
1 #include "cdxlplay.h"
2 #include <exec/exec.h>
3 #include <devices/timer.h>
4 #include <proto/exec.h>
5 #ifdef __AMIGAOS4__
6 #include <inline4/exec.h>
7 #endif
9 static struct MsgPort *timer_mp;
10 static struct timerequest *timer_io;
11 static struct Device *timer_base;
13 int setup_usleep(void) {
14 timer_mp = CreateMsgPort();
15 timer_io = (struct timerequest *)CreateIORequest(timer_mp, sizeof(*timer_io));
16 if (timer_io) {
17 if (!OpenDevice("timer.device", UNIT_MICROHZ, &timer_io->tr_node, 0)) {
18 timer_base = timer_io->tr_node.io_Device;
19 return 1;
22 return 0;
25 void cleanup_usleep(void) {
26 if (timer_base) {
27 CloseDevice(&timer_io->tr_node);
28 timer_base = NULL;
30 DeleteIORequest((struct IORequest *)timer_io);
31 timer_io = NULL;
32 DeleteMsgPort(timer_mp);
33 timer_mp = NULL;
36 int usleep(useconds_t usec) {
37 timer_io->tr_node.io_Command = TR_ADDREQUEST;
38 timer_io->tr_time.tv_sec = usec / 1000000UL;
39 timer_io->tr_time.tv_usec = usec % 1000000UL;
40 return DoIO(&timer_io->tr_node) ? -1 : 0;