0

Behavior: If I shake the sensor for more than 2 seconds, the sensor wakes up and starts blinking. After 5 seconds, the device turns off and then immediately turns back on again. And starts blinking again and after 5 seconds, it will enter into power-off mode. Since I don't have a Movesense programmer, I can't see the hardware logs that show what's going on.

For reference, I am attaching a video link of testing a sample example of the movement_wakeup_app.

video link

Firmware File: Firmware file

Hardware Specification

Sensor model: Movesense "BIG_MEM"

HWCONFIG: SS2_NAND

Data memory: 128 MB FLASH

1-Wire master:-YES

Remarks:-The movesense sensor variant is BIG_MEM.

Movesense-device-lib version:

This is a sample code given by Movesense in which we only do a little bit of modification like

// Time between wake-up and going to power-off mode

#define AVAILABILITY_TIME 5000

// LED blinking period in advertising mode

#define LED_BLINKING_PERIOD 1000



#include "movesense.h"

#include "MovementWakeupApp.h"
#include "common/core/debug.h"

#include "component_led/resources.h"
#include "component_lsm6ds3/resources.h"
#include "ui_ind/resources.h"
#include "system_mode/resources.h"

const char* const MovementWakeupApp::LAUNCHABLE_NAME = "MoveWakeupApp";

// Time between wake-up and going to power-off mode
#define AVAILABILITY_TIME 5000

// Time between turn on AFE wake circuit to power off
// (must be LED_BLINKING_PERIOD multiple)
#define WAKE_PREPARATION_TIME 5000

// LED blinking period in advertising mode
#define LED_BLINKING_PERIOD 1000

MovementWakeupApp::MovementWakeupApp():
    ResourceClient(WBDEBUG_NAME(__FUNCTION__), WB_EXEC_CTX_APPLICATION),
    LaunchableModule(LAUNCHABLE_NAME, WB_EXEC_CTX_APPLICATION),
    mTimer(wb::ID_INVALID_TIMER),
    counter(0)
{
}

MovementWakeupApp::~MovementWakeupApp()
{
}

bool MovementWakeupApp::initModule()
{
    mModuleState = WB_RES::ModuleStateValues::INITIALIZED;
    return true;
}

void MovementWakeupApp::deinitModule()
{
    mModuleState = WB_RES::ModuleStateValues::UNINITIALIZED;
}

bool MovementWakeupApp::startModule()
{
    mModuleState = WB_RES::ModuleStateValues::STARTED;

    setShutdownTimer();

    // Subscribe to Whiteboard routing table changes
    asyncSubscribe(WB_RES::LOCAL::NET());

    return true;
}

void MovementWakeupApp::stopModule()
{
    // Stop LED timer
    stopTimer(mTimer);
    mTimer = wb::ID_INVALID_TIMER;
    mModuleState = WB_RES::ModuleStateValues::STOPPED;
}

void MovementWakeupApp::onNotify(wb::ResourceId resourceId,
                                 const wb::Value& value,
                                 const wb::ParameterList& parameters)
{
    // Confirm that it is the correct resource
    if (resourceId.localResourceId != WB_RES::LOCAL::NET::LID)
        return;

    // Get whiteborad routing table notification
    uint8_t data = WB_RES::LOCAL::NET::EVENT::ParameterListRef(parameters).getNotificationType();

    // if there is whiteboard connection, stop timer
    if (data == WB_RES::RoutingTableNotificationTypeValues::ROUTE_NOTIFICATION_NEW)
    {
        stopTimer(mTimer);
        mTimer = wb::ID_INVALID_TIMER;
        return;
    }

    // if whiteboard connection lost, prepare to shutdown
    if (data == WB_RES::RoutingTableNotificationTypeValues::ROUTE_NOTIFICATION_LOST)
    {
        setShutdownTimer();
    }
}

void MovementWakeupApp::setShutdownTimer()
{
    // Start timer
    mTimer = startTimer(LED_BLINKING_PERIOD, true);

    // Reset timeout counter
    counter = 0;
}

void MovementWakeupApp::onTimer(wb::TimerId timerId)
{
    counter = counter + LED_BLINKING_PERIOD;

    if (counter < AVAILABILITY_TIME)
    {
        asyncPut(WB_RES::LOCAL::UI_IND_VISUAL(), AsyncRequestOptions::Empty,
                 WB_RES::VisualIndTypeValues::SHORT_VISUAL_INDICATION);
        return;
    }

    if (counter == AVAILABILITY_TIME)
    {
        // Prepare AFE to wake-up mode
        WB_RES::WakeUpState wakeupState;
        wakeupState.level = 2;
        wakeupState.state = 1; // Movement
        asyncPut(WB_RES::LOCAL::COMPONENT_LSM6DS3_WAKEUP(),
                 AsyncRequestOptions(NULL, 0, true), wakeupState);

        // Make PUT request to switch LED on
        asyncPut(WB_RES::LOCAL::COMPONENT_LED(), AsyncRequestOptions::Empty, true);

        // Make PUT request to enter power off mode
        asyncPut(WB_RES::LOCAL::SYSTEM_MODE(), AsyncRequestOptions::Empty,
                 WB_RES::SystemModeValues::FULLPOWEROFF);
    }
}

Expected: as soon as the movesense sensor shakes, the sensor wakes and after 5 seconds it'll enter into full power-off mode.

0 Answers0