Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
736 olof 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:
738 olof 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):
746 olof 30
        strpkt = 'PKT ' + '%08X' % self.nodeId
738 olof 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:
746 olof 41
            bytestrings = bytestrings + ' %02x' % byte
738 olof 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)
746 olof 49
        intvalues = [int(val, 16) for val in strbyteslist[2:]]
738 olof 50
        extended = (intvalues[0] == 1)
51
        remote = (intvalues[1] == 1)
52
        pkt = CanPkt(nodeid, intvalues[2:], extended, remote)
53
        return pkt
54
 
55