5
5
6
6
7
7
import autosar .xml .element as ar_element
8
+ import autosar .xml .enumeration as ar_enum
8
9
import autosar .xml .workspace as ar_workspace
9
10
from . import factory , portinterface , constants
10
11
11
12
NAMESPACE = "Default"
12
13
13
14
14
- def create_ReceiverComponent (_0 : ar_element .Package ,
15
+ def create_ReceiverComponent (package : ar_element .Package ,
15
16
workspace : ar_workspace .Workspace ,
16
17
deps : dict [str , ar_element .ARElement ] | None ,
17
18
** _1 ) -> ar_element .ApplicationSoftwareComponentType :
18
19
"""
19
- Create Receiver component type
20
+ Receiver ports:
21
+ - EngineSpeed
22
+ - VehicleSpeed
23
+ Client ports:
24
+ - FreeRunningTimer
20
25
"""
21
26
timer_interface = deps [portinterface .FreeRunningTimer_I .ref (workspace )]
22
27
vehicle_speed_interface = deps [portinterface .VehicleSpeed_I .ref (workspace )]
23
28
engine_speed_interface = deps [portinterface .EngineSpeed_I .ref (workspace )]
29
+ ecu_mode_interface = deps [portinterface .EcuM_CurrentMode_I .ref (workspace )]
24
30
engine_speed_init = deps [constants .EngineSpeed_IV .ref (workspace )]
25
31
vehicle_speed_init = deps [constants .VehicleSpeed_IV .ref (workspace )]
26
- swc = ar_element .ApplicationSoftwareComponentType ("ReceiverComponent" )
32
+ swc_name = "ReceiverComponent"
33
+ swc = ar_element .ApplicationSoftwareComponentType (swc_name )
34
+ package .append (swc )
35
+ swc .create_require_port ("EcuM_CurrentMode" , ecu_mode_interface , com_spec = {"enhanced_mode_api" : False ,
36
+ "supports_async" : False })
27
37
swc .create_require_port ("EngineSpeed" , engine_speed_interface , com_spec = {"init_value" : engine_speed_init .ref (),
28
38
"alive_timeout" : 0 ,
29
39
"enable_update" : False ,
@@ -37,30 +47,48 @@ def create_ReceiverComponent(_0: ar_element.Package,
37
47
"handle_never_received" : False
38
48
})
39
49
swc .create_require_port ("FreeRunningTimer" , timer_interface )
40
- swc .create_internal_behavior ()
50
+ init_runnable_name = swc_name + '_Init'
51
+ periodic_runnable_name = swc_name + '_Run'
52
+ behavior = swc .create_internal_behavior ()
53
+ behavior .create_runnable (init_runnable_name )
54
+ behavior .create_runnable (periodic_runnable_name )
55
+ behavior .create_swc_mode_mode_switch_event (init_runnable_name ,
56
+ "EcuM_CurrentMode/RUN" ,
57
+ ar_enum .ModeActivationKind .ON_ENTRY )
58
+ behavior .create_timing_event (periodic_runnable_name , 20.0 / 1000 )
41
59
return swc
42
60
43
61
44
- def create_TimerComponent (_0 : ar_element .Package ,
62
+ def create_TimerComponent (package : ar_element .Package ,
45
63
workspace : ar_workspace .Workspace ,
46
64
deps : dict [str , ar_element .ARElement ] | None ,
47
- ** _1 ) -> ar_element .ApplicationSoftwareComponentType :
65
+ ** _0 ) -> ar_element .ApplicationSoftwareComponentType :
48
66
"""
49
67
Create TimerComponent component type
50
68
"""
51
69
timer_interface = deps [portinterface .FreeRunningTimer_I .ref (workspace )]
52
70
swc = ar_element .ApplicationSoftwareComponentType ("TimerComponent" )
71
+ package .append (swc )
53
72
swc .create_provide_port ("FreeRunningTimer" , timer_interface , com_spec = {"GetTime" : {"queue_length" : 1 },
54
73
"IsTimerElapsed" : {"queue_length" : 1 }
55
74
})
56
- swc .create_internal_behavior ()
75
+ behavior = swc .create_internal_behavior ()
76
+ init_runnable_name = swc .name + "_Init"
77
+ get_time_runnable_name = swc .name + "_GetTime"
78
+ timer_elapsed_runnable_name = swc .name + "_IsTimerElapsed"
79
+ behavior .create_runnable (init_runnable_name )
80
+ behavior .create_runnable (get_time_runnable_name , reentrancy_level = ar_enum .ReentrancyLevel .NON_REENTRANT )
81
+ behavior .create_runnable (timer_elapsed_runnable_name , reentrancy_level = ar_enum .ReentrancyLevel .NON_REENTRANT )
82
+ behavior .create_init_event (init_runnable_name )
83
+ behavior .create_operation_invoked_event (get_time_runnable_name , "FreeRunningTimer/GetTime" )
84
+ behavior .create_operation_invoked_event (timer_elapsed_runnable_name , "FreeRunningTimer/IsTimerElapsed" )
57
85
return swc
58
86
59
87
60
88
def create_composition_component (package : ar_element .Package ,
61
89
workspace : ar_workspace .Workspace ,
62
90
deps : dict [str , ar_element .ARElement ] | None ,
63
- ** _1 ) -> ar_element .ApplicationSoftwareComponentType :
91
+ ** _0 ) -> ar_element .ApplicationSoftwareComponentType :
64
92
"""
65
93
Creates a composition component
66
94
The created swc must be manually added to the package, otherwise the
@@ -77,15 +105,14 @@ def create_composition_component(package: ar_element.Package,
77
105
assert isinstance (receiver_component , ar_element .ApplicationSoftwareComponentType )
78
106
assert isinstance (timer_component , ar_element .ApplicationSoftwareComponentType )
79
107
swc = ar_element .CompositionSwComponentType ("CompositionComponent" )
108
+ package .append (swc )
80
109
swc .create_require_port ("EngineSpeed" , engine_speed_interface , com_spec = {"init_value" : engine_speed_init .ref (),
81
110
"uses_end_to_end_protection" : False })
82
111
swc .create_require_port ("VehicleSpeed" , vehicle_speed_interface , com_spec = {"init_value" : vehicle_speed_init .ref (),
83
112
"uses_end_to_end_protection" : False })
84
113
85
114
swc .create_component_prototype (receiver_component )
86
115
swc .create_component_prototype (timer_component )
87
- # Element must be added to workspace before connectors can be created
88
- package .append (swc )
89
116
swc .create_connector ("TimerComponent/FreeRunningTimer" , "ReceiverComponent/FreeRunningTimer" , workspace )
90
117
swc .create_connector ("VehicleSpeed" , "ReceiverComponent/VehicleSpeed" , workspace )
91
118
swc .create_connector ("EngineSpeed" , "ReceiverComponent/EngineSpeed" , workspace )
@@ -95,7 +122,8 @@ def create_composition_component(package: ar_element.Package,
95
122
ReceiverComponent = factory .GenericComponentTypeTemplate ("ReceiverComponent" ,
96
123
NAMESPACE ,
97
124
create_ReceiverComponent ,
98
- depends = [portinterface .EngineSpeed_I ,
125
+ depends = [portinterface .EcuM_CurrentMode_I ,
126
+ portinterface .EngineSpeed_I ,
99
127
portinterface .VehicleSpeed_I ,
100
128
portinterface .FreeRunningTimer_I ,
101
129
constants .EngineSpeed_IV ,
@@ -118,5 +146,4 @@ def create_composition_component(package: ar_element.Package,
118
146
constants .EngineSpeed_IV ,
119
147
constants .VehicleSpeed_IV ,
120
148
ReceiverComponent_Implementation ,
121
- TimerComponent_Implementation ],
122
- append_to_package = False )
149
+ TimerComponent_Implementation ])
0 commit comments