You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Movesense BIG_MEM传感器移动唤醒流程异常问题咨询

Movesense BIG_MEM传感器唤醒后异常重启问题

问题表现

  • 摇晃传感器超过2秒后,传感器唤醒并开始闪烁LED
  • 5秒后设备关机随即重启,再次闪烁LED,5秒后才进入关机模式
  • 无Movesense programmer,无法查看硬件日志

硬件规格

  • 传感器型号:Movesense "BIG_MEM"
  • HWCONFIG: SS2_NAND
  • 数据内存:128 MB FLASH
  • 1-Wire master: YES
  • Movesense-device-lib版本:未提供

代码说明

基于Movesense官方示例代码仅做少量修改:

  • 唤醒至进入关机模式的时间间隔:#define AVAILABILITY_TIME 5000
  • 广播模式下LED闪烁周期:#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";

// 唤醒至进入关机模式的时间间隔
#define AVAILABILITY_TIME 5000

// 开启AFE唤醒电路至关机的时间间隔(必须为LED_BLINKING_PERIOD的倍数)
#define WAKE_PREPARATION_TIME 5000

// 广播模式下LED闪烁周期
#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();

    // 订阅Whiteboard路由表变化
    asyncSubscribe(WB_RES::LOCAL::NET());

    return true;
}

void MovementWakeupApp::stopModule()
{
    // 停止LED定时器
    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)
{
    // 确认是正确的资源
    if (resourceId.localResourceId != WB_RES::LOCAL::NET::LID)
        return;

    // 获取Whiteboard路由表通知
    uint8_t data = WB_RES::LOCAL::NET::EVENT::ParameterListRef(parameters).getNotificationType();

    // 若存在Whiteboard连接,停止定时器
    if (data == WB_RES::RoutingTableNotificationTypeValues::ROUTE_NOTIFICATION_NEW)
    {
        stopTimer(mTimer);
        mTimer = wb::ID_INVALID_TIMER;
        return;
    }

    // 若Whiteboard连接断开,准备关机
    if (data == WB_RES::RoutingTableNotificationTypeValues::ROUTE_NOTIFICATION_LOST)
    {
        setShutdownTimer();
    }
}

void MovementWakeupApp::setShutdownTimer()
{
    // 启动定时器
    mTimer = startTimer(LED_BLINKING_PERIOD, true);

    // 重置超时计数器
    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)
    {
        // 将AFE设置为唤醒模式
        WB_RES::WakeUpState wakeupState;
        wakeupState.level = 2;
        wakeupState.state = 1; // 移动唤醒
        asyncPut(WB_RES::LOCAL::COMPONENT_LSM6DS3_WAKEUP(),
                 AsyncRequestOptions(NULL, 0, true), wakeupState);

        // 发送PUT请求开启LED
        asyncPut(WB_RES::LOCAL::COMPONENT_LED(), AsyncRequestOptions::Empty, true);

        // 发送PUT请求进入完全关机模式
        asyncPut(WB_RES::LOCAL::SYSTEM_MODE(), AsyncRequestOptions::Empty,
                 WB_RES::SystemModeValues::FULLPOWEROFF);
    }
}

预期行为

摇晃Movesense传感器后立即唤醒,5秒后进入完全关机模式。

内容的提问来源于stack exchange,提问作者Govind Padhiyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:24:58