You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.5 KiB
75 lines
2.5 KiB
from .IdiBusMaster import IdiBusSerialLine, IdiBusModule, IdiBusSMES
|
|
from .IdiBusSlave import IdiBusSlave
|
|
from .IdiBusDefs import comFuncList
|
|
|
|
class IdiBusUtil():
|
|
def __init__(self, line):
|
|
if not isinstance(line, IdiBusSerialLine):
|
|
raise TypeError("Line is not an IdiBusSerialLine")
|
|
self.line = line
|
|
def __del__(self):
|
|
self.line.close()
|
|
#Returns list with adresses of all active devices
|
|
def releaseLine(self):
|
|
self.line.close()
|
|
def scanBus(self,addr):
|
|
Dev = IdiBusModule(addr= addr, line=self.line)
|
|
if Dev.c_Init() == "OK":
|
|
return 1
|
|
else:
|
|
return 0
|
|
def scanBus(self,start, end):
|
|
addresses = []
|
|
for i in range(start,end):
|
|
Dev = IdiBusModule(addr= i, line=self.line)
|
|
if Dev.c_Init() == "OK":
|
|
addresses.append(i)
|
|
return addresses
|
|
def shutdownMaster(self):
|
|
#print(f"Trying to shutdown Master")
|
|
SelfAddress = 254
|
|
self.line.timeout = 0.01
|
|
SpareMaster = IdiBusSlave(SelfAddress, self.line)
|
|
self.line.flush_buffers()
|
|
msg = SpareMaster.await_message(10)
|
|
#print(msg)
|
|
if msg == None:
|
|
return -1
|
|
if comFuncList.IDIMMES_COM_C_Init.value == int(msg.getCMD()):
|
|
#print("Got c_Init")
|
|
resp = IdiBusSMES(SelfAddress, 2, 0)
|
|
SpareMaster.line.writeData(resp.getMsg())
|
|
msg = SpareMaster.await_message(1)
|
|
try:
|
|
if len(msg.data) == 0:
|
|
return -1
|
|
except Exception as e:
|
|
print(e)
|
|
return -1
|
|
|
|
#print(f'{msg.data}')
|
|
if msg.getMMPS() != 4:
|
|
#print(f"Got wrong mmps {msg.getMMPS()} != 4")
|
|
return -1
|
|
#print("Got order request")
|
|
resp = IdiBusSMES(SelfAddress, 2, 0)
|
|
a = bytearray()
|
|
a.append(5)
|
|
resp.addData(a)
|
|
msg = resp.getMsg()
|
|
SpareMaster.line.writeData(msg)
|
|
msg = SpareMaster.await_message(1)
|
|
try:
|
|
if len(msg.data) == 0:
|
|
return -1
|
|
except Exception as e:
|
|
print(e)
|
|
return -1
|
|
#print(f'{msg.data}')
|
|
|
|
if msg.getMMPS() != 8:
|
|
return -1
|
|
#print("Got order ans")
|
|
return 0
|
|
def recoverMaster(self):
|
|
print("Recover Master") |