1*19c3b8c2SApple OSS Distributionsfrom __future__ import absolute_import 2*19c3b8c2SApple OSS Distributions 3*19c3b8c2SApple OSS Distributionsfrom builtins import object 4*19c3b8c2SApple OSS Distributions 5*19c3b8c2SApple OSS Distributionsimport logging 6*19c3b8c2SApple OSS Distributions 7*19c3b8c2SApple OSS Distributions 8*19c3b8c2SApple OSS Distributionsclass Message(object): 9*19c3b8c2SApple OSS Distributions """represents a message of Remote serial protocol""" 10*19c3b8c2SApple OSS Distributions def __init__(self, data): 11*19c3b8c2SApple OSS Distributions super(Message, self).__init__() 12*19c3b8c2SApple OSS Distributions self.data = data 13*19c3b8c2SApple OSS Distributions 14*19c3b8c2SApple OSS Distributions def __str__(self): 15*19c3b8c2SApple OSS Distributions return "Message: %s" % (self.data) 16*19c3b8c2SApple OSS Distributions 17*19c3b8c2SApple OSS Distributions def getData(self): 18*19c3b8c2SApple OSS Distributions #TODO need to parse data and unescape 19*19c3b8c2SApple OSS Distributions return self.data 20*19c3b8c2SApple OSS Distributions 21*19c3b8c2SApple OSS Distributions def getRSPByteData(self): 22*19c3b8c2SApple OSS Distributions retval = ''.join(['$',self.data,'#']) 23*19c3b8c2SApple OSS Distributions checksum = 0 24*19c3b8c2SApple OSS Distributions for i in self.data: 25*19c3b8c2SApple OSS Distributions checksum += ord(i) 26*19c3b8c2SApple OSS Distributions checksum = checksum % 0x100 27*19c3b8c2SApple OSS Distributions checksum_str = "{:02x}".format(checksum) 28*19c3b8c2SApple OSS Distributions retval += checksum_str 29*19c3b8c2SApple OSS Distributions return retval 30*19c3b8c2SApple OSS Distributions 31*19c3b8c2SApple OSS Distributions @classmethod 32*19c3b8c2SApple OSS Distributions def fromRSPByteData(cls, bytedata): 33*19c3b8c2SApple OSS Distributions data_begin = 0 34*19c3b8c2SApple OSS Distributions data_end = 0 35*19c3b8c2SApple OSS Distributions try: 36*19c3b8c2SApple OSS Distributions data_begin = bytedata.index('$') 37*19c3b8c2SApple OSS Distributions data_end = bytedata.index('#') 38*19c3b8c2SApple OSS Distributions except ValueError as e: 39*19c3b8c2SApple OSS Distributions logging.error('Invalid bytedata considered as message %s' % bytedata) 40*19c3b8c2SApple OSS Distributions return None 41*19c3b8c2SApple OSS Distributions 42*19c3b8c2SApple OSS Distributions #validate the data 43*19c3b8c2SApple OSS Distributions if data_begin + 1 >= data_end: 44*19c3b8c2SApple OSS Distributions logging.debug("empty message %s"%bytedata) 45*19c3b8c2SApple OSS Distributions data_begin -= 1 46*19c3b8c2SApple OSS Distributions 47*19c3b8c2SApple OSS Distributions data_begin += 1 48*19c3b8c2SApple OSS Distributions logging.debug("Creating message from data %s" % bytedata[data_begin:data_end]) 49*19c3b8c2SApple OSS Distributions ret_obj = cls(bytedata[data_begin:data_end]) 50*19c3b8c2SApple OSS Distributions return ret_obj 51*19c3b8c2SApple OSS Distributions 52*19c3b8c2SApple OSS Distributionsclass ProtocolAcknowledgement(Message): 53*19c3b8c2SApple OSS Distributions """Ack Messages""" 54*19c3b8c2SApple OSS Distributions def __init__(self, ack_str): 55*19c3b8c2SApple OSS Distributions super(ProtocolAcknowledgement, self).__init__(ack_str) 56*19c3b8c2SApple OSS Distributions self.data = ack_str 57*19c3b8c2SApple OSS Distributions 58*19c3b8c2SApple OSS Distributions def getRSPByteData(self): 59*19c3b8c2SApple OSS Distributions return self.data 60*19c3b8c2SApple OSS Distributions 61*19c3b8c2SApple OSS Distributions 62*19c3b8c2SApple OSS DistributionsOKMessage = Message('OK') 63*19c3b8c2SApple OSS Distributions 64*19c3b8c2SApple OSS DistributionsAckMessage = ProtocolAcknowledgement('+') 65*19c3b8c2SApple OSS DistributionsNAckMessage = ProtocolAcknowledgement('-') 66*19c3b8c2SApple OSS DistributionsUnSupportedMessage = Message('') 67