94 lines
1.9 KiB
Ruby
Executable file
94 lines
1.9 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
require 'comedi'
|
|
require 'getoptlong'
|
|
require 'common'
|
|
|
|
include Comedi
|
|
|
|
cmdtest_messages = [ "success", "invalid source", "source conflict",
|
|
"invalid argument", "argument conflict",
|
|
"invalid chanlist" ]
|
|
|
|
class SWIG::TYPE_p_comedi_t_struct
|
|
|
|
def prepare_cmd_lib(subdevice, freq, cmd)
|
|
begin
|
|
cmd = get_cmd_generic_timed(subdevice, cmd, $n_chan,
|
|
(1000000000.0 / freq).truncate)
|
|
rescue ComediError
|
|
printf("comedi_get_cmd_generic_timed failed\n")
|
|
return cmd
|
|
end
|
|
|
|
cmd.chanlist = $chanlist
|
|
cmd.chanlist_len = $n_chan
|
|
|
|
cmd.scan_end_arg = $n_chan
|
|
cmd.stop_arg = $n_scan if cmd.stop_src == TRIG_COUNT
|
|
|
|
return cmd
|
|
end
|
|
|
|
end
|
|
|
|
parse_options
|
|
|
|
begin
|
|
dev = Comedi::open($filename)
|
|
rescue
|
|
comedi_perror($filename)
|
|
exit 1
|
|
end
|
|
|
|
$chanlist = Chanlist.new($n_chan)
|
|
0.upto($n_chan - 1) do |i|
|
|
$chanlist[i] = cr_pack($channel + i, $range, $aref)
|
|
end
|
|
|
|
cmd = dev.prepare_cmd_lib($subdevice, $freq, Comedi_cmd_struct.new)
|
|
|
|
$stderr.printf("command before testing:\n")
|
|
dump_cmd($stderr, cmd)
|
|
|
|
begin
|
|
ret, cmd = dev.command_test(cmd)
|
|
rescue
|
|
comedi_perror("comedi_command_test")
|
|
exit 1
|
|
end
|
|
$stderr.printf("first test returned %d (%s)\n", ret, cmdtest_messages[ret])
|
|
dump_cmd($stderr, cmd)
|
|
|
|
begin
|
|
ret, cmd = dev.command_test(cmd)
|
|
rescue
|
|
comedi_perror("comedi_command_test")
|
|
exit 1
|
|
end
|
|
$stderr.printf("second test returned %d (%s)\n", ret, cmdtest_messages[ret])
|
|
dump_cmd($stderr, cmd)
|
|
|
|
tstart = Time.new
|
|
$stderr.printf("start time: %d.%06d\n", tstart.tv_sec, tstart.tv_usec)
|
|
|
|
begin
|
|
ret = dev.command(cmd)
|
|
rescue
|
|
comedi_perror("comedi_command")
|
|
exit 1
|
|
end
|
|
|
|
while line = dev.ios.read(2 * $n_chan)
|
|
data = line.unpack('S*')
|
|
data.each do |d|
|
|
printf("%d ", d)
|
|
end
|
|
puts
|
|
end
|
|
|
|
tend = Time.new
|
|
$stderr.printf("end time: %d.%06d\n", tend.tv_sec, tend.tv_usec)
|
|
|
|
tdiff = tend - tstart
|
|
$stderr.printf("time: %.6f\n", tdiff)
|