Ejemplo n.º 1
0
static void sys_service_tick_handler()
{
	unsigned char deviceId;
	unsigned long flags;
	vpapi_event *pEvent;
#if !defined(ZARLINK_SLIC_VE792)
	bool eventStatus;
#endif
	sigset_t mask;


	pthread_mutex_lock(&vp_lock);

	for(deviceId = 0; deviceId < MAX_DEVICES; deviceId++) {

		

		if(GET_DEV_STATUS(deviceId) == 0)
			continue;

		/* Check for free resources */
		if(event_count >= MAX_EVENT_QUEUE_SIZE)
			goto timer_exit;



#if !defined(ZARLINK_SLIC_VE792)
		if(VP_STATUS_SUCCESS == VpApiTick(&pDevCtx[deviceId], &eventStatus)) {
			if(eventStatus == TRUE) {
#endif
				pEvent = &event_queue[next_event];

				while(VpGetEvent(&pDevCtx[deviceId], &pEvent->vp_event) == TRUE) {

					if(pEvent->vp_event.status != VP_STATUS_SUCCESS) {
						printf("%s: bad status(%d)\n", __func__, pEvent->vp_event.status);
						break;
					}

					if(pEvent->vp_event.eventId == 0)  {
						printf("%s: warning, empty event\n", __func__);
						break;
					}
					next_event++;
					if(next_event == MAX_EVENT_QUEUE_SIZE) {
						next_event = 0;
					}

					event_count++;
					if(pEvent->valid == 0) {
						pEvent->valid = 1;
					}
					else {
						printf("%s: error, event(%u) was overrided\n", __func__, next_event);
						break;
					}

					pEvent = &event_queue[next_event];
				}
#if !defined(ZARLINK_SLIC_VE792)
			}
		}
#endif
	}

	pthread_mutex_unlock(&vp_lock);

	return;

timer_exit:
	return;
}
Ejemplo n.º 2
0
static void vpapi_tick_handler(unsigned long data)
{
	u8 deviceId;
	unsigned long flags;
	vpapi_event *pEvent;
#if !defined(CONFIG_ZARLINK_SLIC_VE792)
	bool eventStatus;
#endif

	/* Check if events are already active and not processing IOCTL */
	if((atomic_read(&vpapi_init) == 0) || (atomic_read(&vpapi_in_ioctl) == 1))
		goto timer_exit;

	spin_lock_irqsave(&vpapi_lock, flags);

	for(deviceId = 0; deviceId < MAX_DEVICES; deviceId++) {

		if(GET_DEV_STATUS(deviceId) == 0)
			continue;

		/* Check for free resources */
		if(atomic_read(&event_count) >= MAX_EVENT_QUEUE_SIZE)
			goto timer_exit;

#if !defined(CONFIG_ZARLINK_SLIC_VE792)
		if(VP_STATUS_SUCCESS == VpApiTick(&pDevCtx[deviceId], &eventStatus)) {
			if(eventStatus == TRUE) {
#endif
				pEvent = &event_queue[next_event];
				while(VpGetEvent(&pDevCtx[deviceId], &pEvent->vp_event) == TRUE) {
					if(pEvent->vp_event.status != VP_STATUS_SUCCESS) {
						printk("%s: bad status(%d)\n", __func__, pEvent->vp_event.status);
						break;
					}

					if(pEvent->vp_event.eventId == 0)  {
						printk("%s: warning, empty event\n", __func__);
						break;
					}

					next_event++;
					if(next_event == MAX_EVENT_QUEUE_SIZE) {
						next_event = 0;
					}

					atomic_inc(&event_count);

					if(pEvent->valid == 0) {
						pEvent->valid = 1;
					}
					else {
						printk("%s: error, event(%u) was overrided\n", __func__, next_event);
						break;
					}

					pEvent = &event_queue[next_event];
				}
#if !defined(CONFIG_ZARLINK_SLIC_VE792)
			}
		}
#endif
	}


	spin_unlock_irqrestore(&vpapi_lock, flags);

timer_exit:

	/* Checks if user application should be signaled */
	if(atomic_read(&event_count) > 0) {
		wake_up_interruptible(&vpapi_wait);
	}

	/* Schedule next timer tick */
	vpapi_timer.expires = jiffies + VPAPI_TICK_TIMER_PERIOD;
	add_timer(&vpapi_timer);
}