@@ -3,38 +3,39 @@ use core::future::Future;
33use embedded_cfu_protocol:: components:: CfuComponentTraits ;
44use embedded_cfu_protocol:: host:: { CfuHostStates , CfuUpdater } ;
55use embedded_cfu_protocol:: protocol_definitions:: * ;
6- use embedded_cfu_protocol:: { CfuImage , CfuWriter , CfuWriterDefault , CfuWriterError } ;
6+ use embedded_cfu_protocol:: {
7+ CfuImage ,
8+ writer:: { CfuWriterAsync , CfuWriterError , CfuWriterNop } ,
9+ } ;
710use heapless:: Vec ;
811
912use crate :: CfuError ;
1013
1114/// All host side Cfu traits, in some cases this will originate from a OS driver for CFU
12- pub trait CfuHost : CfuHostStates {
15+ pub trait CfuHost < W > : CfuHostStates < W > {
1316 /// Get all images
1417 fn get_cfu_images < I : CfuImage > ( & self ) -> impl Future < Output = Result < Vec < I , MAX_CMPT_COUNT > , CfuError > > ;
1518 /// Gets the firmware version of all components
16- fn get_all_fw_versions < T : CfuWriter > (
19+ fn get_all_fw_versions (
1720 self ,
18- writer : & mut T ,
21+ writer : & mut W ,
1922 primary_cmpt : ComponentId ,
2023 ) -> impl Future < Output = Result < GetFwVersionResponse , CfuError > > ;
2124 /// Goes through the offer list and returns a slice of offer responses
22- fn process_cfu_offers < ' a , T : CfuWriter > (
25+ fn process_cfu_offers < ' a > (
2326 offer_commands : & ' a [ FwUpdateOffer ] ,
24- writer : & mut T ,
27+ writer : & mut W ,
2528 ) -> impl Future < Output = Result < & ' a [ FwUpdateOfferResponse ] , CfuError > > ;
2629 /// For a specific component, update its content
27- fn update_cfu_content < T : CfuWriter > (
28- writer : & mut T ,
29- ) -> impl Future < Output = Result < FwUpdateContentResponse , CfuError > > ;
30+ fn update_cfu_content ( writer : & mut W ) -> impl Future < Output = Result < FwUpdateContentResponse , CfuError > > ;
3031 /// For a specific image that was updated, validate its content
3132 fn is_cfu_image_valid < I : CfuImage > ( image : I ) -> impl Future < Output = Result < bool , CfuError > > ;
3233}
3334
3435pub struct CfuHostInstance < I : CfuImage , C : CfuComponentTraits > {
3536 pub updater : CfuUpdater ,
3637 pub images : heapless:: Vec < I , MAX_CMPT_COUNT > ,
37- pub writer : CfuWriterDefault ,
38+ pub writer : CfuWriterNop ,
3839 pub primary_cmpt : C ,
3940 pub host_token : HostToken ,
4041}
@@ -45,15 +46,15 @@ impl<I: CfuImage, C: CfuComponentTraits> CfuHostInstance<I, C> {
4546 Self {
4647 updater : CfuUpdater { } ,
4748 images : Vec :: new ( ) ,
48- writer : CfuWriterDefault :: default ( ) ,
49+ writer : CfuWriterNop ,
4950 primary_cmpt,
5051 host_token : HostToken :: Driver ,
5152 }
5253 }
5354}
5455
55- impl < I : CfuImage , C : CfuComponentTraits > CfuHostStates for CfuHostInstance < I , C > {
56- async fn start_transaction < T : CfuWriter > ( self , _writer : & mut T ) -> Result < FwUpdateOfferResponse , CfuProtocolError > {
56+ impl < I : CfuImage , C : CfuComponentTraits , W : CfuWriterAsync > CfuHostStates < W > for CfuHostInstance < I , C > {
57+ async fn start_transaction ( self , _writer : & mut W ) -> Result < FwUpdateOfferResponse , CfuProtocolError > {
5758 let _mock_cmd = FwUpdateOfferInformation :: new ( OfferInformationComponentInfo :: new (
5859 HostToken :: Driver ,
5960 SpecialComponentIds :: Info ,
@@ -62,10 +63,7 @@ impl<I: CfuImage, C: CfuComponentTraits> CfuHostStates for CfuHostInstance<I, C>
6263 let mockresponse = FwUpdateOfferResponse :: default ( ) ;
6364 Ok ( mockresponse)
6465 }
65- async fn notify_start_offer_list < T : CfuWriter > (
66- self ,
67- writer : & mut T ,
68- ) -> Result < FwUpdateOfferResponse , CfuProtocolError > {
66+ async fn notify_start_offer_list ( self , writer : & mut W ) -> Result < FwUpdateOfferResponse , CfuProtocolError > {
6967 // Serialize FwUpdateOfferInformation to bytes
7068 let mock_cmd = FwUpdateOfferInformation :: new ( OfferInformationComponentInfo :: new (
7169 HostToken :: Driver ,
@@ -89,10 +87,7 @@ impl<I: CfuImage, C: CfuComponentTraits> CfuHostStates for CfuHostInstance<I, C>
8987 }
9088 }
9189
92- async fn notify_end_offer_list < T : CfuWriter > (
93- self ,
94- writer : & mut T ,
95- ) -> Result < FwUpdateOfferResponse , CfuProtocolError > {
90+ async fn notify_end_offer_list ( self , writer : & mut W ) -> Result < FwUpdateOfferResponse , CfuProtocolError > {
9691 let mock_cmd = FwUpdateOfferInformation :: new ( OfferInformationComponentInfo :: new (
9792 HostToken :: Driver ,
9893 SpecialComponentIds :: Info ,
@@ -128,14 +123,14 @@ impl<I: CfuImage, C: CfuComponentTraits> CfuHostStates for CfuHostInstance<I, C>
128123 }
129124}
130125
131- impl < I : CfuImage , C : CfuComponentTraits > CfuHost for CfuHostInstance < I , C > {
126+ impl < I : CfuImage , C : CfuComponentTraits , W : CfuWriterAsync > CfuHost < W > for CfuHostInstance < I , C > {
132127 async fn get_cfu_images < T : CfuImage > ( & self ) -> Result < Vec < T , MAX_CMPT_COUNT > , CfuError > {
133128 Err ( CfuError :: BadImage )
134129 }
135130
136- async fn get_all_fw_versions < T : CfuWriter > (
131+ async fn get_all_fw_versions (
137132 self ,
138- _writer : & mut T ,
133+ _writer : & mut W ,
139134 primary_cmpt : ComponentId ,
140135 ) -> Result < GetFwVersionResponse , CfuError > {
141136 let mut component_count: u8 = 0 ;
@@ -172,15 +167,15 @@ impl<I: CfuImage, C: CfuComponentTraits> CfuHost for CfuHostInstance<I, C> {
172167 }
173168 }
174169
175- async fn process_cfu_offers < ' a , T : CfuWriter > (
170+ async fn process_cfu_offers < ' a > (
176171 _offer_commands : & ' a [ FwUpdateOffer ] ,
177- _writer : & mut T ,
172+ _writer : & mut W ,
178173 ) -> Result < & ' a [ FwUpdateOfferResponse ] , CfuError > {
179174 // TODO
180175 Err ( CfuError :: BadImage )
181176 }
182177
183- async fn update_cfu_content < T : CfuWriter > ( _writer : & mut T ) -> Result < FwUpdateContentResponse , CfuError > {
178+ async fn update_cfu_content ( _writer : & mut W ) -> Result < FwUpdateContentResponse , CfuError > {
184179 Err ( CfuError :: ProtocolError ( CfuProtocolError :: WriterError (
185180 CfuWriterError :: Other ,
186181 ) ) )
0 commit comments