added first drafts of simple gamelib
This commit is contained in:
parent
50fd8a6613
commit
8fc54d1b2d
|
@ -0,0 +1,53 @@
|
|||
import serialinterface
|
||||
import thread
|
||||
import threading
|
||||
import Queue
|
||||
import crcmod
|
||||
|
||||
class r0ket:
|
||||
def __init__(self, path2device):
|
||||
self.ser = serialinterface.SerialInterface(path2device, 115200, 0)
|
||||
self.free = threading.Lock()
|
||||
self.packets = Queue.Queue()
|
||||
thread.start_new_thread(self.readerThread,())
|
||||
self.setPacketLength(0x20)
|
||||
self.crc = crcmod.predefined.mkCrcFun('crc-ccitt-false')
|
||||
|
||||
def writeCommand(self, command, data):
|
||||
crc = self.crc(data)
|
||||
data += chr(crc>>8);
|
||||
data += chr(crc&0xFF);
|
||||
self.free.acquire()
|
||||
print 'sending command:', command, 'len:', len(data), 'data:', list(data)
|
||||
self.ser.writeMessage(command,data);
|
||||
|
||||
def readerThread(self):
|
||||
while True:
|
||||
try:
|
||||
(command, data) = self.ser.readMessage()
|
||||
if command == '1':
|
||||
self.newPacket(data)
|
||||
elif command == '2':
|
||||
self.free.release()
|
||||
elif command:
|
||||
while True:
|
||||
pass
|
||||
except Exception as e:
|
||||
print e
|
||||
|
||||
def newPacket(self, data):
|
||||
print "received:", list(data)
|
||||
self.packets.put(data)
|
||||
|
||||
def gotPacket(self):
|
||||
return not self.packets.empty()
|
||||
|
||||
def getPacket(self):
|
||||
return self.packets.get()
|
||||
|
||||
def sendPacket(self, packet):
|
||||
self.writeCommand('1', packet)
|
||||
|
||||
def setPacketLength(self, length):
|
||||
self.free.acquire()
|
||||
self.ser.writeMessage('6', '%c'%length)
|
|
@ -0,0 +1,92 @@
|
|||
import serial
|
||||
import string
|
||||
import sys
|
||||
import time
|
||||
|
||||
class SerialInterface:
|
||||
def __init__ ( self, path2device, baudrate, timeout=0):
|
||||
self.portopen = False
|
||||
while not self.portopen:
|
||||
try:
|
||||
self.ser = serial.Serial(path2device, baudrate)
|
||||
self.path2device = path2device
|
||||
self.baudrate = baudrate
|
||||
self.timeout = timeout+1
|
||||
self.ser.flushInput()
|
||||
self.ser.flushOutput()
|
||||
if timeout:
|
||||
self.ser.setTimeout(timeout+1)
|
||||
self.portopen = True
|
||||
except serial.SerialException:
|
||||
print "exception while opening"
|
||||
pass
|
||||
time.sleep(1)
|
||||
#print "done"
|
||||
def close(self):
|
||||
try:
|
||||
self.portopen = False
|
||||
self.ser.close()
|
||||
except serial.SerialException:
|
||||
pass
|
||||
def reinit(self):
|
||||
self.close()
|
||||
print "reopening"
|
||||
while not self.portopen:
|
||||
self.__init__(self.path2device, self.baudrate, self.timeout)
|
||||
time.sleep(1)
|
||||
print "done"
|
||||
|
||||
def writeMessage(self,command,message):
|
||||
enc = "\\"+ command + message.replace('\\','\\\\') + "\\0";
|
||||
#print 'writing %s' % list(enc)
|
||||
try:
|
||||
self.ser.write(enc)
|
||||
except :
|
||||
pass
|
||||
#self.reinit()
|
||||
|
||||
def readMessage(self):
|
||||
data = ""
|
||||
escaped = False
|
||||
stop = False
|
||||
start = False
|
||||
inframe = False
|
||||
command = ''
|
||||
while True:
|
||||
starttime = time.time()
|
||||
c = self.ser.read(1)
|
||||
endtime = time.time()
|
||||
if len(c) == 0: #A timout occured
|
||||
if endtime-starttime < self.timeout - 1:
|
||||
print "port broken"
|
||||
self.reinit()
|
||||
raise Exception()
|
||||
else:
|
||||
#print 'TIMEOUT'
|
||||
return (False, '')
|
||||
if escaped:
|
||||
if c == '\\':
|
||||
d = '\\'
|
||||
elif c == '0':
|
||||
stop = True
|
||||
inframe = False
|
||||
else:
|
||||
start = True
|
||||
inframe = True
|
||||
command = c
|
||||
data = ""
|
||||
escaped = False
|
||||
elif c == '\\':
|
||||
escaped = 1
|
||||
else:
|
||||
d = c
|
||||
|
||||
if start and inframe:
|
||||
start = False
|
||||
elif stop:
|
||||
#print 'received message: len=%d data=%s'%(len(data),data)
|
||||
#print 'received message. command=',command, "data=" ,list(data)
|
||||
return (command, data)
|
||||
elif escaped == False and inframe:
|
||||
data += str(d)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
from distutils.core import setup
|
||||
setup(name='r0ketrem0te',
|
||||
version='1.0',
|
||||
packages=['r0ketrem0te'],
|
||||
)
|
|
@ -0,0 +1,11 @@
|
|||
import r0ketrem0te.rem0te
|
||||
import time
|
||||
r = r0ketrem0te.rem0te.r0ket('/dev/ttyACM0')
|
||||
|
||||
while True:
|
||||
r.sendPacket("\x20GA\x00\x00\x00\x00\x01\x02\x03\x04\x01\x02\x03\x01\x02\x51\x01\x02\x03\x04\x00test\x00\x06\x07\x08")
|
||||
time.sleep(1)
|
||||
#packet = r.getPacket()
|
||||
#print list(packet)
|
||||
#r.sendPacket('12345678901234567890123456789012')
|
||||
|
Loading…
Reference in New Issue