- renamed get/SetPower to get/setPowerdigits() git-svn-id: http://moon:8086/svn/projects/HendiControl@187 fda53097-d464-4ada-af97-ba876c37ca34
167 lines
3.2 KiB
Python
167 lines
3.2 KiB
Python
#!/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')
|
|
self.ser.flushOutput()
|
|
|
|
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 = self.__read()
|
|
print(rsp)
|
|
if "OK" in rsp[0]:
|
|
return rsp[1]
|
|
return None
|
|
|
|
def getCapabilties(self):
|
|
caps = {
|
|
"name" : self.getSoftwareIdentifier(),
|
|
"ver" : self.getSoftwareVersion(),
|
|
"pwr_watts_min" : 500,
|
|
"pwr_watts_max" : 3500,
|
|
"pwr_digits_min" : 4095,
|
|
"pwr_digits_max" : 0
|
|
}
|
|
return caps
|
|
|
|
def getInfo(self):
|
|
result = {
|
|
'caps' : self.getCapabilties(),
|
|
'state' : self.getState(),
|
|
'pwr_digits' : self.getPowerDigits(),
|
|
'Switch_state' : self.getSwitch()
|
|
}
|
|
return result
|
|
|
|
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 setPowerDigits(self, power_digits):
|
|
return self.cmd("P" + str(power_digits))
|
|
|
|
def getPowerDigits(self):
|
|
return self.cmd("P?")
|
|
|
|
def setSwitch(self, enable):
|
|
return self.cmd("S" + str(int(enable)))
|
|
|
|
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.setPower(1234)
|
|
hendi.setSwitch(1)
|
|
|
|
hendi.remoteEnable(True)
|
|
if hendi.isRemoteEnable():
|
|
switch_state = 1
|
|
for p in range(0, 4000, 10):
|
|
hendi.setPowerDigits(p)
|
|
hendi.setSwitch(switch_state)
|
|
switch_state = not switch_state
|
|
|
|
hendi.remoteEnable(False)
|
|
|
|
print ("End of program.")
|
|
|