/*-------------------------------------------------------------------------
	SunClock

	Amiga version by Mark Waggoner, 
	waggoner@ichips.intel.com or wagnell@PDaXcess.techbook.com
	December 1991

	Timer.c
	Functions for dealing with the timer device
-------------------------------------------------------------------------*/
#include <functions.h>
#include <devices/timer.h>

extern struct MsgPort		*Timer_Port;
extern struct timerequest	Time_Request;
extern	ULONG				TimerMask;

#define IOR				(struct IORequest *)

/*************** Close the message port and the timer device **************/
void
CloseTimer(void) {
	if (Time_Request.tr_node.io_Message.mn_ReplyPort) {
		AbortIO(IOR &Time_Request);
		WaitIO(IOR &Time_Request);
		CloseDevice(IOR &Time_Request);
		Time_Request.tr_node.io_Message.mn_ReplyPort = NULL;
	}
	if (Timer_Port)     DeletePort(Timer_Port);
	Timer_Port = NULL;
}

/***************** Opens a message port and the timer device **************/
int
OpenTimer(ULONG sec,ULONG micro) {

	if ((Timer_Port = CreatePort(NULL,0)) == NULL)
		return 0;
	if (OpenDevice(TIMERNAME,UNIT_VBLANK,IOR &Time_Request,NULL) != NULL) {
		DeletePort(Timer_Port);
		Timer_Port = NULL;
		return 0;
	}

	Time_Request.tr_node.io_Message.mn_ReplyPort	= Timer_Port;
	Time_Request.tr_node.io_Command             	= TR_ADDREQUEST;
	Time_Request.tr_node.io_Flags               	= NULL;
	Time_Request.tr_node.io_Error               	= NULL;
	Time_Request.tr_time.tv_secs					= sec;
	Time_Request.tr_time.tv_micro					= micro; 
	SendIO(IOR &Time_Request);
	TimerMask  = 1L<<Timer_Port->mp_SigBit;
	return 1;
}
/************************** end of OpenTimer *******************************/

/***************** Sends another request to the timer if necessary ********/
void
ResetTimeReq (ULONG sec,ULONG micro) 
{
	if (GetMsg(Timer_Port)) {
		Time_Request.tr_time.tv_secs = sec;
		Time_Request.tr_time.tv_micro = micro;
		SendIO(IOR &Time_Request);
	}
}

/***************** Abort the current Timer request **************/
void
AbortTimer(void)
{
	AbortIO(IOR &Time_Request);
}
