rfid4r 1.0.0-x86-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +48 -0
- data/ext/Makefile +150 -0
- data/ext/extconf.rb +6 -0
- data/ext/phid.h +156 -0
- data/ext/phid.i +9 -0
- data/ext/phid.so +0 -0
- data/ext/phid_wrap.c +2923 -0
- data/lib/event_handler/rfid_server.rb +300 -0
- data/lib/inteface_aplication/rfid_config.yml +10 -0
- data/lib/inteface_aplication/rfid_interface_client.rb +84 -0
- data/lib/phid.so +0 -0
- data/lib/readers_adapter/phidget_rfid_reader.rb +84 -0
- data/lib/readers_adapter/rfid_reader.rb +40 -0
- data/lib/rfid4r.rb +32 -0
- metadata +78 -0
@@ -0,0 +1,300 @@
|
|
1
|
+
require 'webrick'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'sqlite3'
|
4
|
+
require 'readers_adapter/phidget_rfid_reader'
|
5
|
+
require 'inteface_aplication/rfid_interface_client'
|
6
|
+
|
7
|
+
#
|
8
|
+
# La clase RfidServer representa el manejador de eventos del Middleware RFID,
|
9
|
+
# para el manejo de los eventos generados por las capturas de etiquetas RFID.
|
10
|
+
# RfidServer es una clase concreta de la clase WEBrick::GenericServer que
|
11
|
+
# implementa un servidor para el manejo de un lector RFID. Adicionalmente
|
12
|
+
# recibe comandos que permiten consultar, registrar y liberar el lector RFID,
|
13
|
+
# asi como tambien comandos para consultar la base de datos SQLite de eventos
|
14
|
+
# RFID.
|
15
|
+
#
|
16
|
+
class RfidServer < WEBrick::GenericServer
|
17
|
+
# Representa una referencia a una interfaz cliente para consultas hacia otros
|
18
|
+
# servidores RFID
|
19
|
+
attr_reader :interface_client
|
20
|
+
# Referencia al lector RFID conectado al servidor
|
21
|
+
attr_reader :reader
|
22
|
+
# Referencia logica para la presencia o no del lector RFID
|
23
|
+
attr_reader :is_attach
|
24
|
+
# Referencia logica para la activacion o no del muestreo de eventos RFID
|
25
|
+
attr_reader :active
|
26
|
+
# Referencia logica para la activacion o no del muestreo de eventos RFID remoto
|
27
|
+
attr_reader :active_remote
|
28
|
+
# Referencia al tiempo de espera para conectar el lector RFID
|
29
|
+
attr_reader :timeout
|
30
|
+
# Representa una referencia al monitor de enventos le lectura de tags RFID
|
31
|
+
attr_reader :verbose
|
32
|
+
# Representa una referencia al monitor de enventos le lectura de tags RFID remoto
|
33
|
+
attr_reader :verbose_remote
|
34
|
+
# Referencia a un semaforo de sincronizacion de captura de eventos RFID
|
35
|
+
attr_reader :mutex
|
36
|
+
|
37
|
+
#
|
38
|
+
# Crea un nuevo servidor RFID utilizando el archivo de configuracion
|
39
|
+
# "rfid_config.yml", adicionalmente instancia la base de datos SQLite de
|
40
|
+
# eventos para su uso porterior.
|
41
|
+
#
|
42
|
+
def initialize(config={}, default=WEBrick::Config::General)
|
43
|
+
@interface_client = RfidInterfaceClient.new
|
44
|
+
p = @interface_client.config["local_config"]["port"]
|
45
|
+
ip = @interface_client.config["local_config"]["ip_address"]
|
46
|
+
@timeout = @interface_client.config["local_config"]["timeout"]
|
47
|
+
config[:Port] = p unless p.nil?
|
48
|
+
config[:BindAddress] = ip unless ip.nil?
|
49
|
+
@is_attach = false
|
50
|
+
@active = false
|
51
|
+
@active_remote = false
|
52
|
+
@mutex = Mutex.new
|
53
|
+
super
|
54
|
+
@db = SQLite3::Database.new('rfid_events.db')
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# Recibe y procesa los comandos, a continuacion se muestra una lista de los comandos soportados
|
59
|
+
# y una breve descripcion de su funcion:
|
60
|
+
#
|
61
|
+
# attach: Attach a new RFID reader
|
62
|
+
# detach: Detach the RFID reader
|
63
|
+
# ls|list|reader: Serial of RFID reader
|
64
|
+
# n|name: Name of RFID reader
|
65
|
+
# t|type: Type of RFID reader
|
66
|
+
# version: Version of RFID reader
|
67
|
+
# verbose: Initialize the observer of RFID events
|
68
|
+
# stop: Stop the observer of RFID events
|
69
|
+
# server: List all servers
|
70
|
+
# set [id_of_server]: Change the current server
|
71
|
+
# current: Show the current server selected
|
72
|
+
# select [SQL]: Consulta de tipo SQL a la base de datos SQLite
|
73
|
+
# quit|close|exit: Close the connection with de server
|
74
|
+
#
|
75
|
+
def run(sock)
|
76
|
+
while true
|
77
|
+
cmd = sock.gets
|
78
|
+
case cmd
|
79
|
+
when /\bclose|exit|quit\W/
|
80
|
+
sock.print "Shutting down..."
|
81
|
+
break
|
82
|
+
# ************************* servers ******************************
|
83
|
+
when /\bservers\W/
|
84
|
+
if @interface_client.servers>0
|
85
|
+
@interface_client.config.each do |key, value|
|
86
|
+
sock.print "Server: #{key} #{value["ip_address"]}:#{value["port"]}, Id of server: #{value["id_server"]}\n"
|
87
|
+
end
|
88
|
+
else
|
89
|
+
sock.print "ERROR: No Server Found!\n"
|
90
|
+
end
|
91
|
+
# ************************* current server ******************************
|
92
|
+
when /\bcurrent\W/
|
93
|
+
server_name = @interface_client.id_server
|
94
|
+
sock.print "Server: #{server_name} #{@interface_client.config[server_name]["ip_address"]}:#{@interface_client.config[server_name]["port"]} , Id of server: #{@interface_client.config[server_name]["id_server"]}\n"
|
95
|
+
# ************************* set server ******************************
|
96
|
+
when /\bset\s+([0-9A-Za-z])+/
|
97
|
+
if @interface_client.servers>0
|
98
|
+
@interface_client.set_server(sock,cmd.split(/\s/)[1])
|
99
|
+
else
|
100
|
+
sock.print "ERROR: No Server Found!\n"
|
101
|
+
end
|
102
|
+
# ************************* attach **********************************
|
103
|
+
when /\battach\W(\s*-r)?/
|
104
|
+
if @interface_client.id_server.eql?("local_config")
|
105
|
+
if !@is_attach
|
106
|
+
begin
|
107
|
+
@reader = PhidgetRfidReader.new(@timeout)
|
108
|
+
@is_attach = true
|
109
|
+
sock.print "Device #{@reader.serial} found!\n"
|
110
|
+
rescue Exception => e
|
111
|
+
sock.print "ERROR: #{e}\n"
|
112
|
+
end
|
113
|
+
else
|
114
|
+
sock.print "ERROR: An RFID reader is attached!\n"
|
115
|
+
end
|
116
|
+
elsif @interface_client.servers>0
|
117
|
+
@interface_client.single_consult(sock,"attach -r\n")
|
118
|
+
end
|
119
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
120
|
+
break
|
121
|
+
end
|
122
|
+
# ************************* ls|list|reader **********************************
|
123
|
+
when /\bls|list|reader\W(\s*-r)?/
|
124
|
+
if @interface_client.id_server.eql?("local_config")
|
125
|
+
if @is_attach
|
126
|
+
sock.print "#{@reader.serial}\n"
|
127
|
+
else
|
128
|
+
sock.print "ERROR: No device found!\n"
|
129
|
+
end
|
130
|
+
elsif @interface_client.servers>0
|
131
|
+
@interface_client.single_consult(sock,"ls -r\n")
|
132
|
+
end
|
133
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
134
|
+
break
|
135
|
+
end
|
136
|
+
# ************************* name **********************************
|
137
|
+
when /\bn|name\W(\s*-r)?/
|
138
|
+
if @interface_client.id_server.eql?("local_config")
|
139
|
+
if @is_attach
|
140
|
+
sock.print "#{@reader.name}\n"
|
141
|
+
else
|
142
|
+
sock.print "ERROR: No device found!\n"
|
143
|
+
end
|
144
|
+
elsif @interface_client.servers>0
|
145
|
+
@interface_client.single_consult(sock,"n -r\n")
|
146
|
+
end
|
147
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
148
|
+
break
|
149
|
+
end
|
150
|
+
# ************************* type **********************************
|
151
|
+
when /\bt|type\W(\s*-r)?/
|
152
|
+
if @interface_client.id_server.eql?("local_config")
|
153
|
+
if @is_attach
|
154
|
+
sock.print "#{@reader.type}\n"
|
155
|
+
else
|
156
|
+
sock.print "ERROR: No device found!\n"
|
157
|
+
end
|
158
|
+
elsif @interface_client.servers>0
|
159
|
+
@interface_client.single_consult(sock,"t -r\n")
|
160
|
+
end
|
161
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
162
|
+
break
|
163
|
+
end
|
164
|
+
# ************************* version **********************************
|
165
|
+
when /\bversion\W(\s*-r)?/
|
166
|
+
if @interface_client.id_server.eql?("local_config")
|
167
|
+
if @is_attach
|
168
|
+
sock.print "#{@reader.version}\n"
|
169
|
+
else
|
170
|
+
sock.print "ERROR: No device found!\n"
|
171
|
+
end
|
172
|
+
elsif @interface_client.servers>0
|
173
|
+
@interface_client.single_consult(sock,"version -r\n")
|
174
|
+
end
|
175
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
176
|
+
break
|
177
|
+
end
|
178
|
+
# ************************* detach **********************************
|
179
|
+
when /\bdetach\W(\s*-r)?/
|
180
|
+
if @interface_client.id_server.eql?("local_config")
|
181
|
+
if @is_attach
|
182
|
+
@reader.delete
|
183
|
+
@is_attach = false
|
184
|
+
if @active
|
185
|
+
@verbose.exit
|
186
|
+
@active = false
|
187
|
+
end
|
188
|
+
sock.print "Device #{@reader.serial} detached!\n"
|
189
|
+
else
|
190
|
+
sock.print "ERROR: No device found!\n"
|
191
|
+
end
|
192
|
+
elsif @interface_client.servers>0
|
193
|
+
@interface_client.single_consult(sock,"detach -r\n")
|
194
|
+
end
|
195
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
196
|
+
break
|
197
|
+
end
|
198
|
+
# ************************* detachall **********************************
|
199
|
+
# when /\bdetachall\W/
|
200
|
+
# @readers.each do |s,r|
|
201
|
+
# sock.print "Device #{r.serial} detached!\n"
|
202
|
+
# r.delete
|
203
|
+
# end
|
204
|
+
# @readers.clear
|
205
|
+
# ************************* consult **********************************
|
206
|
+
when /\bconsult/
|
207
|
+
@db.execute(cmd.split("consult")[1]) do |row|
|
208
|
+
row.each do |col|
|
209
|
+
sock.print "#{col.to_s};"
|
210
|
+
end
|
211
|
+
sock.print "\n"
|
212
|
+
end
|
213
|
+
break
|
214
|
+
# ************************* select SQL **********************************
|
215
|
+
when /\bselect/
|
216
|
+
begin
|
217
|
+
if @interface_client.id_server.eql?("local_config")
|
218
|
+
@db.execute(cmd) do |row|
|
219
|
+
row.each do |col|
|
220
|
+
sock.print "#{col.to_s};"
|
221
|
+
end
|
222
|
+
sock.print "\n"
|
223
|
+
end
|
224
|
+
elsif @interface_client.servers>0
|
225
|
+
@interface_client.consult(sock,"consult #{cmd}")
|
226
|
+
end
|
227
|
+
rescue SQLite3::SQLException => e
|
228
|
+
sock.print "ERROR: #{e}\n"
|
229
|
+
rescue Exception => e
|
230
|
+
sock.print "ERROR: #{e}\n"
|
231
|
+
end
|
232
|
+
# ******************** Mostrar eventos a cierta frecuencia ************************
|
233
|
+
when /\bverbose\W(\s*-r)?/
|
234
|
+
if @interface_client.id_server.eql?("local_config")
|
235
|
+
if !@active and @is_attach
|
236
|
+
@active = true
|
237
|
+
tag = 0
|
238
|
+
opt = cmd.split(' ')[1]
|
239
|
+
@verbose = Thread.new(opt) do
|
240
|
+
while true
|
241
|
+
if @reader.count > tag
|
242
|
+
tag = @reader.count
|
243
|
+
sock.print "Reader:#{@reader.serial} #{@reader.lastTag()}\n"
|
244
|
+
elsif !@active
|
245
|
+
sock.print "MESSAGE: Stop Verbose\n"
|
246
|
+
break
|
247
|
+
else
|
248
|
+
sock.print " "
|
249
|
+
end
|
250
|
+
sleep(0.1)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
elsif @interface_client.servers>0
|
255
|
+
if !@active_remote
|
256
|
+
@active_remote = true
|
257
|
+
@verbose_remote = Thread.new do
|
258
|
+
@interface_client.consult(sock,"verbose -r -r")
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
# ************************* Parar Muestreo **********************************
|
263
|
+
when /\bstop\W(\s*-r)?/
|
264
|
+
if @interface_client.id_server.eql?("local_config")
|
265
|
+
if @active
|
266
|
+
#sock.print "MESSAGE: Stop Verbose\n"
|
267
|
+
@active = false
|
268
|
+
#@verbose.exit
|
269
|
+
end
|
270
|
+
elsif @interface_client.servers>0
|
271
|
+
if @active_remote
|
272
|
+
@interface_client.single_consult(sock,"stop -r\n")
|
273
|
+
#@verbose_remote.exit
|
274
|
+
@active_remote = false
|
275
|
+
end
|
276
|
+
end
|
277
|
+
if cmd.split(/\s/)[1].eql?("-r")
|
278
|
+
break
|
279
|
+
end
|
280
|
+
# ************************* h|help **********************************
|
281
|
+
when /\bh|help\W/
|
282
|
+
sock.print "attach: Attach a new RFID reader\n"
|
283
|
+
sock.print "detach: Detach the RFID reader\n"
|
284
|
+
sock.print "ls|list|reader: Serial of RFID reade\n"
|
285
|
+
sock.print "n|name: Name of RFID reader\n"
|
286
|
+
sock.print "t|type: Type of RFID reader\n"
|
287
|
+
sock.print "version: Version of RFID reader\n"
|
288
|
+
sock.print "verbose: Initialize the observer of RFID events\n"
|
289
|
+
sock.print "stop: Stop the observer of RFID events\n"
|
290
|
+
sock.print "server: List all servers\n"
|
291
|
+
sock.print "set [id_of_server]: Change the current server\n"
|
292
|
+
sock.print "current: Show the current server selected\n"
|
293
|
+
sock.print "select [SQL]: Consulta de tipo SQL a la base de datos SQLite\n"
|
294
|
+
sock.print "quit|close|exit: Close the connection with de server\n"
|
295
|
+
else
|
296
|
+
sock.print "ERROR: Unknown command! Type h or help for Help\n"
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'net/telnet'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
#
|
6
|
+
# La clase RfidInterfaceClient representa una interfaz para un cliente Telnet genérico
|
7
|
+
#
|
8
|
+
class RfidInterfaceClient
|
9
|
+
# Referencia a un hash de parámetros de configuración
|
10
|
+
attr_reader :config
|
11
|
+
# Referencia a cantidad de servidores instanciados
|
12
|
+
attr_reader :servers
|
13
|
+
# Representa el identificado del servidor actualmente en uso
|
14
|
+
attr_reader :id_server
|
15
|
+
|
16
|
+
#
|
17
|
+
# Crea una nueva interfaz para un cliente Telnet genérico, a partir de los parámetros
|
18
|
+
# de configuración obtenidos desde el archivo "rfid_config.yml"
|
19
|
+
#
|
20
|
+
def initialize(yml='rfid_config.yml')
|
21
|
+
parse = YAML::parse(File.open(yml))
|
22
|
+
@config = parse.transform
|
23
|
+
@id_server = "local_config"
|
24
|
+
@servers = 0
|
25
|
+
@config.each do |key, value|
|
26
|
+
if key.include?("server")
|
27
|
+
@servers = @servers + 1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# Ejecuta un comando y recibe una o más respuestas, imprimiéndola(s) en el socket
|
34
|
+
#
|
35
|
+
def consult(sock,cmd)
|
36
|
+
begin
|
37
|
+
conection = Net::Telnet::new("Host" => @config[@id_server]["ip_address"].to_s,"Timeout" => 5,"Port" => @config[@id_server]["port"])
|
38
|
+
sock.print "MESSAGE: Server "+@config[@id_server]["ip_address"].to_s+":"+@config[@id_server]["port"].to_s+"\n"
|
39
|
+
conection.cmd("#{cmd.chop}") do |response|
|
40
|
+
sock.print response.to_s
|
41
|
+
if response.to_s.include?("Stop Verbose")
|
42
|
+
conection.puts("exit")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
rescue Exception => e
|
46
|
+
sock.print "ERROR: Couldn't establish the conexion!\n"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Ejecuta un comando y recibe una respuesta, imprimiéndola en el socket
|
52
|
+
#
|
53
|
+
def single_consult(sock,cmd)
|
54
|
+
begin
|
55
|
+
conection = Net::Telnet::new("Host" => @config[@id_server]["ip_address"].to_s,"Timeout" => 5,"Port" => @config[@id_server]["port"])
|
56
|
+
sock.print "MESSAGE: Server "+@config[@id_server]["ip_address"].to_s+":"+@config[@id_server]["port"].to_s+"\n"
|
57
|
+
conection.puts("#{cmd.chop}")
|
58
|
+
sock.print conection.gets
|
59
|
+
#conection.close
|
60
|
+
rescue
|
61
|
+
sock.print "ERROR: Couldn't establish the conexion!\n"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# Permite cambiar el servidor al cual seran dirigidos los comandos
|
67
|
+
# y consultas
|
68
|
+
#
|
69
|
+
def set_server(sock, id)
|
70
|
+
change = false
|
71
|
+
@config.each do |key, value|
|
72
|
+
if value["id_server"].to_s.eql?(id)
|
73
|
+
change = true
|
74
|
+
@id_server = key
|
75
|
+
sock.print "MESSAGE: Change to Server #{id} Complete!\n"
|
76
|
+
break
|
77
|
+
end
|
78
|
+
end
|
79
|
+
if !change
|
80
|
+
sock.print "ERROR: No Server Found!\n"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/lib/phid.so
ADDED
Binary file
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'phid'
|
2
|
+
require 'readers_adapter/rfid_reader'
|
3
|
+
require 'observer'
|
4
|
+
|
5
|
+
#
|
6
|
+
# PhidgetRfidReader es una clase concreta de la clase RfidReader que define en
|
7
|
+
# detalle la estructura de los metodos de un lector RFID.
|
8
|
+
#
|
9
|
+
class PhidgetRfidReader < RfidReader
|
10
|
+
# El modulo Phid encapsula el wrapper de lector RFID PhidgetRFID-1023.
|
11
|
+
include Phid
|
12
|
+
|
13
|
+
#
|
14
|
+
# Crea un nuevo lector RFID con sus atributos básicos.
|
15
|
+
# Adicionalmente maneja un log de registro de eventos de lecturas de
|
16
|
+
# etiquetas RFID, estos eventos son almacenados en una base de datos SQLite a
|
17
|
+
# la vez que son leidos por el lector RFID.
|
18
|
+
#
|
19
|
+
def initialize(timeout=10,log='phid.log', dbname='rfid_events.db')
|
20
|
+
begin
|
21
|
+
rfid_create(dbname)
|
22
|
+
result = wait_attachment(timeout)
|
23
|
+
if result != 0
|
24
|
+
raise get_error_description(result)
|
25
|
+
end
|
26
|
+
super(get_device_name, get_device_type, get_serial_number, get_device_version)
|
27
|
+
puts "Device #{name}::#{serial} Found!\n"
|
28
|
+
log_message("#{self}", "Device #{name}::#{serial} Found!\n")
|
29
|
+
enable_loggin("#{serial}-#{log}")
|
30
|
+
turn_antenna_on
|
31
|
+
rescue Exception => e
|
32
|
+
puts "ERROR: #{e}"
|
33
|
+
raise get_error_description(result)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# Activa o desactiva la antena del lector RFID.
|
39
|
+
#
|
40
|
+
def antenna(set)
|
41
|
+
if set
|
42
|
+
turn_antenna_on
|
43
|
+
else
|
44
|
+
turn_antenna_off
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Muestra por salida estandar las propiedas básicas del lector RFID, como
|
50
|
+
# nombre, tipo, serial y versión.
|
51
|
+
#
|
52
|
+
def properties
|
53
|
+
puts "Device Name: #{name}\n"
|
54
|
+
puts "Device Type: #{type}\n"
|
55
|
+
puts "Device Serial: #{serial}\n"
|
56
|
+
puts "Device Version: #{version}\n"
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Elimina el lector RFID mostrando un aviso de notificacion, con lo cual se
|
61
|
+
# dejara de detectar las etiquetas RFID. Adicionalmente, este evento es
|
62
|
+
# almacenado en el log de registro y en la base de datos SQLite.
|
63
|
+
#
|
64
|
+
def delete
|
65
|
+
puts "Device #{name}::#{serial} Dettached!\n"
|
66
|
+
log_message("#{self}", "Device #{name}::#{serial} Dettached!\n")
|
67
|
+
rfid_delete
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# Retorna el último ID leído por el lector.
|
72
|
+
#
|
73
|
+
def lastTag
|
74
|
+
get_lastTag
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# Retorna el número de eventos de lectura registrados por el lector.
|
79
|
+
#
|
80
|
+
def count
|
81
|
+
count_tags
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# La clase RfidReader encapsula la estructura básica de los metodos de un
|
3
|
+
# lector RFID. Las subclases deberan redefinir los metodos sin cambiar su
|
4
|
+
# estructura.
|
5
|
+
#
|
6
|
+
class RfidReader
|
7
|
+
# Referencia al nombre del lector RFID
|
8
|
+
attr_accessor :name
|
9
|
+
# Referencia al tipo de lector RFID
|
10
|
+
attr_accessor :type
|
11
|
+
# Referencia al serial unico del lector RFID
|
12
|
+
attr_accessor :serial
|
13
|
+
# Referencia a la versión del lector RFID
|
14
|
+
attr_accessor :version
|
15
|
+
|
16
|
+
#
|
17
|
+
# Crea un nuevo lector RFID con sus atributos básicos.
|
18
|
+
#
|
19
|
+
def initialize(name, type, serial, version)
|
20
|
+
@name=name
|
21
|
+
@type=type
|
22
|
+
@serial=serial
|
23
|
+
@version=version
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Muestra las propiedas básicas del lector RFID, como nombre, tipo, serial
|
28
|
+
# y/o versión.
|
29
|
+
#
|
30
|
+
def properties
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Elimina el lector RFID, con lo cual se dejara de detectar las etiquetas
|
35
|
+
# RFID.
|
36
|
+
#
|
37
|
+
def delete
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/lib/rfid4r.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'event_handler/rfid_server'
|
2
|
+
|
3
|
+
#
|
4
|
+
# La clase Rfid4r implementa directamente el servidor RFID de la clase
|
5
|
+
# RfidServer.
|
6
|
+
#
|
7
|
+
class Rfid4r
|
8
|
+
# Referencia al servidor RFID
|
9
|
+
attr_reader :server
|
10
|
+
|
11
|
+
# Instancia e inicia automaticamente los servicios del servidor RFID.
|
12
|
+
# Un ejemplo sencillo de uso de esta clase se muestra a continuacion:
|
13
|
+
#
|
14
|
+
# require 'rubygems'
|
15
|
+
# require 'rfid4r'
|
16
|
+
# r = Rfid4r.new
|
17
|
+
# r.init
|
18
|
+
# se obtiene:
|
19
|
+
# [2008-10-03 12:34:48] INFO WEBrick 1.3.1
|
20
|
+
# [2008-10-03 12:34:48] INFO ruby 1.8.6 (2008-08-08) [i686-linux]
|
21
|
+
# [2008-10-03 12:34:48] INFO RfidServer#start: pid=6394 port=8004
|
22
|
+
def init
|
23
|
+
@server = RfidServer.new()
|
24
|
+
trap("INT"){ @server.shutdown }
|
25
|
+
@server.start
|
26
|
+
end
|
27
|
+
|
28
|
+
def stop
|
29
|
+
@server.shutdown
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rfid4r
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: x86-linux
|
6
|
+
authors:
|
7
|
+
- "Daniel Gonz\xC3\xA1lez & Joel Ojeda"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-10-27 00:00:00 -04:30
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: sqlite3-ruby
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.2.4
|
24
|
+
version:
|
25
|
+
description:
|
26
|
+
email: dangt85@gmail.com & ojeda.joel@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README.rdoc
|
33
|
+
files:
|
34
|
+
- ext/phid.so
|
35
|
+
- ext/phid.h
|
36
|
+
- ext/phid_wrap.c
|
37
|
+
- ext/extconf.rb
|
38
|
+
- ext/Makefile
|
39
|
+
- ext/phid.i
|
40
|
+
- lib/readers_adapter
|
41
|
+
- lib/readers_adapter/rfid_reader.rb
|
42
|
+
- lib/readers_adapter/phidget_rfid_reader.rb
|
43
|
+
- lib/inteface_aplication
|
44
|
+
- lib/inteface_aplication/rfid_interface_client.rb
|
45
|
+
- lib/inteface_aplication/rfid_config.yml
|
46
|
+
- lib/rfid4r.rb
|
47
|
+
- lib/phid.so
|
48
|
+
- lib/event_handler
|
49
|
+
- lib/event_handler/rfid_server.rb
|
50
|
+
- README.rdoc
|
51
|
+
has_rdoc: true
|
52
|
+
homepage: http://rfid4r.rubyforge.org
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project: rfid4r
|
73
|
+
rubygems_version: 1.2.0
|
74
|
+
signing_key:
|
75
|
+
specification_version: 2
|
76
|
+
summary: An RFID middleware using a Ruby wrapper for the PhidgetRFID-1023 reader.
|
77
|
+
test_files: []
|
78
|
+
|