@@ -721,6 +721,73 @@ def __eq__(self, other):
721
721
)
722
722
)
723
723
724
+ @attr .s (cmp = False )
725
+ class Pdu (object ):
726
+ """
727
+ Represents a PDU.
728
+
729
+ PDUs are hierarchical groups of signals which are needed to represent Flexray busses
730
+ Whereas a PDU is the same than a frame on CAN bus, at flexray a frame may consist of
731
+ multiple PDUs (a bit like multiple signal layout for multiplexed can frames).
732
+ This class is only used for flexray busses.
733
+ """
734
+
735
+ name = attr .ib (default = "" ) # type: str
736
+ size = attr .ib (default = 0 ) # type: int
737
+ triggering_name = attr .ib (default = "" ) # type: str
738
+ pdu_type = attr .ib (default = "" ) # type: str
739
+ port_type = attr .ib (default = "" ) # type: str
740
+ signals = attr .ib (factory = list ) # type: typing.MutableSequence[Signal]
741
+ signalGroups = attr .ib (factory = list ) # type: typing.MutableSequence[SignalGroup]
742
+
743
+ def add_signal (self , signal ):
744
+ # type: (Signal) -> Signal
745
+ """
746
+ Add Signal to Pdu.
747
+
748
+ :param Signal signal: Signal to be added.
749
+ :return: the signal added.
750
+ """
751
+ self .signals .append (signal )
752
+ return self .signals [len (self .signals ) - 1 ]
753
+ def add_signal_group (self , Name , Id , signalNames ):
754
+ # type: (str, int, typing.Sequence[str]) -> None
755
+ """Add new SignalGroup to the Frame. Add given signals to the group.
756
+
757
+ :param str Name: Group name
758
+ :param int Id: Group id
759
+ :param list of str signalNames: list of Signal names to add. Non existing names are ignored.
760
+ """
761
+ newGroup = SignalGroup (Name , Id )
762
+ self .signalGroups .append (newGroup )
763
+ for signal in signalNames :
764
+ signal = signal .strip ()
765
+ if signal .__len__ () == 0 :
766
+ continue
767
+ signalId = self .signal_by_name (signal )
768
+ if signalId is not None :
769
+ newGroup .add_signal (signalId )
770
+
771
+ def get_signal_group_for_signal (self , signal_to_find ):
772
+ for signal_group in self .signalGroups :
773
+ for signal in signal_group :
774
+ if signal == signal_to_find :
775
+ return signal_group
776
+ return None
777
+
778
+ def signal_by_name (self , name ):
779
+ # type: (str) -> typing.Union[Signal, None]
780
+ """
781
+ Get signal by name.
782
+
783
+ :param str name: signal name to be found.
784
+ :return: signal with given name or None if not found
785
+ """
786
+ for signal in self .signals :
787
+ if signal .name == name :
788
+ return signal
789
+ return None
790
+
724
791
725
792
@attr .s (cmp = False )
726
793
class Frame (object ):
@@ -764,6 +831,9 @@ class Frame(object):
764
831
# ('cycleTime', '_cycleTime', int, None),
765
832
# ('sendType', '_sendType', str, None),
766
833
834
+ pdus = attr .ib (factory = list ) # type: typing.MutableSequence[Pdu]
835
+
836
+
767
837
@property
768
838
def is_multiplexed (self ): # type: () -> bool
769
839
"""Frame is multiplexed if at least one of its signals is a multiplexer."""
@@ -879,6 +949,7 @@ def attribute(self, attribute_name, db=None, default=None):
879
949
880
950
def __iter__ (self ): # type: () -> typing.Iterator[Signal]
881
951
"""Iterator over all signals."""
952
+
882
953
return iter (self .signals )
883
954
884
955
def add_signal_group (self , Name , Id , signalNames ):
@@ -912,6 +983,18 @@ def signal_group_by_name(self, name):
912
983
return signalGroup
913
984
return None
914
985
986
+ def add_pdu (self , pdu ):
987
+ # type: (Pdu) -> Pdu
988
+ """
989
+ Add Pdu to Frame.
990
+
991
+ :param Pdu pdu: Pdu to be added.
992
+ :return: the pdu added.
993
+ """
994
+ self .pdus .append (pdu )
995
+ return self .pdus [len (self .pdus ) - 1 ]
996
+
997
+
915
998
def add_signal (self , signal ):
916
999
# type: (Signal) -> Signal
917
1000
"""
0 commit comments