start rewriting device part in python

This commit is contained in:
Pavol Rusnak 2011-04-05 00:37:34 +02:00
parent f482e0618f
commit 7994cd6095
3 changed files with 23 additions and 151 deletions

2
README
View file

@ -14,4 +14,4 @@ Software
--------
- required packages:
* python-qt4-devel
* python-serial
* python-usb (>= 1.0)

View file

@ -1,156 +1,30 @@
import serial
import usb
class Device:
VENDORID = 0x1fc9
PRODUCTID = 0x0003
INSIZE = 64
OUTSIZE = 2
def __init__(self):
self.sctrl = serial.Serial()
self.sdata = serial.Serial()
usbdev = usb.core.find(idVendor = self.VENDORID, idProduct = self.PRODUCTID)
if usbdev == None:
raise Exception('EduBRM device not found')
usbdev.set_configuration()
self.epo = usb.util.find_descriptor(usbdev.get_interface_altsetting(),
custom_match = lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
self.epi = usb.util.find_descriptor(usbdev.get_interface_altsetting(),
custom_match = lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN)
def open(self, ttyctrl, ttydata):
self.sctrl.port = ttyctrl
self.sdata.port = ttydata
self.sctrl.baudrate = 115200
self.sdata.baudrate = 921600
self.sctrl.open()
self.sdata.open()
def close(self):
self.sdata.close()
self.sctrl.close()
def cmd(self, buf):
if not self.sctrl.isOpen():
return None
self.sctrl.write(buf+'\n')
return self.sctrl.readline().strip()
def send(self, buf):
if not self.sdata.isOpen():
return -1
return self.sdata.write(buf)
def recv(self, size):
if not self.sdata.isOpen():
return None
return self.sdata.read(size)
"""
Ping the device
C> PING
E> PONG
"""
def ping(self):
return self.cmd('PING') == 'PONG'
"""
Read version
C> VERSION
E> VERSION EDUBRM 1.0.0
"""
def version(self):
r = self.cmd('VERSION')
if r and r.startswith('VERSION EDUBRM '):
return r[15:]
return None
# TODO: ANALOG PINS
# TODO: VERSION ?
# TODO: PWM
# TODO: SPI
# TODO: SETPINS
# TODO: CLEARPINS
"""
Read current configuration
* O = output
* I = input
* F = input with glitch filter
* P = input with pull-up resistor(10kOhm)
* A = input with pull-up resistor and glitch filter
* Letter in uppercase means that pin is permitted
* Letter in lowercase means pin is not permitted
C> CFGIO
E> CFGIO FOOOPPPPPPPPPPPPOPfPPPPPPIIioAOP
"""
def cfgio(self):
r = self.cmd('CFGIO')
if r and r.startswith('CFGIO '):
return r[6:]
return None
"""
Configure GPIO
C> CFGIO iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
E> CFGIO OK
"""
def cfgio(self, state):
return self.cmd('CFGIO ' + state) == 'CFGIO OK'
"""
Read all inputs
C> GETIO
E> GETIO 10011111111111110111111111111101
"""
def getio(self):
r = self.cmd('GETIO')
if r and r.startswith('GETIO '):
return r[6:]
return None
"""
Set all outputs to logical 1
C> SETIO 11111111111111111111111111111111
E> SETIO OK
"""
def setio(self, state):
return self.cmd('SETIO ' + state) == 'SETIO OK'
"""
Set all outputs to logical 0
C> CLRIO 11111111111111111111111111111111
E> CLRIO OK
"""
def clrio(self, state):
return self.cmd('CLRIO ' + state) == 'CLRIO OK'
"""
Set oposite state on specified pin for specified duration
C> PULSE 8 100
E> PULSE OK
"""
def pulse(self, pin, duration):
return self.cmd('PULSE ' + str(pin) + ' ' + str(duration)) == 'PULSE OK'
"""
Set data transmission (from PC to mainboard)
C> DATAUP 10011111111111110111111111111101
E> DATAUP OK
"""
def dataup(self, state):
return self.cmd('DATAUP ' + state) == 'DATAUP OK'
"""
Set data transmission (from mainboard to PC)
C> DATADOWN 10011111111111110111111111111101
E> DATADOWN OK
"""
def datadown(self, state):
return self.cmd('DATADOWN ' + state) == 'DATADOWN OK'
"""
Stop data transmission in both directions
C> DATASTOP
E> DATASTOP OK
"""
def datastop(self):
return self.cmd('DATASTOP') == 'DATASTOP OK'
def state(self):
# TODO: format?
return self.epi.read(self.INSIZE)

View file

@ -3,5 +3,3 @@
from device import Device
d = Device()
d.open('', '')
d.close()