Subversion Repositories HomeAutomation

Rev

Rev 738 | Blame | Last modification | View Log | SVN | RSS feed

  1. ###########################################################
  2. #
  3. # This class represents a can packet which should be
  4. # identifiable by its type and contents
  5. #
  6. ###########################################################
  7.  
  8. class CanPkt:
  9.    
  10.     STANDARD_ID_MASK = 0x1FF
  11.     EXTENDED_ID_MASK = 0x1FFFFFFF
  12.     DATA_MASK = 0xFF
  13.     DATA_LENGTH = 8
  14.    
  15.     nodeId = 0
  16.     extended = True
  17.     remote = False
  18.     data = []
  19.  
  20.     def __init__( self, id, data, extended = True, remote = False ):
  21.         if extended:
  22.             self.nodeId = id & self.EXTENDED_ID_MASK
  23.         else:
  24.             self.nodeId = id & self.STANDARD_ID_MASK
  25.         self.data = [val & self.DATA_MASK for val in data[:self.DATA_LENGTH]]
  26.         self.extended = extended
  27.         self.remote = remote
  28.  
  29.     def toString(self):
  30.         strpkt = 'PKT ' + '%08X' % self.nodeId
  31.         if self.extended:
  32.             strpkt += ' 1'
  33.         else:
  34.             strpkt += ' 0'
  35.         if self.remote:
  36.             strpkt += ' 1'
  37.         else:
  38.             strpkt += ' 0'
  39.         bytestrings = ''
  40.         for byte in self.data:
  41.             bytestrings = bytestrings + ' %02x' % byte
  42.         return (strpkt + bytestrings)
  43.    
  44.     @staticmethod
  45.     def stringToCanPkt(self, str):
  46.         """ Converts can message string to CanPkt class """
  47.         strbyteslist = str.split(' ')
  48.         nodeid = int('0x'+strbyteslist[1], 16)
  49.         intvalues = [int(val, 16) for val in strbyteslist[2:]]
  50.         extended = (intvalues[0] == 1)
  51.         remote = (intvalues[1] == 1)
  52.         pkt = CanPkt(nodeid, intvalues[2:], extended, remote)
  53.         return pkt
  54.  
  55.