From f9536be1e3457fecc43d50f7f9398553b0616c8f Mon Sep 17 00:00:00 2001 From: ivmarkov Date: Tue, 25 Apr 2023 20:23:17 +0000 Subject: [PATCH] Bugfix: two separate failsafe instances were used --- matter/src/data_model/root_endpoint.rs | 4 ++-- .../src/data_model/sdm/general_commissioning.rs | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/matter/src/data_model/root_endpoint.rs b/matter/src/data_model/root_endpoint.rs index 341b3de..7ad87fb 100644 --- a/matter/src/data_model/root_endpoint.rs +++ b/matter/src/data_model/root_endpoint.rs @@ -30,7 +30,7 @@ use super::{ pub type RootEndpointHandler<'a> = handler_chain_type!( DescriptorCluster, BasicInfoCluster<'a>, - GenCommCluster, + GenCommCluster<'a>, NwCommCluster, AdminCommCluster<'a>, NocCluster<'a>, @@ -107,7 +107,7 @@ pub fn wrap<'a>( .chain( endpoint_id, general_commissioning::ID, - GenCommCluster::new(rand), + GenCommCluster::new(failsafe, rand), ) .chain( endpoint_id, diff --git a/matter/src/data_model/sdm/general_commissioning.rs b/matter/src/data_model/sdm/general_commissioning.rs index 3882f30..d4d4329 100644 --- a/matter/src/data_model/sdm/general_commissioning.rs +++ b/matter/src/data_model/sdm/general_commissioning.rs @@ -121,17 +121,17 @@ struct FailSafeParams { bread_crumb: u8, } -pub struct GenCommCluster { +pub struct GenCommCluster<'a> { data_ver: Dataver, expiry_len: u16, - failsafe: RefCell, + failsafe: &'a RefCell, } -impl GenCommCluster { - pub fn new(rand: Rand) -> Self { +impl<'a> GenCommCluster<'a> { + pub fn new(failsafe: &'a RefCell, rand: Rand) -> Self { Self { data_ver: Dataver::new(rand), - failsafe: RefCell::new(FailSafe::new()), + failsafe, // TODO: Arch-Specific expiry_len: 120, } @@ -291,7 +291,7 @@ impl GenCommCluster { } } -impl Handler for GenCommCluster { +impl<'a> Handler for GenCommCluster<'a> { fn read(&self, attr: &AttrDetails, encoder: AttrDataEncoder) -> Result<(), Error> { GenCommCluster::read(self, attr, encoder) } @@ -307,9 +307,9 @@ impl Handler for GenCommCluster { } } -impl NonBlockingHandler for GenCommCluster {} +impl<'a> NonBlockingHandler for GenCommCluster<'a> {} -impl ChangeNotifier<()> for GenCommCluster { +impl<'a> ChangeNotifier<()> for GenCommCluster<'a> { fn consume_change(&mut self) -> Option<()> { self.data_ver.consume_change(()) }