Subversion Repositories HomeAutomation

Rev

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

Rev 746 Rev 752
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
import logging as log
7
 
8
 
8
class CanPkt:
9
class CanPkt:
9
   
10
   
10
    STANDARD_ID_MASK = 0x1FF
11
    STANDARD_ID_MASK = 0x1FF
11
    EXTENDED_ID_MASK = 0x1FFFFFFF
12
    EXTENDED_ID_MASK = 0x1FFFFFFF
12
    DATA_MASK = 0xFF
13
    DATA_MASK = 0xFF
13
    DATA_LENGTH = 8
14
    DATA_LENGTH = 8
14
   
15
   
15
    nodeId = 0
16
    nodeId = 0
16
    extended = True
17
    extended = True
17
    remote = False
18
    remote = False
18
    data = []
19
    data = []
19
 
20
 
20
    def __init__( self, id, data, extended = True, remote = False ):
21
    def __init__( self, id, data, extended = True, remote = False ):
21
        if extended:
22
        if extended:
22
            self.nodeId = id & self.EXTENDED_ID_MASK
23
            self.nodeId = id & self.EXTENDED_ID_MASK
23
        else:
24
        else:
24
            self.nodeId = id & self.STANDARD_ID_MASK
25
            self.nodeId = id & self.STANDARD_ID_MASK
25
        self.data = [val & self.DATA_MASK for val in data[:self.DATA_LENGTH]]
26
        self.data = [val & self.DATA_MASK for val in data[:self.DATA_LENGTH]]
26
        self.extended = extended
27
        self.extended = extended
27
        self.remote = remote
28
        self.remote = remote
28
 
29
 
29
    def toString(self):
30
    def toString(self):
30
        strpkt = 'PKT ' + '%08X' % self.nodeId
31
        strpkt = 'PKT ' + '%08X' % self.nodeId
31
        if self.extended:
32
        if self.extended:
32
            strpkt += ' 1'
33
            strpkt += ' 1'
33
        else:
34
        else:
34
            strpkt += ' 0'
35
            strpkt += ' 0'
35
        if self.remote:
36
        if self.remote:
36
            strpkt += ' 1'
37
            strpkt += ' 1'
37
        else:
38
        else:
38
            strpkt += ' 0'
39
            strpkt += ' 0'
39
        bytestrings = ''
40
        bytestrings = ''
40
        for byte in self.data:
41
        for byte in self.data:
41
            bytestrings = bytestrings + ' %02x' % byte
42
            bytestrings = bytestrings + ' %02x' % byte
42
        return (strpkt + bytestrings)
43
        return (strpkt + bytestrings)
43
   
44
   
44
    @staticmethod
45
    @staticmethod
45
    def stringToCanPkt(self, str):
46
    def stringToCanPkt(self, str):
46
        """ Converts can message string to CanPkt class """
47
        """ Converts can message string to CanPkt class """
-
 
48
        if len(str) > 40:
-
 
49
            str = str[:40]
-
 
50
            log.debug('WARNING: Oversized string packet truncated to: ' + str)
-
 
51
 
47
        strbyteslist = str.split(' ')
52
        strbyteslist = str.split(' ')
48
        nodeid = int('0x'+strbyteslist[1], 16)
53
        nodeid = int('0x'+strbyteslist[1], 16)
49
        intvalues = [int(val, 16) for val in strbyteslist[2:]]
54
        intvalues = [int(val, 16) for val in strbyteslist[2:]]
50
        extended = (intvalues[0] == 1)
55
        extended = (intvalues[0] == 1)
51
        remote = (intvalues[1] == 1)
56
        remote = (intvalues[1] == 1)
52
        pkt = CanPkt(nodeid, intvalues[2:], extended, remote)
57
        pkt = CanPkt(nodeid, intvalues[2:], extended, remote)
53
        return pkt
58
        return pkt
54
 
-
 
55
   
59
 
-
 
60