33import can
44
55
6- _TX_MODE = 0
7- _TX_MODE__STOP = 0 # global, local
8- _TX_MODE__TX_CONT = 1 # global, local
9- _TX_MODE__PER_PGN = 2 # global only
10- _TX_MODE__TX_ONCE = 3 # local only
11- _TX_RATE_SEC = 1
12- _DATA = 2
6+ _INDIVIDUAL_TX_MODE__TX_CONT = 0
7+ _INDIVIDUAL_TX_MODE__TX_ONCE = 1
8+ _TX_RATE_SEC = 2
9+ _DATA = 3
1310
1411
1512class Transmitter :
@@ -18,9 +15,12 @@ def __init__(self, J1939: dict):
1815 self .bus : can .BusABC = None
1916 self .PGNs_pending_tx = {}
2017
21- self .global_tx_mode = _TX_MODE__STOP # _TX_MODE__STOP, _TX_MODE__TX_CONT, _TX_MODE__PER_PGN
18+ self .global_tx_mode__stop = True
19+ self .global_tx_mode__cont = False
20+ self .global_tx_mode__per_pgn = False
2221 self .tx_CAN_IDs = {} # {(CAN_ID: int, is_extended: bool): {
23- # _TX_MODE: _TX_MODE__STOP, _TX_MODE__TX_CONT, _TX_MODE__TX_ONCE
22+ # _INDIVIDUAL_TX_MODE__TX_CONT: bool,
23+ # _INDIVIDUAL_TX_MODE__TX_ONCE: bool,
2424 # _TX_RATE_SEC: #,
2525 # _DATA: list
2626 # }
@@ -32,7 +32,8 @@ def register_tx_PGN(self, *, pgn, priority, source_address, tx_rate_ms):
3232 self .J1939_CAN_IDs [pgn ] = (can_id , True )
3333 tx_rate_sec = tx_rate_ms / 1000
3434 self .tx_CAN_IDs [(can_id , True )] = {
35- _TX_MODE : _TX_MODE__STOP ,
35+ _INDIVIDUAL_TX_MODE__TX_CONT : False ,
36+ _INDIVIDUAL_TX_MODE__TX_ONCE : False ,
3637 _TX_RATE_SEC : tx_rate_sec ,
3738 _DATA : [0 for _ in range (self ._J1939 [pgn ]['PGN Data Length' ])]
3839 }
@@ -43,42 +44,49 @@ def send_periodic(self, can_id, is_extended):
4344
4445 while True :
4546 time .sleep (signal_spec [_TX_RATE_SEC ])
46- if self .global_tx_mode == _TX_MODE__TX_CONT or signal_spec [_TX_MODE ] == _TX_MODE__TX_CONT :
47+ if self .global_tx_mode__cont or (self .global_tx_mode__per_pgn and signal_spec [_INDIVIDUAL_TX_MODE__TX_CONT ]):
48+ # transmit can message with 'can_id' this cycle
4749 pass
48- elif self . global_tx_mode in [ _TX_MODE__STOP , _TX_MODE__PER_PGN ] \
49- and signal_spec [ _TX_MODE ] == _TX_MODE__TX_ONCE :
50- signal_spec [_TX_MODE ] = _TX_MODE__STOP
50+ elif signal_spec [ _INDIVIDUAL_TX_MODE__TX_ONCE ]:
51+ # transmit can message with 'can_id' this cycle and stop
52+ signal_spec [_INDIVIDUAL_TX_MODE__TX_ONCE ] = False
5153 else :
54+ # do not transmit can message with 'can_id' this cycle
5255 continue
5356
5457 if self .bus is not None :
5558 try :
56- self .bus .send (can .Message (arbitration_id = can_id , is_extended_id = is_extended ,
57- data = signal_spec [_DATA ]))
59+ self .bus .send (can .Message (arbitration_id = can_id , is_extended_id = is_extended , data = signal_spec [_DATA ]))
5860 except can .CanOperationError :
5961 pass
6062
6163 def set_tx_mode_stop (self , pgn = None ):
62- if pgn is None :
63- self .global_tx_mode = _TX_MODE__STOP
64- else :
65- self .tx_CAN_IDs [self .J1939_CAN_IDs [pgn ]][_TX_MODE ] = _TX_MODE__STOP
64+ if pgn is None : # global
65+ self .global_tx_mode__stop = True
66+ self .global_tx_mode__cont = False
67+ self .global_tx_mode__per_pgn = False
68+ else : # individual
69+ self .tx_CAN_IDs [self .J1939_CAN_IDs [pgn ]][_INDIVIDUAL_TX_MODE__TX_CONT ] = False
6670
6771 def set_tx_mode_continuous (self , pgn = None ):
68- if pgn is None :
69- self .global_tx_mode = _TX_MODE__TX_CONT
70- else :
71- self .tx_CAN_IDs [self .J1939_CAN_IDs [pgn ]][_TX_MODE ] = _TX_MODE__TX_CONT
72+ if pgn is None : # global
73+ self .global_tx_mode__stop = False
74+ self .global_tx_mode__cont = True
75+ self .global_tx_mode__per_pgn = False
76+ else : # individual
77+ self .tx_CAN_IDs [self .J1939_CAN_IDs [pgn ]][_INDIVIDUAL_TX_MODE__TX_CONT ] = True
7278
7379 def set_tx_mode_per_PGN (self ):
74- self .global_tx_mode = _TX_MODE__PER_PGN
80+ self .global_tx_mode__stop = False
81+ self .global_tx_mode__cont = False
82+ self .global_tx_mode__per_pgn = True
7583
7684 def set_tx_once (self , pgn = None ):
77- if pgn is None :
85+ if pgn is None : # global
7886 for signal_spec in self .tx_CAN_IDs .values ():
79- signal_spec [_TX_MODE ] = _TX_MODE__TX_ONCE
80- else :
81- self .tx_CAN_IDs [self .J1939_CAN_IDs [pgn ]][_TX_MODE ] = _TX_MODE__TX_ONCE
87+ signal_spec [_INDIVIDUAL_TX_MODE__TX_ONCE ] = True
88+ else : # individual
89+ self .tx_CAN_IDs [self .J1939_CAN_IDs [pgn ]][_INDIVIDUAL_TX_MODE__TX_ONCE ] = True
8290
8391 def modify_pgn_tx_rate (self , pgn , tx_rate_ms ):
8492 tx_rate_sec = tx_rate_ms / 1000
0 commit comments