我的流程:
定义一个全局变量v_flag=0;
app_init()函数里面调用
wiced_power_save_register_approve_cback(p_cback1);
wiced_power_save_register_enter_cback(p_cback2);
在p_cback2函数里面调用wiced_power_save_store_state( v_flag );
设备进入power save模式后,用gpio中断唤醒,在gpio的回调函数里面执行 v_flag++;并调用wiced_power_save_retrieve_state();
但是唤醒之后,v_flag的值还是0
问题:
1,wiced_power_save_register_enter_cback(p_cback2);需要在哪里调用?
2,wiced_power_save_store_state();这个函数保存的状态值,是你们定义的一些状态,还是用户自定义的变量值?
3,wiced_power_save_retrieve_state();需要在哪里调用?
4,我需要这么操作,才能保存v_flag的值?
5,有没有一个函数,让设备进入stop mode,然后唤醒之后,继续往下面跑,而不是重启?
已解决! 转到解答。
1. HIDOFF无法通过timer唤醒,只能使用LHL GPIO唤醒。如果你说的timer唤醒指的是采用下面的API进入HIDOFF,wiced_power_save_start( wiced_wake_source_t wake_source, uint32_t timeout_ms );没有办法和GPIO唤醒进行区分。
2. POR是POWER ON RESET, 所以只有第一次reset的返回值是1,API是wiced_hal_mia_is_reset_reason_por。
当系统从hidoff状态醒来一定会重启的,如果不要重启,只能选择PDS模式。
wiced_power_save_register_enter_cback(p_cback2)在初始化的时候调用就可以了。
wiced_power_save_store_state()可以保存用户自定义的变量。
是否可以把你的工程发上来我这边调试下?
你好,你修改之后的工程可以用,但是有一个问题,设备进入power save模式后,我在中断里面执行v_flag++,然后wiced_power_save_store_state(v_flag);设备唤醒之后,v_flag的值没有改变。
我的操作:
第一:
我想知道,设备唤醒的原因,是中断唤醒还是timer唤醒?
我在gpio的中断回调函数里面,执行调用:
wiced_hal_gpio_get_pin_interrupt_status(BTU_WAKE_UP_GPIO_00)
gpio_getPinInterruptStatus(BTU_WAKE_UP_GPIO_00/16,BTU_WAKE_UP_GPIO_00%16)
这两个函数应该是获取gpio的中断状态,但是值都是0
第二:
我在app init函数里面,调用mia_isResetReasonPor();想获取唤醒原因,这个值除了第一次是1,其他时候,不管是中断还是timer唤醒都是0
问题:
怎么获取设备从power save模式唤醒的原因?
附件是我的工程
1. 在HIDOFF模式下,只能通过LHL的GPIO唤醒。
2. mia_is_reset_reason_por是用来判断reset reason是否是POR,如果是,则是1,不是,则是0.
你好,你的回答没有解决我的问题。
我的问题是,怎么知道从HIDOFF唤醒的原因,是timer还是GPIO?应该调用哪些函数?
另外,CYW20706里面,mia_is_reset_reason_por没有定义,
还有,你说,这个函数用来判断reset reason是否是POR,这里的POR指什么?
1. HIDOFF无法通过timer唤醒,只能使用LHL GPIO唤醒。如果你说的timer唤醒指的是采用下面的API进入HIDOFF,wiced_power_save_start( wiced_wake_source_t wake_source, uint32_t timeout_ms );没有办法和GPIO唤醒进行区分。
2. POR是POWER ON RESET, 所以只有第一次reset的返回值是1,API是wiced_hal_mia_is_reset_reason_por。