Skip to content

Commit

Permalink
[Fabric-Bridge] Replace ScheduleWork with ScheduleLambda (#35949)
Browse files Browse the repository at this point in the history
* [Fabric-Bridge] Replace ScheduleWork with ScheduleLambda

* Restyled by whitespace

* Restyled by clang-format

---------

Co-authored-by: Restyled.io <commits@restyled.io>
  • Loading branch information
yufengwangca and restyled-commits authored Oct 8, 2024
1 parent 07a28ac commit 43e447c
Showing 1 changed file with 38 additions and 71 deletions.
109 changes: 38 additions & 71 deletions examples/fabric-bridge-app/fabric-bridge-common/src/BridgedDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,78 +24,31 @@
#include <app/reporting/reporting.h>
#include <platform/CHIPDeviceLayer.h>

namespace {

struct ActiveChangeEventWorkData
{
chip::EndpointId mEndpointId;
uint32_t mPromisedActiveDuration;
};

struct ReportAttributeChangedWorkData
{
chip::EndpointId mEndpointId;
bool mWindowChanged = false;
bool mFabricIndexChanged = false;
bool mVendorChanged = false;
};

void ActiveChangeEventWork(intptr_t arg)
{
ActiveChangeEventWorkData * data = reinterpret_cast<ActiveChangeEventWorkData *>(arg);

chip::app::Clusters::BridgedDeviceBasicInformation::Events::ActiveChanged::Type event{};
event.promisedActiveDuration = data->mPromisedActiveDuration;
chip::EventNumber eventNumber = 0;

CHIP_ERROR err = chip::app::LogEvent(event, data->mEndpointId, eventNumber);
if (err != CHIP_NO_ERROR)
{
ChipLogProgress(NotSpecified, "LogEvent for ActiveChanged failed %s", err.AsString());
}
chip::Platform::Delete(data);
}

void ReportAttributeChangedWork(intptr_t arg)
{
ReportAttributeChangedWorkData * data = reinterpret_cast<ReportAttributeChangedWorkData *>(arg);

if (data->mWindowChanged)
{
MatterReportingAttributeChangeCallback(data->mEndpointId, chip::app::Clusters::AdministratorCommissioning::Id,
chip::app::Clusters::AdministratorCommissioning::Attributes::WindowStatus::Id);
}
if (data->mFabricIndexChanged)
{
MatterReportingAttributeChangeCallback(data->mEndpointId, chip::app::Clusters::AdministratorCommissioning::Id,
chip::app::Clusters::AdministratorCommissioning::Attributes::AdminFabricIndex::Id);
}
if (data->mVendorChanged)
{
MatterReportingAttributeChangeCallback(data->mEndpointId, chip::app::Clusters::AdministratorCommissioning::Id,
chip::app::Clusters::AdministratorCommissioning::Attributes::AdminVendorId::Id);
}
chip::Platform::Delete(data);
}

} // namespace

using namespace chip;
using namespace chip::app::Clusters::Actions;

BridgedDevice::BridgedDevice(chip::ScopedNodeId scopedNodeId)
BridgedDevice::BridgedDevice(ScopedNodeId scopedNodeId)
{
mReachable = false;
mScopedNodeId = scopedNodeId;
mEndpointId = chip::kInvalidEndpointId;
mEndpointId = kInvalidEndpointId;
}

void BridgedDevice::LogActiveChangeEvent(uint32_t promisedActiveDurationMs)
{
ActiveChangeEventWorkData * workdata = chip::Platform::New<ActiveChangeEventWorkData>();
workdata->mEndpointId = mEndpointId;
workdata->mPromisedActiveDuration = promisedActiveDurationMs;

chip::DeviceLayer::PlatformMgr().ScheduleWork(ActiveChangeEventWork, reinterpret_cast<intptr_t>(workdata));
EndpointId endpointId = mEndpointId;

DeviceLayer::SystemLayer().ScheduleLambda([endpointId, promisedActiveDurationMs]() {
app::Clusters::BridgedDeviceBasicInformation::Events::ActiveChanged::Type event{};
event.promisedActiveDuration = promisedActiveDurationMs;
EventNumber eventNumber = 0;

CHIP_ERROR err = app::LogEvent(event, endpointId, eventNumber);
if (err != CHIP_NO_ERROR)
{
ChipLogProgress(NotSpecified, "LogEvent for ActiveChanged failed %s", err.AsString());
}
});
}

void BridgedDevice::SetReachable(bool reachable)
Expand All @@ -114,15 +67,29 @@ void BridgedDevice::SetReachable(bool reachable)

void BridgedDevice::SetAdminCommissioningAttributes(const AdminCommissioningAttributes & aAdminCommissioningAttributes)
{
ReportAttributeChangedWorkData * workdata = chip::Platform::New<ReportAttributeChangedWorkData>();

workdata->mEndpointId = mEndpointId;
workdata->mWindowChanged =
EndpointId endpointId = mEndpointId;
bool windowChanged =
(aAdminCommissioningAttributes.commissioningWindowStatus != mAdminCommissioningAttributes.commissioningWindowStatus);
workdata->mFabricIndexChanged =
(aAdminCommissioningAttributes.openerFabricIndex != mAdminCommissioningAttributes.openerFabricIndex);
workdata->mVendorChanged = (aAdminCommissioningAttributes.openerVendorId != mAdminCommissioningAttributes.openerVendorId);
bool fabricIndexChanged = (aAdminCommissioningAttributes.openerFabricIndex != mAdminCommissioningAttributes.openerFabricIndex);
bool vendorChanged = (aAdminCommissioningAttributes.openerVendorId != mAdminCommissioningAttributes.openerVendorId);

mAdminCommissioningAttributes = aAdminCommissioningAttributes;
chip::DeviceLayer::PlatformMgr().ScheduleWork(ReportAttributeChangedWork, reinterpret_cast<intptr_t>(workdata));

DeviceLayer::SystemLayer().ScheduleLambda([endpointId, windowChanged, fabricIndexChanged, vendorChanged]() {
if (windowChanged)
{
MatterReportingAttributeChangeCallback(endpointId, app::Clusters::AdministratorCommissioning::Id,
app::Clusters::AdministratorCommissioning::Attributes::WindowStatus::Id);
}
if (fabricIndexChanged)
{
MatterReportingAttributeChangeCallback(endpointId, app::Clusters::AdministratorCommissioning::Id,
app::Clusters::AdministratorCommissioning::Attributes::AdminFabricIndex::Id);
}
if (vendorChanged)
{
MatterReportingAttributeChangeCallback(endpointId, app::Clusters::AdministratorCommissioning::Id,
app::Clusters::AdministratorCommissioning::Attributes::AdminVendorId::Id);
}
});
}

0 comments on commit 43e447c

Please sign in to comment.