From cd53d44d51fe9ef89f05dfdb4e35b721ace4175d Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Thu, 18 Jul 2013 21:32:35 +0000 Subject: create turtle flags --- (limited to 'plugins/rfid/rfidrweusb.py') diff --git a/plugins/rfid/rfidrweusb.py b/plugins/rfid/rfidrweusb.py deleted file mode 100644 index bd12631..0000000 --- a/plugins/rfid/rfidrweusb.py +++ /dev/null @@ -1,200 +0,0 @@ -from device import RFIDDevice -from serial import Serial -import dbus -from dbus.mainloop.glib import DBusGMainLoop -import gobject -from time import sleep -import utils - -HAL_SERVICE = 'org.freedesktop.Hal' -HAL_MGR_PATH = '/org/freedesktop/Hal/Manager' -HAL_MGR_IFACE = 'org.freedesktop.Hal.Manager' -HAL_DEV_IFACE = 'org.freedesktop.Hal.Device' -REGEXP_SERUSB = '\/org\/freedesktop\/Hal\/devices\/usb_device['\ - 'a-z,A-Z,0-9,_]*serial_usb_[0-9]' - -VERSIONS = ['301'] - -class RFIDReader(RFIDDevice): - """ - RFIDRW-E-W interface. - """ - - def __init__(self): - - RFIDDevice.__init__(self) - self.last_tag = "" - self.tags = [] - self.ser = Serial() - self.device = '' - self.device_path = '' - self._connected = False - - loop = DBusGMainLoop() - self.bus = dbus.SystemBus(mainloop=loop) - hmgr_iface = dbus.Interface(self.bus.get_object(HAL_SERVICE, - HAL_MGR_PATH), HAL_MGR_IFACE) - - hmgr_iface.connect_to_signal('DeviceRemoved', self._device_removed_cb) - - def get_present(self): - """ - Checks if RFID-RW-USB device is present. - Returns True if so, False otherwise. - """ - hmgr_if = dbus.Interface(self.bus.get_object(HAL_SERVICE, HAL_MGR_PATH), - HAL_MGR_IFACE) - serialusb_devices = set(hmgr_if.FindDeviceStringMatch('serial.type', - 'usb')) & set(hmgr_if.FindDeviceStringMatch( - 'info.subsystem', 'tty')) - for i in serialusb_devices: - serialusb_if = dbus.Interface(self.bus.get_object(HAL_SERVICE, i), - HAL_DEV_IFACE) - if serialusb_if.PropertyExists('info.parent'): - parent_udi = str(serialusb_if.GetProperty('info.parent')) - parent = dbus.Interface(self.bus.get_object(HAL_SERVICE, - parent_udi), HAL_DEV_IFACE) - if parent.PropertyExists('info.linux.driver') and \ - str(parent.GetProperty('info.linux.driver')) == 'ftdi_sio': - device = str(serialusb_if.GetProperty('linux.device_file')) - ser = Serial(device, 9600, timeout=0.1) - ser.read(100) - ser.write('v') - ser.write('e') - ser.write('r') - ser.write('\x0D') - resp = ser.read(4) - if resp[0:-1] in VERSIONS: - self.device = device - self.device_path = i - return True - return False - - def do_connect(self): - """ - Connects to the device. - Returns True if successfull, False otherwise. - """ - retval = False - if self.get_present(): - try: - self.ser = Serial(self.device, 9600, timeout=0.1) - self._connected = True - if self._select_animal_tag: - #gobject.idle_add(self._loop) - gobject.timeout_add(1000, self._loop) - retval = True - except: - self._connected = False - return retval - - def do_disconnect(self): - """ - Disconnect from the device. - """ - self.ser.close() - self._connected = False - - def read_tag(self): - """ - Returns the last read value. - """ - return self.last_tag - - def _select_animal_tag(self): - """ - Sends the "Select Tag 2" (animal tag) command to the device. - """ - self.ser.read(100) - self.ser.write('s') - self.ser.write('t') - self.ser.write('2') - self.ser.write('\x0d') - resp = self.ser.read(3)[0:-1] - if resp == 'OK': - return True - return False - - def get_version(self): - """ - Sends the version command to the device and returns - a string with the device version. - """ - #self.ser.flushInput() - ver = "???" - self.ser.read(100) - self.ser.write('v') - self.ser.write('e') - self.ser.write('r') - self.ser.write('\x0d') - resp = self.ser.read(4)[0:-1] - if resp in VERSIONS: - return "RFIDRW-E-USB " + resp - return ver - - def _device_removed_cb(self, path): - """ - Called when a device is removed. - Checks if the removed device is itself and emits the "disconnected" - signal if so. - """ - if path == self.device_path: - self.device_path = '' - self.ser.close() - self._connected = False - self.tags = [] - self.emit("disconnected","RFID-RW-USB") - - def _loop(self): - """ - Threaded loop for reading data from the device. - """ - if not self._connected: - return False - - self.ser.read(100) - self.ser.write('r') - self.ser.write('a') - self.ser.write('t') - self.ser.write('\x0d') - resp = self.ser.read(33)[0:-1].split('_') - if resp.__len__() is not 6 or resp in self.tags: - return True - - self.tags.append(resp) - anbit_bin = utils.dec2bin(int(resp[2])) - reserved_bin = '00000000000000' - databit_bin = utils.dec2bin(int(resp[3])) - country_bin = utils.dec2bin(int(resp[0])) - while country_bin.__len__() < 10: - country_bin = '0' + country_bin - id_bin = utils.dec2bin(int(resp[1])) - while id_bin.__len__() < 10: - id_bin = '0' + id_bin - - tag_bin = anbit_bin + reserved_bin + databit_bin + country_bin + id_bin - data = utils.bin2hex(tag_bin) - self.emit("tag-read", data) - self.last_tag = data - #sleep(1) - return True - -# Testing -#if __name__ == '__main__': -# def handler(device, idhex): -# """ -# Handler for "tag-read" signal. -# Prints the tag id. -# """ -# print "ID: ", idhex -# -# dev = RFIDReader() -# if dev.get_present(): -# print "SIPI!" -# dev.do_connect() -# dev.connect('tag-read', handler) -# else: -# print "Not connected" -# -# mloop = gobject.MainLoop() -# mloop.run() -- cgit v0.9.1