- added HendiCtrl Driver
- added HendiCtrl Firmware git-svn-id: http://moon:8086/svn/projects/HendiControl@177 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import time
|
||||
import serial
|
||||
import sys
|
||||
|
||||
class HendiCtrl():
|
||||
def __init__(self, port, baudrate):
|
||||
self.ser = serial.Serial(port, baudrate)
|
||||
try:
|
||||
self.ser.open()
|
||||
except:
|
||||
self.ser.close()
|
||||
self.ser.open()
|
||||
|
||||
self.ser.timeout = 1.000
|
||||
self.prompt = b':'
|
||||
|
||||
def reset(self):
|
||||
self.ser.dtr = True
|
||||
self.ser.rts = False
|
||||
time.sleep(0.01)
|
||||
self.ser.dtr = True
|
||||
self.ser.rts = True
|
||||
|
||||
def enter_bootloader(self):
|
||||
self.ser.dtr = True
|
||||
self.ser.rts = False
|
||||
time.sleep(0.01)
|
||||
self.ser.dtr = False
|
||||
self.ser.rts = True
|
||||
|
||||
def firmware_update(self, filename):
|
||||
print("Start firmware update")
|
||||
self.enter_bootloader()
|
||||
self.ser.readline()
|
||||
|
||||
self.ser.flushInput()
|
||||
with open(filename, 'r') as fp:
|
||||
line_count = 0
|
||||
while (True):
|
||||
s = fp.readline()
|
||||
if s == '':
|
||||
break
|
||||
data = s.encode()
|
||||
self.ser.write(data)
|
||||
ack = self.ser.read()
|
||||
sys.stdout.write(ack.decode('utf-8'))
|
||||
sys.stdout.flush()
|
||||
if line_count == 64:
|
||||
line_count = 0
|
||||
sys.stdout.write("\n")
|
||||
|
||||
line_count += 1
|
||||
|
||||
self.ser.readline()
|
||||
self.ser.flushInput()
|
||||
self.ser.write(b'q')
|
||||
|
||||
def __write(self, s):
|
||||
self.ser.flushInput()
|
||||
data = s.encode()
|
||||
self.ser.write(data + b'\r')
|
||||
|
||||
def __read(self):
|
||||
# Read line echo
|
||||
self.ser.readline()
|
||||
|
||||
# Read answer line
|
||||
answer = self.ser.readline().decode('utf-8').replace('\r', '').replace('\n', '')
|
||||
if ':' in answer:
|
||||
result = answer.split(':')
|
||||
else:
|
||||
result = answer
|
||||
|
||||
return result
|
||||
|
||||
def cmd(self, s):
|
||||
self.__write(s)
|
||||
rsp = hendi.__read()
|
||||
print(rsp)
|
||||
if "OK" in rsp[0]:
|
||||
return rsp[1]
|
||||
return None
|
||||
|
||||
def _debugEnable(self, enable):
|
||||
return self.cmd("D" + str(int(enable)))
|
||||
|
||||
def _isDebugEnable(self):
|
||||
return self.cmd("D?")
|
||||
|
||||
def getSoftwareIdentifier(self):
|
||||
return self.cmd("I?")
|
||||
|
||||
def getSoftwareVersion(self):
|
||||
return self.cmd("V?")
|
||||
|
||||
def getState(self):
|
||||
return self.cmd("T?")
|
||||
|
||||
def remoteEnable(self, enable):
|
||||
return self.cmd("R" + str(int(enable)))
|
||||
|
||||
def isRemoteEnable(self):
|
||||
return self.cmd("R?")
|
||||
|
||||
def setPower(self, power_digits):
|
||||
return self.cmd("P" + str(power_digits))
|
||||
|
||||
def getPower(self):
|
||||
return self.cmd("P?")
|
||||
|
||||
def getSwitch(self):
|
||||
return self.cmd("S?")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
hendi = HendiCtrl('/dev/ttyUSB0', 115200)
|
||||
|
||||
hendi.firmware_update("HendiCtrl.srec")
|
||||
hendi.reset()
|
||||
time.sleep(0.5)
|
||||
|
||||
hendi.getState()
|
||||
hendi.getSoftwareIdentifier()
|
||||
hendi.getSoftwareVersion()
|
||||
hendi.remoteEnable(True)
|
||||
|
||||
if hendi.isRemoteEnable():
|
||||
switch_state = 1
|
||||
for p in range(0, 4000, 10):
|
||||
hendi.setPower(p)
|
||||
hendi.setSwitch(switch_state)
|
||||
switch_state = not switch_state
|
||||
|
||||
hendi.remoteEnable(False)
|
||||
|
||||
print ("End of program.")
|
||||
|
||||
Reference in New Issue
Block a user