2 Copyright � 1995-2007, The AROS Development Team. All rights reserved.
5 Desc: TimeDelay() - wait a specified time.
10 #include <exec/types.h>
11 #include <aros/asmcall.h>
12 #include <devices/timer.h>
13 #include <exec/tasks.h>
14 #include <proto/exec.h>
16 /*****************************************************************************
27 TimeDelay() waits for the specified period of time before returning
31 Unit - The timer.device unit to use for this command.
32 Seconds - The number of seconds to wait.
33 MicroSeconds - The number of microseconds to wait.
36 Zero if everything went ok, non-zero if there was a problem.
39 If this function fails, the most likely reasons are:
40 - invalid timer.device unit numbers
42 This function uses the SIGF_SINGLE signal, strange things can
43 happen if you are waiting on this signal when you call this
44 function. Basically: Don't use it and call this function.
51 timer.device/TR_ADDREQUEST
57 ******************************************************************************/
59 struct timerequest tr
;
63 /* Create a message port */
64 if ((mp
= CreateMsgPort()) != NULL
)
66 FreeSignal(mp
->mp_SigBit
);
67 mp
->mp_SigBit
= SIGB_SINGLE
;
69 tr
.tr_node
.io_Message
.mn_Node
.ln_Type
= NT_MESSAGE
;
70 tr
.tr_node
.io_Message
.mn_Node
.ln_Pri
= 0;
71 tr
.tr_node
.io_Message
.mn_Node
.ln_Name
= NULL
;
72 tr
.tr_node
.io_Message
.mn_ReplyPort
= mp
;
73 tr
.tr_node
.io_Message
.mn_Length
= sizeof(struct timerequest
);
75 SetSignal(0, SIGF_SINGLE
);
77 if(OpenDevice("timer.device", Unit
, (struct IORequest
*)&tr
, 0) == 0)
79 tr
.tr_node
.io_Command
= TR_ADDREQUEST
;
80 tr
.tr_node
.io_Flags
= 0;
81 tr
.tr_time
.tv_secs
= Seconds
;
82 tr
.tr_time
.tv_micro
= MicroSeconds
;
84 DoIO((struct IORequest
*)&tr
);
86 CloseDevice((struct IORequest
*)&tr
);