Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Complete Button Abstraction (#26581)
Browse files Browse the repository at this point in the history
jepenven-silabs authored and pull[bot] committed Nov 29, 2023

Verified

This commit was signed with the committer’s verified signature. The key has expired.
domdfcoding Dominic Davis-Foster
1 parent 700c109 commit 1182560
Showing 14 changed files with 46 additions and 63 deletions.
4 changes: 0 additions & 4 deletions examples/chef/efr32/src/AppTask.cpp
Original file line number Diff line number Diff line change
@@ -125,9 +125,7 @@ AppTask AppTask::sAppTask;
CHIP_ERROR AppTask::Init()
{
CHIP_ERROR err = CHIP_NO_ERROR;
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
chip::DeviceLayer::Silabs::GetPlatform().SetButtonsCb(AppTask::ButtonEventHandler);
#endif

err = BaseApplication::Init(&gIdentify);
if (err != CHIP_NO_ERROR)
@@ -169,7 +167,6 @@ void AppTask::AppTaskMain(void * pvParameter)
}
}

#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
{
AppEvent button_event = {};
@@ -182,4 +179,3 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
sAppTask.PostEvent(&button_event);
}
}
#endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT
7 changes: 4 additions & 3 deletions examples/light-switch-app/silabs/SiWx917/src/AppTask.cpp
Original file line number Diff line number Diff line change
@@ -69,6 +69,7 @@ constexpr chip::EndpointId kGenericSwitchEndpoint = 2;

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;

namespace {

@@ -239,7 +240,7 @@ void AppTask::SwitchActionEventHandler(AppEvent * aEvent)

static bool mCurrentButtonState = false;

if (aEvent->ButtonEvent.Action == SL_SIMPLE_BUTTON_PRESSED)
if (aEvent->ButtonEvent.Action == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
mCurrentButtonState = !mCurrentButtonState;
LightSwitchMgr::LightSwitchAction action =
@@ -252,7 +253,7 @@ void AppTask::SwitchActionEventHandler(AppEvent * aEvent)
sAppTask.GetLCD().WriteDemoUI(mCurrentButtonState);
#endif
}
else if (aEvent->ButtonEvent.Action == SL_SIMPLE_BUTTON_RELEASED)
else if (aEvent->ButtonEvent.Action == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonReleased))
{
LightSwitchMgr::GetInstance().GenericSwitchOnShortRelease();
}
@@ -268,7 +269,7 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
button_event.Handler = SwitchActionEventHandler;
sAppTask.PostEvent(&button_event);
}
else if (button == SIWx917_BTN0 && btnAction == SL_SIMPLE_BUTTON_PRESSED)
else if (button == SIWx917_BTN0 && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = BaseApplication::ButtonHandler;
sAppTask.PostEvent(&button_event);
9 changes: 3 additions & 6 deletions examples/light-switch-app/silabs/efr32/src/AppTask.cpp
Original file line number Diff line number Diff line change
@@ -68,6 +68,7 @@ constexpr chip::EndpointId kGenericSwitchEndpoint = 2;

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;

namespace {

@@ -153,9 +154,7 @@ AppTask AppTask::sAppTask;
CHIP_ERROR AppTask::Init()
{
CHIP_ERROR err = CHIP_NO_ERROR;
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
chip::DeviceLayer::Silabs::GetPlatform().SetButtonsCb(AppTask::ButtonEventHandler);
#endif

#ifdef DISPLAY_ENABLED
GetLCD().Init((uint8_t *) "Light Switch");
@@ -229,14 +228,13 @@ void AppTask::OnIdentifyStop(Identify * identify)
#endif
}

#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
void AppTask::SwitchActionEventHandler(AppEvent * aEvent)
{
VerifyOrReturn(aEvent->Type == AppEvent::kEventType_Button);

static bool mCurrentButtonState = false;

if (aEvent->ButtonEvent.Action == SL_SIMPLE_BUTTON_PRESSED)
if (aEvent->ButtonEvent.Action == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
mCurrentButtonState = !mCurrentButtonState;
LightSwitchMgr::LightSwitchAction action =
@@ -249,7 +247,7 @@ void AppTask::SwitchActionEventHandler(AppEvent * aEvent)
sAppTask.GetLCD().WriteDemoUI(mCurrentButtonState);
#endif
}
else if (aEvent->ButtonEvent.Action == SL_SIMPLE_BUTTON_RELEASED)
else if (aEvent->ButtonEvent.Action == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonReleased))
{
LightSwitchMgr::GetInstance().GenericSwitchOnShortRelease();
}
@@ -272,4 +270,3 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
sAppTask.PostEvent(&button_event);
}
}
#endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT
5 changes: 3 additions & 2 deletions examples/lighting-app/silabs/SiWx917/src/AppTask.cpp
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;

