Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/plugins/rfid/tis2000.py
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-07-18 21:32:35 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-07-18 21:32:35 (GMT)
commitcd53d44d51fe9ef89f05dfdb4e35b721ace4175d (patch)
tree748c304ca3cef575fff3aaefe4e7d3e2d76dd857 /plugins/rfid/tis2000.py
parent3f6e427d5e9f45544d23b5af763a9507a17397d4 (diff)
create turtle flags
Diffstat (limited to 'plugins/rfid/tis2000.py')
-rw-r--r--plugins/rfid/tis2000.py252
1 files changed, 0 insertions, 252 deletions
diff --git a/plugins/rfid/tis2000.py b/plugins/rfid/tis2000.py
deleted file mode 100644
index 91d1991..0000000
--- a/plugins/rfid/tis2000.py
+++ /dev/null
@@ -1,252 +0,0 @@
-from device import RFIDDevice
-from serial import Serial
-import dbus
-from dbus.mainloop.glib import DBusGMainLoop
-import gobject
-import re
-from time import sleep
-
-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]'
-
-STATE_WAITING = 0
-STATE_WAITING2 = 1
-STATE_READING = 2
-
-class RFIDReader(RFIDDevice):
- """
- TIS-2000 interface.
- """
-
- def __init__(self):
-
- RFIDDevice.__init__(self)
- self.last_tag = ""
- self.ser = Serial()
- self.device = ''
- self.device_path = ''
- self._connected = False
- self._state = STATE_WAITING
-
- 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 TI-S2000 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)
- tiusb_devices = set(hmgr_if.FindDeviceStringMatch('serial.type',
- 'usb')) & set(hmgr_if.FindDeviceStringMatch(
- 'info.product', 'TUSB3410 Microcontroller'))
- for i in tiusb_devices:
- tiusb_if = dbus.Interface(self.bus.get_object(HAL_SERVICE, i),
- HAL_DEV_IFACE)
- if tiusb_if.PropertyExists('linux.device_file'):
- self.device = str(tiusb_if.GetProperty('linux.device_file'))
- 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
- self._escape()
- self._clear()
- self._format()
- gobject.idle_add(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 write_tag(self, hexval):
- """
- Usage: write_tag(hexval)
-
- Writes the hexadecimal string "hexval" into the tag.
- Returns True if successfull, False otherwise.
- """
- #self.ser.flushInput()
- reg = re.compile('([^0-9A-F]+)')
- if not (hexval.__len__() == 16 and reg.findall(hexval) == []):
- return False
- self.ser.read(100)
- self.ser.write('P')
- for i in hexval:
- self.ser.write(i)
- sleep(1)
- resp = self.ser.read(64)
- resp = resp.split()[0]
- if resp == "P0":
- return True
- else:
- return False
-
- def _escape(self):
- """
- Sends the scape command to the TIS-2000 device.
- """
- try:
- #self.ser.flushInput()
- self.ser.read(100)
- self.ser.write('\x1B')
- resp = self.ser.read()
- if resp == 'E':
- return True
- else:
- return False
- except:
- return False
-
- def _format(self):
- """
- Sends the format command to the TIS-2000 device.
- """
- try:
- #self.ser.flushInput()
- self.ser.read(100)
- self.ser.write('F')
- resp = self.ser.read()
- if resp == 'F':
- return True
- else:
- return False
- except:
- return False
-
- def _clear(self):
- """
- Sends the clear command to the TIS-2000 device.
- """
- try:
- #self.ser.flushInput()
- self.ser.read(100)
- self.ser.write('C')
- resp = self.ser.read()
- if resp == 'C':
- return True
- else:
- return False
- except:
- return False
-
- def get_version(self):
- """
- Sends the version command to the TIS-2000 device and returns
- a string with the device version.
- """
- #self.ser.flushInput()
- self.ser.read(100)
- self.ser.write('V')
- version = []
- tver = ""
- while 1:
- resp = self.ser.read()
- if resp == '\x0A' or resp == '':
- break
- if resp != '\n' and resp != '\r':
- version.append(resp)
- for i in version:
- tver = tver + i
- if tver != "":
- return tver
- return "Unknown"
-
- 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.emit("disconnected","TIS-2000")
-
- def _loop(self):
- """
- Threaded loop for reading data sent from the TIS-2000.
- """
- if not self._connected:
- return False
-
- if self._state is STATE_WAITING:
- data = self.ser.read()
- if data in ['W', 'R']:
- self._state = STATE_WAITING2
- return True
-
- elif self._state is STATE_WAITING2:
- data = self.ser.read()
- if data.isspace():
- self._state = STATE_READING
- else:
- self._clear()
- self._state = STATE_WAITING
- return True
-
- elif self._state is STATE_READING:
- data = self.ser.read(16)
- if data.__len__() < 16:
- self._clear()
- self._state = STATE_WAITING
- else:
- reg = re.compile('([^0-9A-F]+)')
- if reg.findall(data) == []:
- self.emit("tag-read", data)
- self.last_tag = data
- self._clear()
- self._state = STATE_WAITING
- return True
- 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():
-# dev.do_connect()
-# dev.connect('tag-read', handler)
-# else:
-# print "Not connected"
-#
-# mloop = gobject.MainLoop()
-# mloop.run()