ZSTACK-POWERSAVING低功耗设置库文件
ZSTACK-POWERSAVING 1.0.01 (2016.08.01)
功能改进:
- Add – 未入网节点定时beacon request后进入PM2睡眠模式
- Add – 未入网节点定时beacon request后进入PM3深度睡眠模式
- Add – 手动进入PM3低功耗模式
- Add – 中断唤醒HLOD电源以解决串口、定时器不准确问题
原文和下载地址:ZSTACK-POWERSAVING低功耗设置库文件
API说明:
/**
**FUNCNAME ZDO_FindModeSet
**
**brief 调用此函数可以配置节点正在加入网络或者重新加入网络时的设备发现模式,
** 通过此配置可以有效的控制节点的功耗,扫描事件以及再次扫描方式和周期。
**
** input parameters
** uint8 mode: 设置扫描的模式
**
** MODE_ALWAYS_POLL – 节点将采用zstack模式1s中beacon一次
**
** MODE_TIMER_CYCLE – 节点将扫描指定时间长度网络,如果在此期间未成功
** 加入网络将停止扫描进入PM2模式,再下一次设定睡眠
** 间隔周期后再次扫描,至只电池耗尽或加入网络
**
** MODE_IO_WAKEUP – 此模式将允许节点进行指定时间长度的扫描,如果在此
** 期间未成功加入网络则进入PM3模式,直到用户配置的
** 中断触发后再次进入扫描模式。
**
** uint16 scantimer: 配置对应模式的对应参数,单位ms。
**
** MODE_ALWAYS_POLL – 此模式下传入 DEFAULT_PARAMETER 即可,因为此参数不管为任意值都是无效的
**
** MODE_TIMER_CYCLE – 此模式下需要配置扫描网络的时间,如果填
** 0将进入不扫描网络的模式直接进入PM3而无法唤醒,请注意此项
**
** MODE_IO_WAKEUP – 此模式下需要配置扫描网络的时间,扫描时间一旦结束
** 即进入PM3模式。中断唤醒后需要调用zdo_find_start进行网络扫描,无需配置睡眠时间
** uint16 sleeptimer: 配置MODE_TIMER_CYCLE参数,如果设置的其他模式,该参数直接填写 DEFAULT_PARAMETER即可。
** output parameters
** NULL
**/
extern
void ZDO_FindModeSet(uint8 mode, uint16 scantimer, uint16 sleeptimer);
/**
**FUNCNAME ZDO_BeaconPeriodSet
**
**brief 通过调用此函数将设置网络发现的次数来控制节点的功耗,需要用户手动设置重新
** 开始扫描
**
** input parameters
** uint16 frequency
**
** 扫描次数由0~65535次。
**
** output parameters
** NULL
**/
extern
void ZDO_BeaconPeriodSet(uint16 frequency);
/**
**FUNCNAME ZDO_StartFindNwkRequest
**
**brief 通过调用此函数将会执行zdo_find_mode或者zdo_beaconPeriod设置的结果
**
** input parameters
** None
**
**
** output parameters
** None
**/
extern
void ZDO_StartFindNwkRequest(void);
/**
**FUNCNAME ZDO_StopFindNwkRequest
**
**brief 通过调用此函数将会停止zdo_find_mode或者zdo_beaconPeriod设置并提留在
** 当前状态。例如如果现在正在扫描,那么此扫描动作将会按照协议栈原来配置
** 一直持续下去。
**
** input parameters
** None
**
**
** output parameters
** None
**/
extern
void ZDO_StopFindNwkRequest(void);
/**
**FUNCNAME osal_pwrmgr_lowpower
**
**brief 通过调用此函数将会停止终端节点的轮询,如果协议栈中APP层没有定时任务在
** 继续工作,节点将进入PM3模式,核心板电流约0.3uA。如果APP层仍然有定时任务
** 在允许,节点将进入PM2模式,核心板电流约1.2uA(以上电流符合TI官方给出的)
** 参考,不算外设产生的电流。
**
** input parameters
** None
**
**
** output parameters
** None
**/
extern
void osal_pwrmgr_lowpower(void);
/**
**FUNCNAME osal_pwrmgr_wakeup
**
**brief 通过调用此函数将会使节点从PM2或者PM3模式中唤醒,并且开始datarequest,
** 通过设置newRate来控制轮询时间,具体时间可以参考Tools下f8wConfig.cfg中
** 设置,协议栈默认1000ms
** The number of milliseconds to wait between data request polls to the coordinator.
** -DPOLL_RATE=1000
**
** input parameters
** None
**
**
** output parameters
** None
**/
extern
void osal_pwrmgr_wakeup(uint16 newRate);
使用示例:
以Z-Stack Mesh 1.0.0 GenericApp工程为例,在GenericApp_Init函数中添加设置:
void GenericApp_Init( uint8 task_id )
{
GenericApp_TaskID = task_id;
GenericApp_NwkState = DEV_INIT;
GenericApp_TransID =
0;
// Device hardware initialization can be added here or in main() (Zmain.c).
// If the hardware is application specific – add it here.
// If the hardware is other parts of the device add it in main().
// Fill out the endpoint description.
GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;
GenericApp_epDesc.task_id =
&GenericApp_TaskID;
GenericApp_epDesc.simpleDesc
=
(SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
GenericApp_epDesc.latencyReq = noLatencyReqs;
// Register the endpoint description with the AF
afRegister(
&GenericApp_epDesc );
//定时beacon request,扫描10s后休眠5s
ZDO_FindModeSet(MODE_TIMER_CYCLE,10000,5000);
}