Beispiel #1
0
/**
 * \fn void Timer_CallTimers()
 */
void Timer_CallTimers()
{
	// Tick the random number generator every time timers are checked
	rand();

	SHORTLOCK(&gTimers_ListLock);
	LOG("gTimers = %p (%lli ms)", gTimers, (gTimers ? gTimers->FiresAfter : 0));
	while( gTimers && gTimers->FiresAfter < now() )
	{
		ASSERT( gTimers != gTimers->Next );	
		// Get timer from list
		tTimer	*timer = gTimers;
		gTimers = gTimers->Next;
	
		// Perform event
		if( timer->Callback ) {
			LOG("Callback schedule %p", timer);
			Workqueue_AddWork(&gTimers_CallbackQueue, timer);
		}
		else {
			LOG("Event fire %p", timer);
			ASSERT( timer->Argument );
			Threads_PostEvent(timer->Argument, THREAD_EVENT_TIMER);
			timer->bActive = 0;
		}
	}
	SHORTREL(&gTimers_ListLock);
}
Beispiel #2
0
void USB_PortCtl_BeginReset(tUSBHub *Hub, int Port)
{
	LOG("Starting %p %i", Hub, Port);
	// Set status field in hub structure
	Hub->Ports[Port].Status = 1;
	Hub->Ports[Port].PortNum = Port;
	// Add to the work queue
	Workqueue_AddWork(&gUSB_PortCtl_WorkQueue, &Hub->Ports[Port]);
}