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.
30 lines
951 B
30 lines
951 B
from .IdiBusSerialLine import *
|
|
from .IdiBusParse import IdiBusMMESParser, IdiBusMMESGParser
|
|
|
|
SelfAddress = 254
|
|
|
|
#Emulates slave module to communicate with master
|
|
class IdiBusSlave():
|
|
def __init__(self,address,line:IdiBusSerialLine):
|
|
self.address = address
|
|
self.line = line
|
|
|
|
def await_message(self, retries):
|
|
addr = 0
|
|
for i in range(0,retries):
|
|
msg = self.line.readData(self.line.maxPacketSize)
|
|
# No response
|
|
if len(msg) < 3:
|
|
continue
|
|
parser = IdiBusMMESParser(msg)
|
|
# Corrupted
|
|
if parser.validate() == -1:
|
|
continue
|
|
# This one is not for this Slave
|
|
if parser.getAddress() != self.address:
|
|
continue
|
|
# Got a correct message
|
|
if parser.getMesType() == 1:
|
|
parser = IdiBusMMESGParser(msg)
|
|
return parser
|
|
return None |