@@ -14,7 +14,8 @@ use embedded_usb_pd::GlobalPortId;
1414use log:: * ;
1515use power_policy_interface:: capability:: PowerCapability ;
1616use power_policy_interface:: psu;
17- use power_policy_service:: psu:: EventReceivers ;
17+ use power_policy_service:: psu:: ArrayEventReceivers ;
18+ use power_policy_service:: service:: registration:: ArrayRegistration ;
1819use static_cell:: StaticCell ;
1920use std_examples:: type_c:: mock_controller;
2021use type_c_service:: service:: Service ;
@@ -40,6 +41,11 @@ const DELAY_MS: u64 = 1000;
4041
4142type DeviceType = Mutex < GlobalRawMutex , PowerProxyDevice < ' static > > ;
4243
44+ type PowerPolicyServiceType = Mutex <
45+ GlobalRawMutex ,
46+ power_policy_service:: service:: Service < ' static , ArrayRegistration < ' static , DeviceType , 3 , NoopSender , 1 > > ,
47+ > ;
48+
4349#[ embassy_executor:: task( pool_size = 3 ) ]
4450async fn controller_task ( wrapper : & ' static mock_controller:: Wrapper < ' static > ) {
4551 loop {
@@ -173,25 +179,18 @@ async fn task(spawner: Spawner) {
173179 crate :: mock_controller:: Validator ,
174180 ) ) ;
175181
176- static POWER_POLICY_PSU_REGISTRATION : StaticCell < [ & DeviceType ; 3 ] > = StaticCell :: new ( ) ;
177- let psu_registration = POWER_POLICY_PSU_REGISTRATION . init ( [
178- & wrapper0. ports [ 0 ] . proxy ,
179- & wrapper1. ports [ 0 ] . proxy ,
180- & wrapper2. ports [ 0 ] . proxy ,
181- ] ) ;
182-
183- static POWER_POLICY_EVENT_SENDERS : StaticCell < [ NoopSender ; 1 ] > = StaticCell :: new ( ) ;
184- let power_policy_event_senders = POWER_POLICY_EVENT_SENDERS . init ( [ NoopSender ] ) ;
185-
186- static POWER_SERVICE : StaticCell <
187- Mutex <
188- GlobalRawMutex ,
189- power_policy_service:: service:: Service < ' static , ' static , ' static , DeviceType , NoopSender > ,
190- > ,
191- > = StaticCell :: new ( ) ;
182+ let power_policy_registration = ArrayRegistration {
183+ psus : [
184+ & wrapper0. ports [ 0 ] . proxy ,
185+ & wrapper1. ports [ 0 ] . proxy ,
186+ & wrapper2. ports [ 0 ] . proxy ,
187+ ] ,
188+ service_senders : [ NoopSender ] ,
189+ } ;
190+
191+ static POWER_SERVICE : StaticCell < PowerPolicyServiceType > = StaticCell :: new ( ) ;
192192 let power_service = POWER_SERVICE . init ( Mutex :: new ( power_policy_service:: service:: Service :: new (
193- psu_registration,
194- power_policy_event_senders. as_mut_slice ( ) ,
193+ power_policy_registration,
195194 power_service_context,
196195 power_policy_service:: service:: config:: Config :: default ( ) ,
197196 ) ) ) ;
@@ -221,7 +220,7 @@ async fn task(spawner: Spawner) {
221220 let cfu_client = CfuClient :: new ( & CFU_CLIENT ) . await ;
222221
223222 spawner. must_spawn ( power_policy_task (
224- EventReceivers :: new (
223+ ArrayEventReceivers :: new (
225224 [
226225 & wrapper0. ports [ 0 ] . proxy ,
227226 & wrapper1. ports [ 0 ] . proxy ,
@@ -292,11 +291,8 @@ async fn task(spawner: Spawner) {
292291
293292#[ embassy_executor:: task]
294293async fn power_policy_task (
295- psu_events : EventReceivers < ' static , 3 , DeviceType , DynamicReceiver < ' static , psu:: event:: EventData > > ,
296- power_policy : & ' static Mutex <
297- GlobalRawMutex ,
298- power_policy_service:: service:: Service < ' static , ' static , ' static , DeviceType , NoopSender > ,
299- > ,
294+ psu_events : ArrayEventReceivers < ' static , 3 , DeviceType , DynamicReceiver < ' static , psu:: event:: EventData > > ,
295+ power_policy : & ' static PowerPolicyServiceType ,
300296) {
301297 power_policy_service:: service:: task:: task ( psu_events, power_policy) . await ;
302298}
0 commit comments