rename module to Biblio::RFID
[Biblio-RFID.git] / lib / RFID / Biblio.pm
1 package Biblio::RFID;
2
3 use warnings;
4 use strict;
5
6 use base 'Exporter';
7 our @EXPORT = qw( hex2bytes as_hex hex_tag $debug );
8
9 use Data::Dump qw(dump);
10
11 =head1 NAME
12
13 Biblio::RFID - perl tools to use different RFID readers for library use 
14
15 =cut
16
17 our $VERSION = '0.02';
18
19 our $debug = 0;
20
21
22 =head1 DESCRIPTION
23
24 Main idea is to develop simple API to reader, and than provide useful
25 abstractions on top of it to quickly write applications to respond on
26 tags which come in range of RFID reader using L<Biblio::RFID::Reader>.
27
28 Writing support for new RFID readers should be easy.
29 L<Biblio::RFID::Reader::API> provides documentation on writing support
30 for different readers.
31
32 Currently, two serial RFID readers based on L<Biblio::RFID::Reader::Serial>
33 are implemented:
34
35 =over 4
36
37 =item *
38
39 L<Biblio::RFID::Reader::3M810>
40
41 =item *
42
43 L<Biblio::RFID::Reader::CPRM02>
44
45 =back
46
47 There is also simple read-only reader using shell commands in
48 L<Biblio::RFID::Reader::librfid>.
49
50 For implementing application take a look at L<Biblio::RFID::Reader>
51
52 C<scripts/RFID-JSONP-server.pl> is example of such application. It's local
53 interface to RFID reader and JSONP REST server.
54
55 C<examples/koha-rfid.js> is jQuery based JavaScript code which can be inserted
56 in Koha Library System to provide overlay with tags in range and
57 check-in/check-out form-fill functionality.
58
59 Applications can use L<Biblio::RFID::RFID501> which is some kind of
60 semi-standard 3M layout or blocks on RFID tags.
61
62 =for readme stop
63
64 =head1 EXPORT
65
66 Formatting functions are exported
67
68 =head2 hex2bytes
69
70   my $bytes = hex2bytes($hex);
71
72 =cut
73
74 sub hex2bytes {
75         my $str = shift || die "no str?";
76         my $b = $str;
77         $b =~ s/\s+//g;
78         $b =~ s/(..)/\\x$1/g;
79         $b = "\"$b\"";
80         my $bytes = eval $b;
81         die $@ if $@;
82         warn "## str2bytes( $str ) => $b => ",as_hex($bytes) if $debug;
83         return $bytes;
84 }
85
86 =head2 as_hex
87
88   print as_hex( $bytes );
89
90 =cut
91
92 sub as_hex {
93         my @out;
94         foreach my $str ( @_ ) {
95                 my $hex = uc unpack( 'H*', $str );
96                 $hex =~ s/(..)/$1 /g if length( $str ) > 2;
97                 $hex =~ s/\s+$//;
98                 push @out, $hex;
99         }
100         return join(' | ', @out);
101 }
102
103 =head2 hex_tag
104
105   print hex_tag $8bytes;
106
107 =cut
108
109 sub hex_tag { uc(unpack('H16', shift)) }
110
111 =head1 WARN
112
113 We are installing L<perldoc/warn> handler to controll debug output
114 based on C<$Biblio::RFID::debug> level
115
116 =cut
117
118 BEGIN {
119         $SIG{'__WARN__'} = sub {
120                 my $msg = join(' ', @_);
121                 if ( $msg =~ m/^(#+)/ ) {
122                         my $l = length $1;
123                         return if $l > $debug;
124                 }
125                 warn join(' ', @_);
126         }
127 }
128
129 =for readme continue
130
131 =head1 HARDWARE SUPPORT
132
133 =head2 3M 810
134
135 L<Biblio::RFID::Reader::3M810>
136
137 =head2 CPR-M02
138
139 L<Biblio::RFID::Reader::CPRM02>
140
141 =head2 librfid
142
143 L<Biblio::RFID::Reader::librfid>
144
145
146 =head1 AUTHOR
147
148 Dobrica Pavlinusic, C<< <dpavlin at rot13.org> >>
149
150 L<http://blog.rot13.org/>
151
152 =head1 BUGS
153
154 Please report any bugs or feature requests to C<bug-rfid-biblio at rt.cpan.org>, or through
155 the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Biblio-RFID>.  I will be notified, and then you'll
156 automatically be notified of progress on your bug as I make changes.
157
158
159
160
161 =head1 SUPPORT
162
163 You can find documentation for this module with the perldoc command.
164
165     perldoc Biblio::RFID
166     perldoc Biblio::RFID::Reader
167     perldoc Biblio::RFID::Reader::API
168
169
170 You can also look for information at:
171
172 =over 4
173
174 =item * RT: CPAN's request tracker
175
176 L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Biblio-RFID>
177
178 =item * AnnoCPAN: Annotated CPAN documentation
179
180 L<http://annocpan.org/dist/Biblio-RFID>
181
182 =item * CPAN Ratings
183
184 L<http://cpanratings.perl.org/d/Biblio-RFID>
185
186 =item * Search CPAN
187
188 L<http://search.cpan.org/dist/Biblio-RFID/>
189
190 =back
191
192
193 =head1 ACKNOWLEDGEMENTS
194
195
196 =head1 LICENSE AND COPYRIGHT
197
198 Copyright 2010 Dobrica Pavlinusic.
199
200 This program is free software; you can redistribute it and/or modify
201 it under the terms of the GNU General Public License as published by
202 the Free Software Foundation; version 2 dated June, 1991 or at your option
203 any later version.
204
205 This program is distributed in the hope that it will be useful,
206 but WITHOUT ANY WARRANTY; without even the implied warranty of
207 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
208 GNU General Public License for more details.
209
210 A copy of the GNU General Public License is available in the source tree;
211 if not, write to the Free Software Foundation, Inc.,
212 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
213
214
215 =cut
216
217 1; # End of Biblio::RFID