- 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:
2019-03-30 15:19:39 +00:00
parent 2e57afa19a
commit 7906d56e7d
2 changed files with 610 additions and 0 deletions
+140
View File
@@ -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.")