Subversion Repositories HomeAutomation

Rev

Rev 738 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

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