Bugfix: arm failsafe was reporting wrong status
This commit is contained in:
parent
d12e1cfa13
commit
40a476e0d9
1 changed files with 32 additions and 17 deletions
|
@ -22,7 +22,6 @@ use crate::data_model::objects::*;
|
||||||
use crate::data_model::sdm::failsafe::FailSafe;
|
use crate::data_model::sdm::failsafe::FailSafe;
|
||||||
use crate::interaction_model::core::Transaction;
|
use crate::interaction_model::core::Transaction;
|
||||||
use crate::tlv::{FromTLV, TLVElement, TLVWriter, TagType, ToTLV, UtfStr};
|
use crate::tlv::{FromTLV, TLVElement, TLVWriter, TagType, ToTLV, UtfStr};
|
||||||
use crate::transport::session::Session;
|
|
||||||
use crate::utils::rand::Rand;
|
use crate::utils::rand::Rand;
|
||||||
use crate::{attribute_enum, cmd_enter};
|
use crate::{attribute_enum, cmd_enter};
|
||||||
use crate::{command_enum, error::*};
|
use crate::{command_enum, error::*};
|
||||||
|
@ -173,18 +172,18 @@ impl GenCommCluster {
|
||||||
|
|
||||||
pub fn invoke(
|
pub fn invoke(
|
||||||
&mut self,
|
&mut self,
|
||||||
session: &mut Session,
|
transaction: &mut Transaction,
|
||||||
cmd: &CmdDetails,
|
cmd: &CmdDetails,
|
||||||
data: &TLVElement,
|
data: &TLVElement,
|
||||||
encoder: CmdDataEncoder,
|
encoder: CmdDataEncoder,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
match cmd.cmd_id.try_into()? {
|
match cmd.cmd_id.try_into()? {
|
||||||
Commands::ArmFailsafe => self.handle_command_armfailsafe(session, data, encoder)?,
|
Commands::ArmFailsafe => self.handle_command_armfailsafe(transaction, data, encoder)?,
|
||||||
Commands::SetRegulatoryConfig => {
|
Commands::SetRegulatoryConfig => {
|
||||||
self.handle_command_setregulatoryconfig(data, encoder)?
|
self.handle_command_setregulatoryconfig(transaction, data, encoder)?
|
||||||
}
|
}
|
||||||
Commands::CommissioningComplete => {
|
Commands::CommissioningComplete => {
|
||||||
self.handle_command_commissioningcomplete(session, encoder)?;
|
self.handle_command_commissioningcomplete(transaction, encoder)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +194,7 @@ impl GenCommCluster {
|
||||||
|
|
||||||
fn handle_command_armfailsafe(
|
fn handle_command_armfailsafe(
|
||||||
&mut self,
|
&mut self,
|
||||||
session: &Session,
|
transaction: &mut Transaction,
|
||||||
data: &TLVElement,
|
data: &TLVElement,
|
||||||
encoder: CmdDataEncoder,
|
encoder: CmdDataEncoder,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
|
@ -203,23 +202,33 @@ impl GenCommCluster {
|
||||||
|
|
||||||
let p = FailSafeParams::from_tlv(data)?;
|
let p = FailSafeParams::from_tlv(data)?;
|
||||||
|
|
||||||
self.failsafe
|
let status = if self
|
||||||
|
.failsafe
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.arm(p.expiry_len, session.get_session_mode())
|
.arm(p.expiry_len, transaction.session().get_session_mode())
|
||||||
.map_err(|e| e.remap(|_| true, Error::Busy))?;
|
.is_err()
|
||||||
|
{
|
||||||
|
CommissioningError::ErrBusyWithOtherAdmin as u8
|
||||||
|
} else {
|
||||||
|
CommissioningError::Ok as u8
|
||||||
|
};
|
||||||
|
|
||||||
let cmd_data = CommonResponse {
|
let cmd_data = CommonResponse {
|
||||||
error_code: CommissioningError::ErrBusyWithOtherAdmin as u8,
|
error_code: status,
|
||||||
debug_txt: UtfStr::new(b""),
|
debug_txt: UtfStr::new(b""),
|
||||||
};
|
};
|
||||||
|
|
||||||
encoder
|
encoder
|
||||||
.with_command(RespCommands::ArmFailsafeResp as _)?
|
.with_command(RespCommands::ArmFailsafeResp as _)?
|
||||||
.set(cmd_data)
|
.set(cmd_data)?;
|
||||||
|
|
||||||
|
transaction.complete();
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_command_setregulatoryconfig(
|
fn handle_command_setregulatoryconfig(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
transaction: &mut Transaction,
|
||||||
data: &TLVElement,
|
data: &TLVElement,
|
||||||
encoder: CmdDataEncoder,
|
encoder: CmdDataEncoder,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
|
@ -238,19 +247,22 @@ impl GenCommCluster {
|
||||||
|
|
||||||
encoder
|
encoder
|
||||||
.with_command(RespCommands::SetRegulatoryConfigResp as _)?
|
.with_command(RespCommands::SetRegulatoryConfigResp as _)?
|
||||||
.set(cmd_data)
|
.set(cmd_data)?;
|
||||||
|
|
||||||
|
transaction.complete();
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_command_commissioningcomplete(
|
fn handle_command_commissioningcomplete(
|
||||||
&mut self,
|
&mut self,
|
||||||
session: &Session,
|
transaction: &mut Transaction,
|
||||||
encoder: CmdDataEncoder,
|
encoder: CmdDataEncoder,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
cmd_enter!("Commissioning Complete");
|
cmd_enter!("Commissioning Complete");
|
||||||
let mut status: u8 = CommissioningError::Ok as u8;
|
let mut status: u8 = CommissioningError::Ok as u8;
|
||||||
|
|
||||||
// Has to be a Case Session
|
// Has to be a Case Session
|
||||||
if session.get_local_fabric_idx().is_none() {
|
if transaction.session().get_local_fabric_idx().is_none() {
|
||||||
status = CommissioningError::ErrInvalidAuth as u8;
|
status = CommissioningError::ErrInvalidAuth as u8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +271,7 @@ impl GenCommCluster {
|
||||||
if self
|
if self
|
||||||
.failsafe
|
.failsafe
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.disarm(session.get_session_mode())
|
.disarm(transaction.session().get_session_mode())
|
||||||
.is_err()
|
.is_err()
|
||||||
{
|
{
|
||||||
status = CommissioningError::ErrInvalidAuth as u8;
|
status = CommissioningError::ErrInvalidAuth as u8;
|
||||||
|
@ -272,7 +284,10 @@ impl GenCommCluster {
|
||||||
|
|
||||||
encoder
|
encoder
|
||||||
.with_command(RespCommands::CommissioningCompleteResp as _)?
|
.with_command(RespCommands::CommissioningCompleteResp as _)?
|
||||||
.set(cmd_data)
|
.set(cmd_data)?;
|
||||||
|
|
||||||
|
transaction.complete();
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,7 +303,7 @@ impl Handler for GenCommCluster {
|
||||||
data: &TLVElement,
|
data: &TLVElement,
|
||||||
encoder: CmdDataEncoder,
|
encoder: CmdDataEncoder,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
GenCommCluster::invoke(self, transaction.session_mut(), cmd, data, encoder)
|
GenCommCluster::invoke(self, transaction, cmd, data, encoder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue