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; }
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; }
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; }
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; }
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; }
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; }
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; }