--- /dev/null
+#!/usr/bin/perl -w
+use warnings;
+use strict;
+use FileHandle;
+use Time::HiRes qw( usleep );
+use Data::Dumper;
+use HADES::TrbNet;
+use Date::Format;
+
+if (!defined $ENV{'DAQOPSERVER'}) {
+ die "DAQOPSERVER not set in environment";
+}
+
+if (!defined &trb_init_ports()) {
+ die("can not connect to trbnet-daemon on the $ENV{'DAQOPSERVER'}");
+}
+
+unless(defined $ARGV[0] && defined $ARGV[1]) {
+ print 'usage: adc.pl $FPGA $cmd [$value]',"\n\n";
+ exit;
+}
+
+# define "constants" to make code more readable
+# chain=0 : MachXO on addon
+# chain=1 : 1st chain on Addon connector SPI_CONN_L
+# chain=2 : 2nd chain on Addon connector SPI_CONN_H
+# chain=3 : ADC chains (CS via MachXO!)
+# chain=4 : 1st LMK clock chip
+# chain=5 : 2nd LMK clock chip
+my %chain = (
+ 'machxo' => 0,
+ 'addon_0' => 1,
+ 'addon_1' => 2,
+ 'adc' => 3,
+ 'lmk_0' => 4,
+ 'lmk_1' => 5
+ );
+
+my $board;
+($board) = $ARGV[0] =~ /^0?x?(\w+)/;
+$board = hex($board);
+
+
+sub sendcmd {
+ my $cmd = shift;
+ my $chain = shift;
+ my $c = [$cmd,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1<<$chain,1];
+ trb_register_write_mem($board,0xd400,0,$c,scalar @{$c});
+ # trb_register_write($board,0xd410,1<<$chain) or die "trb_register_write: ", trb_strerror();
+ # trb_register_write($board,0xd411,1);
+ #usleep(1000);
+ return trb_register_read($board,0xd412);
+}
+
+if ($ARGV[1] eq "time") {
+ my $ids;
+ for (my $i = 0; $i <= 1; $i++) {
+ my $b = sendcmd(0x21000000 + $i*0x10000, $chain{machxo});
+ foreach my $e (sort keys %$b) {
+ $ids->{$e}->{$i} = $b->{$e}&0xffff;
+ }
+ }
+ foreach my $e (sort keys %$ids) {
+ printf("0x%04x\t0x%04x%04x\t%s\n",$e,$ids->{$e}->{1},
+ $ids->{$e}->{0},time2str('%Y-%m-%d %H:%M',($ids->{$e}->{1}*2**16+$ids->{$e}->{0})));
+ }
+}