示例#1
0
文件: aocmd.c 项目: cjecho/RTAI
int main(void)
{
	double omega = (2.0*M_PI*SIN_FREQ*SAMP_TIME)/1.0E9;
	RTIME until;
	RT_TASK *task;

	lsampl_t data[NCHAN*2];
	long k, sinewave, retval = 0;

	signal(SIGKILL, endme);
	signal(SIGTERM, endme);

	start_rt_timer(0);
	task = rt_task_init_schmod(nam2num("MYTASK"), 1, 0, 0, SCHED_FIFO, 0xF);
	printf("COMEDI CMD TEST BEGINS: SAMPLING FREQ: %d, RUN TIME: %d.\n", SAMP_FREQ, RUN_TIME);

	if (init_board()) {;
		printf("Board initialization failed.\n");
		return 1;
	}
	do_cmd();

	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_make_hard_real_time();

	until = rt_get_cpu_time_ns() + (long long)RUN_TIME*1000000000;
	for (k = 0; k < SAMP_FREQ*RUN_TIME && !end; k++) {
		sinewave =  (long)(maxdata/4*sin(k*omega));
		data[0] = (lsampl_t)(  sinewave + maxdata/2);
		data[1] = (lsampl_t)(- sinewave + maxdata/2);
		while (rt_comedi_command_data_write(dev, subdev, NCHAN, data) != NCHAN) {
			rt_sleep(nano2count(SAMP_TIME/2));
		}
		if (k == TRIGSAMP) {
			rt_comedi_trigger(dev, subdev);
		}
	}

	while (until > rt_get_cpu_time_ns()) {
		rt_sleep(nano2count(100000));
	}
	comedi_cancel(dev, subdev);
	comedi_close(dev);
	comedi_data_write(dev, subdev, 0, 0, AREF_GROUND, 2048);
	comedi_data_write(dev, subdev, 1, 0, AREF_GROUND, 2048);
	printf("COMEDI TEST ENDS.\n");

	if (retval < 0) {
		printf("rt_comedi_wait_timed overruns: %d\n", abs(retval));
	}

	stop_rt_timer();
	rt_make_soft_real_time();
	rt_task_delete(task);

	return 0;
}
示例#2
0
文件: rmtest.c 项目: ArcEye/RTAI
int main(int argc, char *argv[])
{
	RT_TASK *task;
	lsampl_t data[NCHAN] = { 0 };
	unsigned int val, chan;
	long i;

	comedi_insn insn[NCHAN];
        unsigned int read_chan[NICHAN]  = { 2, 3, 4, 5, 6 };
        unsigned int write_chan[NOCHAN] = { 0, 1 };
	comedi_insnlist ilist = { NCHAN, insn };

	struct sockaddr_in addr;

	signal(SIGKILL, endme);
	signal(SIGTERM, endme);

	start_rt_timer(0);
	task = rt_task_init_schmod(nam2num("MYTASK"), 1, 0, 0, SCHED_FIFO, 0xF);

	daqnode = 0;
#ifdef LOCAL_EXEC
#else
	if (argc == 2 && strstr(argv[1], "DaqNode=")) {
		inet_aton(argv[1] + 8, &addr.sin_addr);
		daqnode = addr.sin_addr.s_addr;
	}
	if (!daqnode) {
		inet_aton("127.0.0.1", &addr.sin_addr);
		daqnode = addr.sin_addr.s_addr;
	}
        while ((daqport = rt_request_port(daqnode)) <= 0 && daqport != -EINVAL);
#endif
	printf("REMOTE COMEDI TEST BEGINS:  NODE = %x, PORT = %d.\n", daqnode, daqport);

	test_init_board();

	RT_comedi_register_callback(daqnode, daqport, dev, subdevai, COMEDI_CB_EOS, NULL, task);
	PRINT("Comedi analog input registered a call back.\n");
	
	test_cmd();

	val = COMEDI_CB_EOS;
	PRINT("COMMAND WREAD TIMED with a %lld (ns) timeout.\n", TIMEOUT);
	RT_comedi_command_data_wread_timed(daqnode, daqport, dev, subdevai, NCHAN, data, TIMEOUT, &val);
	PRINT("COMMAND WREAD TIMED, val = %x.\n", val);
	for (i = 0; i < NCHAN; i++) {
		PRINT("CHAN # %ld, data = %x.\n", i, data[i]);
	}
	RT_comedi_get_driver_name(daqnode, daqport, dev, (char *)data);
	PRINT("GET DRIVER NAME returned %s.\n", (char *)data);
	RT_comedi_command_data_wread(daqnode, daqport, dev, subdevai, NCHAN, data, &val);
	PRINT("COMMAND WREAD, val = %x.\n", val);
	for (i = 0; i < NCHAN; i++) {
		PRINT("CHAN # %ld, data = %x.\n", i, data[i]);
	}
	PRINT("COMMAND WAIT TIMED with a %lld (ns) timeout.\n", TIMEOUT);
	RT_comedi_wait_timed(daqnode, daqport, TIMEOUT, &val);
	PRINT("COMEDI WAIT TIMED, val = %x.\n", val);
	RT_comedi_wait(daqnode, daqport, &val);
	PRINT("COMEDI WAIT, val = %x.\n", val);
	RT_comedi_command_data_read(daqnode, daqport, dev, subdevai, NCHAN, data);
	PRINT("COMMAND READ.\n");
	for (i = 0; i < NCHAN; i++) {
		PRINT("CHAN # %ld, data = %x.\n", i, data[i]);
	}

	PRINT("COMMAND WRITE.\n");
	for (i = 0; i < NCHAN; i++) {
		data[i] = 0xcba + i;
		PRINT("CHAN # %ld, data = %x.\n", i, data[i]);
	}
	rt_comedi_command_data_write(dev, subdevao, NCHAN, data);
	PRINT("COMMAND TRIGGER.\n");
	rt_comedi_trigger(dev, subdevai);

	RT_comedi_data_write(daqnode, daqport, dev, subdevai, 0, 0, AREF_GROUND, 2048);
	PRINT("DATA WRITE: dev = %p, subdev = %u, chan = %u, range = %u, aref = %x, data = %u.\n", dev, subdevai, 0, 0, AREF_GROUND, 2048);
	RT_comedi_data_read(daqnode, daqport, dev, subdevai, 0, 0, AREF_GROUND, data);
	PRINT("DATA READ: dev = %p, subdev = %u, chan = %u, range = %u, aref = %x, data = %x.\n", dev, subdevao, 0, 0, AREF_GROUND, data[0]);
	PRINT("DATA READING DELAYED: dev = %p, subdev = %u, chan = %u, range = %u, aref = %x, data = %x, delay = %u (ns).\n", dev, subdevao, 0, 0, AREF_GROUND, data[0], DATA_READ_DELAY);
	RT_comedi_data_read_delayed(daqnode, daqport, dev, subdevai, 0, 0, AREF_GROUND, data, DATA_READ_DELAY);
	PRINT("DATA READ DELAYED: dev = %p, subdev = %u, chan = %u, range = %u, aref = %x, data = %x.\n", dev, subdevao, 0, 0, AREF_GROUND, data[0]);

	data[0] = 0x77777777;
	data[1] = 0x77777777;
	PRINT("DIO BITFIELD: dev = %p, subdev = %u, write_mask = %x, bits = %x.\n", dev, subdevdg, data[1], data[0]);
	RT_comedi_dio_bitfield(daqnode, daqport, dev, subdevdg, data[1], data);
	PRINT("DIO BITFIELD: dev = %p, subdev = %u, write_mask = %x, bits = %x.\n", dev, subdevdg, data[1], data[0]);

	val = 0x77777777;
	chan = 57;
	PRINT("DIO WRITE: dev = %p, subdev = %u, chan = %u, val= %x.\n", dev, subdevdg, chan, val);
	RT_comedi_dio_write(daqnode, daqport, dev, subdevdg, chan, val);
	PRINT("DIO WRITE: dev = %p, subdev = %u, chan = %u, val= %x.\n", dev, subdevdg, chan, val);

	PRINT("DIO READ: dev = %p, subdev = %u, chan = %u.\n", dev, subdevdg, chan);
	RT_comedi_dio_read(daqnode, daqport, dev, subdevdg, chan, &val);
	PRINT("DIO READ: dev = %p, subdev = %u, chan = %u, val= %x.\n", dev, subdevdg, chan, val);

        for (i = 0; i < NICHAN; i++) {
		data[i] = 1000 + i;
		BUILD_AREAD_INSN(insn[i], subdevai, data[i], 1, read_chan[i], AI_RANGE, AREF_GROUND);
		PRINT("READ INSN: insn = %u, n = %u, data = %u, subdev = %u, chanspec %u.\n", insn[i].insn, insn[i].n, insn[i].data[0], insn[i].subdev, insn[i].chanspec);
        }

        for (i = 0; i < NOCHAN; i++) {
		data[NICHAN + i] = 1000 + i;
		BUILD_AWRITE_INSN(insn[NICHAN + i], subdevao, data[NICHAN + i], 1, write_chan[i], AO_RANGE, AREF_GROUND);
		PRINT("WRIT INSN: insn = %u, n = %u, data = %u, subdev = %u, chanspec = %u.\n", insn[NICHAN + i].insn, insn[NICHAN + i].n, insn[NICHAN + i].data[0], insn[NICHAN + i].subdev, insn[NICHAN + i].chanspec);
        }

	for (i = 0; i < NCHAN; i++) {
		PRINT("1 COMEDI INST: insn = %u, n = %u, data = %u, subdev = %u, chanspec = %u.\n", insn[i].insn, insn[i].n, insn[i].data[0], insn[i].subdev, insn[i].chanspec);
		PRINT("COMEDI INST: %d.\n", RT_comedi_do_insn(daqnode, daqport, dev, insn + i));
		PRINT("2 COMEDI INST: insn = %u, n = %u, data = %x, subdev = %u, chanspec = %u.\n", insn[i].insn, insn[i].n, insn[i].data[0], insn[i].subdev, insn[i].chanspec);
		insn[i].n = 1;
		insn[i].data[0] = 999999;
	}
	PRINT("COMEDI INSTLST: %d.\n", RT_comedi_do_insnlist(daqnode, daqport, dev, &ilist));
	for (i = 0; i < NCHAN; i++) {
		PRINT("COMEDI INSTLST: insn = %u, n = %u, data = %x, subdev = %u, chanspec = %u.\n", insn[i].insn, insn[i].n, insn[i].data[0], insn[i].subdev, insn[i].chanspec);
	}

	RT_comedi_cancel(daqnode, daqport, dev, subdevai);
	RT_comedi_cancel(daqnode, daqport, dev, subdevao);
	RT_comedi_cancel(daqnode, daqport, dev, subdevdg);
	PRINT("COMEDI CANCELs DONE.\n");
	RT_comedi_close(daqnode, daqport, dev);
	PRINT("COMEDI CLOSE.\n");

	stop_rt_timer();
	rt_task_delete(task);

	return 0;
}