1 package RFID::Serial::3M810;
3 use base 'RFID::Serial';
10 device => "/dev/ttyUSB1", # FIXME comment out before shipping
24 my ( $count, $str ) = $port->read(3);
25 my $data = $port->read( ord(substr($str,2,1)) );
26 warn "drain ",as_hex( $str, $data ),"\n";
33 Time::HiRes::sleep 0.015;
37 my ( $hex, $description, $coderef ) = @_;
38 my $bytes = hex2bytes($hex);
39 if ( substr($bytes,0,1) !~ /(\xD5|\xD6)/ ) {
40 my $len = pack( 'c', length( $bytes ) + 3 );
41 $bytes = $len . $bytes;
42 my $checksum = checksum($bytes);
43 $bytes = "\xD6\x00" . $bytes . $checksum;
46 warn ">> ", as_hex( $bytes ), "\t\t[$description]\n";
47 $port->write( $bytes );
51 my $r_len = $port->read(3);
55 $r_len = $port->read(3);
58 my $len = ord( substr($r_len,2,1) );
59 $data = $port->read( $len );
60 warn "<< ", as_hex($r_len,$data)," $len\n";
62 $coderef->( $data ) if $coderef;
67 my ( $got, $expected ) = @_;
68 $expected = hex2bytes($expected);
70 my $len = length($got);
71 $len = length($expected) if length $expected < $len;
73 confess "got ", as_hex($got), " expected ", as_hex($expected)
74 unless substr($got,0,$len) eq substr($expected,0,$len);
80 'D5 00 05 04 00 11 8C66', 'hw version', sub {
82 assert $data => '04 00 11';
83 my $hw_ver = join('.', unpack('CCCC', substr($data,3)));
84 print "hardware version $hw_ver\n";
88 'D6 00 0C 13 04 01 00 02 00 03 00 04 00 AAF2','FIXME: stats?', sub { assert(shift,
89 ' 13 00 02 01 01 03 02 02 03 00 E778'