请问,cc2530如何让终端在没有加入网络的情况下进入POWER_SAVING?
如题,实际测试中发现,终端只有在加入网络之后才能进入低功耗模式,那么如果只有一个终端的情况下,就会一直在正常工作模式,这样子电池供电的话工作不了几天就没电了。
非常理解你的需求,在实际应用中也确实存在这样的问题。
首先你需要通过抓包看下,为什么在没有入网的情况下,功能一直会很高。原先是因为节点一直在搜索网络,发送beacon request寻找网络。
那么如果需要实现低功耗,你需要控制搜索网络的频率,或者间歇性的搜索网络。
有两种方式可以做
1)手动的使能网络扫描,你可以通过使能MANAGED_SCAN,具体你可以了解下具体的过程。
2)停止和启动网络烧苗,你可以开启一段时间扫描,如果没有扫描到,那么可以停止一段时间,这个实现,你可以参考Z-Stack Home 1.2.2a里面针对Rejoin的处理。
if( events & ZDO_REJOIN_BACKOFF )
{
if( devState == DEV_NWK_BACKOFF )
{
ZDApp_ChangeState(DEV_NWK_DISC);
// Restart scan for rejoin
ZDApp_StartJoiningCycle();
osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinScan );
}
else
{
// Rejoin backoff, silent period
ZDApp_ChangeState(DEV_NWK_BACKOFF);
ZDApp_StopJoiningCycle();
osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinBackoff );
}
return ( events ^ ZDO_REJOIN_BACKOFF);
}
虽然定了POWER_SAVING但是有个电源类型的全局变量默认是常电,改成电池
十分感谢你的回复,请问具体在什么地方去改动?
/*********************************************************************
* @fn osal_pwrmgr_device
*
* @brief Sets the device power characteristic.
*
* @param pwrmgr_device - type of power devices. With PWRMGR_ALWAYS_ON
* selection, there is no power savings and the device is most
* likely on mains power. The PWRMGR_BATTERY selection allows the
* HAL sleep manager to enter sleep.
*
* @return none
*/
void osal_pwrmgr_device( uint8 pwrmgr_device )
{
pwrmgr_attribute.pwrmgr_device = pwrmgr_device;
}
应该是在这个地方修改吧
自己弄一个条件编译就行了
void osal_pwrmgr_init( void )
{
#if defined (POWER_SAVING)
pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY;
#else
pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON;
#endif
pwrmgr_attribute.pwrmgr_task_state = 0; // Cleared. All set to conserve
}