Esempio n. 1
0
File: rtmain.c Progetto: ArcEye/RTAI
int rtRegisterComediDataIn( int ID , void *comdev )
{
	int i;
	int n_datain;


	rt_sched_lock();
	n_datain = N_DATAIN++;
	rt_sched_unlock();

	if( n_datain >= MAX_COMEDI_COMDEV ){
		fprintf(stderr,"Error: ComediDataIn exceed %d \n",MAX_COMEDI_COMDEV);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: ComediDataIn ID must be positive\n");

	for (i = 0; i < MAX_COMEDI_COMDEV; i++) {
		if (ComediDataIn[i].ID == ID){
			fprintf(stderr,"Warning: two or more ComediDataIn have the same ID(%d)\n",ID);
		}
	}

	ComediDataIn[n_datain].ID = ID;
	ComediDataIn[n_datain].comdev = comdev;

	return 0;
}
Esempio n. 2
0
File: rtmain.c Progetto: ArcEye/RTAI
int rtRegisterComediDioOut( int ID , void *comdev )
{
	int i;
	int n_dioout;


	rt_sched_lock();
	n_dioout = N_DIOOUT++;
	rt_sched_unlock();

	if( n_dioout >= MAX_COMEDI_COMDEV ){
		fprintf(stderr,"Error: ComediDioOut exceed %d \n",MAX_COMEDI_COMDEV);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: ComediDioOut ID must be positive\n");

	for (i = 0; i < MAX_COMEDI_COMDEV; i++) {
		if (ComediDioOut[i].ID == ID){
			fprintf(stderr,"Warning: two or more ComediDioOut have the same ID(%d)\n",ID);
		}
	}

	ComediDioOut[n_dioout].ID = ID;
	ComediDioOut[n_dioout].comdev = comdev;

	return 0;
}
Esempio n. 3
0
File: rtmain.c Progetto: ArcEye/RTAI
int rtRegisterMeter(const char *name, int n, int ID )
{
	int i;
	int nmeter;


	rt_sched_lock();
	nmeter = NMETERS++;
	rt_sched_unlock();

	if( nmeter >= MAX_METERS ){
		fprintf(stderr,"Error: Meters exceed %d \n",MAX_METERS);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: meters ID must be positive\n");

	for (i = 0; i < MAX_METERS; i++) {
		if (rtaiMeter[i].ID == ID)
			fprintf(stderr,"Warning: two or more meters have the same ID(%d)\n",ID);
	}

	sprintf(rtaiMeter[nmeter].MBXname, "%s%d", TargetMeterMbxID, nmeter);
	rtaiMeter[nmeter].ntraces = n;
	rtaiMeter[nmeter].ID = ID;
	rtaiMeter[nmeter].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiMeter[nmeter].MBXname,(MBX_RTAI_METER_SIZE/((n+1)*sizeof(float)))*((n+1)*sizeof(float)),FIFO_Q);
	if(rtaiMeter[nmeter].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiMeter[nmeter].name, name, MAX_NAME_SIZE);

	return 0;
}
Esempio n. 4
0
File: rtmain.c Progetto: ArcEye/RTAI
int rtRegisterLed(const char *name, int n, int ID )
{
	int i;
	int nled;


	rt_sched_lock();
	nled = NLEDS++;
	rt_sched_unlock();

	if( nled >= MAX_LEDS ){
		fprintf(stderr,"Error: Leds exceed %d \n",MAX_LEDS);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: leds ID must be positive\n");

	for (i = 0; i < MAX_LEDS; i++) {
		if (rtaiLed[i].ID == ID)
			fprintf(stderr,"Warning: two or more leds have the same ID(%d)\n",ID);
	}

	sprintf(rtaiLed[nled].MBXname, "%s%d", TargetLedMbxID, nled);
	rtaiLed[nled].nleds= n;
	rtaiLed[nled].ID = ID;
	rtaiLed[nled].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiLed[nled].MBXname,(MBX_RTAI_LED_SIZE/((n+1)*sizeof(float)))*((n+1)*sizeof(float)),FIFO_Q);
	if(rtaiLed[nled].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiLed[nled].name, name, MAX_NAME_SIZE);

	return 0;
}
Esempio n. 5
0
File: rtmain.c Progetto: ArcEye/RTAI
int rtRegisterScope(const char *name, int n, int ID )
{
	int i;
	int nscope;


	rt_sched_lock();
	nscope = NSCOPE++;
	rt_sched_unlock();

	if( nscope>= MAX_SCOPES ){
		fprintf(stderr,"Error: Scopes exceed %d \n",MAX_SCOPES);
		return -1;
	}
	if ( ID <= 0  )
		fprintf(stderr,"Warning: scopes ID must be positive\n");

	for (i = 0; i < MAX_SCOPES; i++) {
		if (rtaiScope[i].ID == ID)
			fprintf(stderr,"Warning: two or more scopes have the same ID(%d)\n",ID);
	}

	sprintf(rtaiScope[nscope].MBXname, "%s%d", TargetMbxID, nscope);
	rtaiScope[nscope].ntraces = n;
	rtaiScope[nscope].ID = ID;
	rtaiScope[nscope].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiScope[nscope].MBXname,(MBX_RTAI_SCOPE_SIZE/((n+1)*sizeof(float)))*((n+1)*sizeof(float)),FIFO_Q);
	if(rtaiScope[nscope].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiScope[nscope].name, name, MAX_NAME_SIZE);

	return 0;
}
Esempio n. 6
0
static int rt_timer_tick_ext(int irq, unsigned long data)
{
	int ret = 1;
	cpu_used[NR_RT_CPUS]++;
	if (passed++ < 5) {
		t0 = rdtsc();
	} else {
		t = rdtsc();
		if ((jit = t - t0 - imuldiv(rt_times.periodic_tick, CPU_FREQ, FREQ_8254)) < 0) {
			jit = -jit;
		}
		if (jit > maxj) {
			maxj = jit;
		}
		t0 = t;
	}

	rt_times.tick_time = rt_times.intr_time;
	rt_times.intr_time = rt_times.tick_time + rt_times.periodic_tick;
	rt_set_timer_delay(0);
	if (rt_times.tick_time >= rt_times.linux_time) {
		rt_times.linux_time += rt_times.linux_tick;
		rt_pend_linux_irq(TIMER_8254_IRQ);
		ret = 0;
	} 
rt_sched_lock();
	if (Mode) {
		rt_sem_signal(&sem);
	} else {
		rt_task_resume(&thread);
	}
rt_sched_unlock();
	return ret;
}
Esempio n. 7
0
File: rtmain.c Progetto: ArcEye/RTAI
int rtRegisterLogData(const char *name, int nrow, int ncol, int ID)
{
	int i;
	int nlogs;


	rt_sched_lock();
	nlogs = NLOGS++;
	rt_sched_unlock();

	if( nlogs >= MAX_LOGS ){
		fprintf(stderr,"Error: Logs exceed %d \n",MAX_LOGS);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: logs ID must be positive\n");

	for (i = 0; i < MAX_LOGS; i++) {
		if (rtaiLogData[i].ID == ID)
			fprintf(stderr,"Warning: two or more logs have the same ID(%d)\n",ID);
	}

	sprintf(rtaiLogData[nlogs].MBXname, "%s%d", TargetLogMbxID, nlogs);
	rtaiLogData[nlogs].nrow = nrow;
	rtaiLogData[nlogs].ncol = ncol;
	rtaiLogData[nlogs].ID = ID;
	rtaiLogData[nlogs].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiLogData[nlogs].MBXname,(MBX_RTAI_LOG_SIZE/((ncol*nrow)*sizeof(float)))*((ncol*nrow)*sizeof(float)),FIFO_Q);
	if(rtaiLogData[nlogs].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiLogData[nlogs].name, name, MAX_NAME_SIZE);

	return 0;
}