namespace {

@@ -240,12 +241,12 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
AppEvent button_event = {};
button_event.Type = AppEvent::kEventType_Button;
button_event.ButtonEvent.Action = btnAction;
if (button == SIWx917_BTN1 && btnAction == SL_SIMPLE_BUTTON_PRESSED)
if (button == SIWx917_BTN1 && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = LightActionEventHandler;
sAppTask.PostEvent(&button_event);
}
else if (button == SIWx917_BTN0 && btnAction == SL_SIMPLE_BUTTON_PRESSED)
else if (button == SIWx917_BTN0 && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = BaseApplication::ButtonHandler;
sAppTask.PostEvent(&button_event);
4 changes: 2 additions & 2 deletions examples/lighting-app/silabs/efr32/include/AppTask.h
Original file line number Diff line number Diff line change
@@ -68,7 +68,7 @@ class AppTask : public BaseApplication
static void AppTaskMain(void * pvParameter);

CHIP_ERROR StartAppTask();
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT

/**
* @brief Event handler when a button is pressed
* Function posts an event for button processing
@@ -78,7 +78,7 @@ class AppTask : public BaseApplication
* SL_SIMPLE_BUTTON_RELEASED or SL_SIMPLE_BUTTON_DISABLED
*/
static void ButtonEventHandler(uint8_t button, uint8_t btnAction);
#endif

/**
* @brief Callback called by the identify-server when an identify command is received
*
19 changes: 5 additions & 14 deletions examples/lighting-app/silabs/efr32/src/AppTask.cpp
100755 → 100644
Original file line number Diff line number Diff line change
@@ -46,14 +46,12 @@
#define LIGHT_LED 0
#endif

#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT

#define APP_FUNCTION_BUTTON 0
#define APP_LIGHT_SWITCH 1
#endif

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;

namespace {

@@ -132,9 +130,7 @@ AppTask AppTask::sAppTask;
CHIP_ERROR AppTask::Init()
{
CHIP_ERROR err = CHIP_NO_ERROR;
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
chip::DeviceLayer::Silabs::GetPlatform().SetButtonsCb(AppTask::ButtonEventHandler);
#endif

#ifdef DISPLAY_ENABLED
GetLCD().Init((uint8_t *) "Lighting-App");
@@ -241,13 +237,11 @@ void AppTask::LightActionEventHandler(AppEvent * aEvent)
action = static_cast<LightingManager::Action_t>(aEvent->LightEvent.Action);
actor = aEvent->LightEvent.Actor;
}
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
else if (aEvent->Type == AppEvent::kEventType_Button)
{
action = (LightMgr().IsLightOn()) ? LightingManager::OFF_ACTION : LightingManager::ON_ACTION;
actor = AppEvent::kEventType_Button;
}
#endif
else
{
err = APP_ERROR_UNHANDLED_EVENT;
@@ -263,14 +257,14 @@ void AppTask::LightActionEventHandler(AppEvent * aEvent)
}
}
}
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT

void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
{
AppEvent button_event = {};
button_event.Type = AppEvent::kEventType_Button;
button_event.ButtonEvent.Action = btnAction;

if (button == APP_LIGHT_SWITCH && btnAction == SL_SIMPLE_BUTTON_PRESSED)
if (button == APP_LIGHT_SWITCH && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = LightActionEventHandler;
AppTask::GetAppTask().PostEvent(&button_event);
@@ -281,7 +275,6 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
AppTask::GetAppTask().PostEvent(&button_event);
}
}
#endif

void AppTask::ActionInitiated(LightingManager::Action_t aAction, int32_t aActor)
{
@@ -294,12 +287,11 @@ void AppTask::ActionInitiated(LightingManager::Action_t aAction, int32_t aActor)
#ifdef DISPLAY_ENABLED
sAppTask.GetLCD().WriteDemoUI(lightOn);
#endif
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT

if (aActor == AppEvent::kEventType_Button)
{
sAppTask.mSyncClusterToButtonAction = true;
}
#endif
}

void AppTask::ActionCompleted(LightingManager::Action_t aAction)
@@ -313,13 +305,12 @@ void AppTask::ActionCompleted(LightingManager::Action_t aAction)
{
SILABS_LOG("Light OFF")
}
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT

if (sAppTask.mSyncClusterToButtonAction)
{
chip::DeviceLayer::PlatformMgr().ScheduleWork(UpdateClusterState, reinterpret_cast<intptr_t>(nullptr));
sAppTask.mSyncClusterToButtonAction = false;
}
#endif
}

void AppTask::PostLightActionRequest(int32_t aActor, LightingManager::Action_t aAction)
5 changes: 3 additions & 2 deletions examples/lock-app/silabs/SiWx917/src/AppTask.cpp
Original file line number Diff line number Diff line change
@@ -61,6 +61,7 @@ using chip::app::Clusters::DoorLock::OperationSourceEnum;

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;
using namespace ::chip::DeviceLayer::Internal;
using namespace SI917DoorLock::LockInitParams;

@@ -348,12 +349,12 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
button_event.Type = AppEvent::kEventType_Button;
button_event.ButtonEvent.Action = btnAction;

if (button == SIWx917_BTN1 && btnAction == SL_SIMPLE_BUTTON_PRESSED)
if (button == SIWx917_BTN1 && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = LockActionEventHandler;
sAppTask.PostEvent(&button_event);
}
else if (button == SIWx917_BTN0 && btnAction == SL_SIMPLE_BUTTON_PRESSED)
else if (button == SIWx917_BTN0 && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = BaseApplication::ButtonHandler;
sAppTask.PostEvent(&button_event);
7 changes: 2 additions & 5 deletions examples/lock-app/silabs/efr32/src/AppTask.cpp
Original file line number Diff line number Diff line change
@@ -64,6 +64,7 @@ using chip::app::Clusters::DoorLock::OperationSourceEnum;

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;
using namespace ::chip::DeviceLayer::Internal;
using namespace EFR32DoorLock::LockInitParams;

@@ -143,9 +144,7 @@ CHIP_ERROR AppTask::Init()
{
CHIP_ERROR err = CHIP_NO_ERROR;

#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
chip::DeviceLayer::Silabs::GetPlatform().SetButtonsCb(AppTask::ButtonEventHandler);
#endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT

#ifdef DISPLAY_ENABLED
GetLCD().Init((uint8_t *) "Lock-App", true);
@@ -361,14 +360,13 @@ void AppTask::LockActionEventHandler(AppEvent * aEvent)
}
}

#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
{
AppEvent button_event = {};
button_event.Type = AppEvent::kEventType_Button;
button_event.ButtonEvent.Action = btnAction;

if (button == APP_LOCK_SWITCH && btnAction == SL_SIMPLE_BUTTON_PRESSED)
if (button == APP_LOCK_SWITCH && btnAction == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
button_event.Handler = LockActionEventHandler;
sAppTask.PostEvent(&button_event);
@@ -379,7 +377,6 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
sAppTask.PostEvent(&button_event);
}
}
#endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT

void AppTask::ActionInitiated(LockManager::Action_t aAction, int32_t aActor)
{
5 changes: 4 additions & 1 deletion examples/platform/silabs/SiWx917/BaseApplication.cpp
Original file line number Diff line number Diff line change
@@ -47,6 +47,8 @@
#include <setup_payload/QRCodeSetupPayloadGenerator.h>
#include <setup_payload/SetupPayload.h>

#include <platform/silabs/platformAbstraction/SilabsPlatform.h>

#ifdef SL_WIFI
#include "wfx_host_events.h"
#include <app/clusters/network-commissioning/network-commissioning.h>
@@ -70,6 +72,7 @@

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;

namespace {

@@ -355,7 +358,7 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent)
// FACTORY_RESET_TRIGGER_TIMEOUT to signal factory reset has been initiated.
// To cancel factory reset: release the APP_FUNCTION_BUTTON once all LEDs
// start blinking within the FACTORY_RESET_CANCEL_WINDOW_TIMEOUT
if (aEvent->ButtonEvent.Action == SL_SIMPLE_BUTTON_PRESSED)
if (aEvent->ButtonEvent.Action == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
if ((!mFunctionTimerActive) && (mFunction == kFunction_NoneSelected))
{
16 changes: 7 additions & 9 deletions examples/platform/silabs/efr32/BaseApplication.cpp
Original file line number Diff line number Diff line change
@@ -53,6 +53,8 @@
#include <platform/silabs/ThreadStackManagerImpl.h>
#endif // CHIP_ENABLE_OPENTHREAD

#include <platform/silabs/platformAbstraction/SilabsPlatform.h>

#ifdef SL_WIFI
#include "wfx_host_events.h"
#include <app/clusters/network-commissioning/network-commissioning.h>
@@ -75,12 +77,11 @@
#if defined(ENABLE_WSTK_LEDS) && defined(SL_CATALOG_SIMPLE_LED_LED1_PRESENT)
#define SYSTEM_STATE_LED 0
#endif // ENABLE_WSTK_LEDS
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT
#define APP_FUNCTION_BUTTON 0
#endif

using namespace chip;
using namespace ::chip::DeviceLayer;
using namespace ::chip::DeviceLayer::Silabs;

namespace {

@@ -397,7 +398,7 @@ void BaseApplication::LightEventHandler()
sStatusLED.Animate();
#endif // ENABLE_WSTK_LEDS
}
#ifdef SL_CATALOG_SIMPLE_BUTTON_PRESENT

void BaseApplication::ButtonHandler(AppEvent * aEvent)
{
// To trigger software update: press the APP_FUNCTION_BUTTON button briefly (<
@@ -407,7 +408,7 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent)
// FACTORY_RESET_TRIGGER_TIMEOUT to signal factory reset has been initiated.
// To cancel factory reset: release the APP_FUNCTION_BUTTON once all LEDs
// start blinking within the FACTORY_RESET_CANCEL_WINDOW_TIMEOUT
if (aEvent->ButtonEvent.Action == SL_SIMPLE_BUTTON_PRESSED)
if (aEvent->ButtonEvent.Action == static_cast<uint8_t>(SilabsPlatform::ButtonAction::ButtonPressed))
{
if (!mFunctionTimerActive && mFunction == kFunction_NoneSelected)
{
@@ -444,10 +445,7 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent)
SILABS_LOG("Failed to open the Basic Commissioning Window");
}
}
else
{
SILABS_LOG("Network is already provisioned, Ble advertissement not enabled");
}
else { SILABS_LOG("Network is already provisioned, Ble advertissement not enabled"); }
}
else if (mFunctionTimerActive && mFunction == kFunction_FactoryReset)
{
@@ -464,7 +462,7 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent)
}
}
}
#endif

void BaseApplication::CancelFunctionTimer()
{
if (xTimerStop(sFunctionTimer, pdMS_TO_TICKS(0)) == pdFAIL)
Loading

0 comments on commit 1182560

Please sign in to comment.