mirror of
https://github.com/brmlab/edubrm.git
synced 2025-06-08 12:53:59 +02:00
start rewriting device part in python
This commit is contained in:
parent
f482e0618f
commit
7994cd6095
3 changed files with 23 additions and 151 deletions
2
README
2
README
|
@ -14,4 +14,4 @@ Software
|
||||||
--------
|
--------
|
||||||
- required packages:
|
- required packages:
|
||||||
* python-qt4-devel
|
* python-qt4-devel
|
||||||
* python-serial
|
* python-usb (>= 1.0)
|
||||||
|
|
|
@ -1,156 +1,30 @@
|
||||||
import serial
|
import usb
|
||||||
|
|
||||||
class Device:
|
class Device:
|
||||||
|
|
||||||
|
VENDORID = 0x1fc9
|
||||||
|
PRODUCTID = 0x0003
|
||||||
|
INSIZE = 64
|
||||||
|
OUTSIZE = 2
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.sctrl = serial.Serial()
|
usbdev = usb.core.find(idVendor = self.VENDORID, idProduct = self.PRODUCTID)
|
||||||
self.sdata = serial.Serial()
|
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):
|
# TODO: VERSION ?
|
||||||
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: PWM
|
# TODO: PWM
|
||||||
# TODO: SPI
|
# TODO: SPI
|
||||||
|
# TODO: SETPINS
|
||||||
|
# TODO: CLEARPINS
|
||||||
|
|
||||||
"""
|
def state(self):
|
||||||
Read current configuration
|
# TODO: format?
|
||||||
|
return self.epi.read(self.INSIZE)
|
||||||
* 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'
|
|
||||||
|
|
|
@ -3,5 +3,3 @@
|
||||||
from device import Device
|
from device import Device
|
||||||
|
|
||||||
d = Device()
|
d = Device()
|
||||||
d.open('', '')
|
|
||||||
d.close()
|
|
Loading…
Add table
Add a link
Reference in a new issue