wiced_power_save_start唤醒之后,如何继续往下跑

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
joli_4610801
Level 1
Level 1
5 replies posted First question asked First reply posted

我的流程:

定义一个全局变量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,然后唤醒之后,继续往下面跑,而不是重启?

0 点赞
1 解答
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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。

在原帖中查看解决方案

0 点赞
7 回复数
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

当系统从hidoff状态醒来一定会重启的,如果不要重启,只能选择PDS模式。

wiced_power_save_register_enter_cback(p_cback2)在初始化的时候调用就可以了。

wiced_power_save_store_state()可以保存用户自定义的变量。

是否可以把你的工程发上来我这边调试下?

0 点赞
lock attach
Attachments are accessible only for community members.

你好,这是测试工程,请帮忙查看

0 点赞
lock attach
Attachments are accessible only for community members.
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

在使用GPIO唤醒之后,需要调用 v_flag = wiced_power_save_retrieve_state();来重新获取存储的状态量。

我在你的程序上做了一些修改,从休眠唤醒之后,在app_init中读取存储的变量,可以成功读到hidoff之前的值。请参考附件。

我使用的是CYW20706的EVAL board,你可能需要改一下唤醒引脚的配置。

0 点赞
lock attach
Attachments are accessible only for community members.

你好,你修改之后的工程可以用,但是有一个问题,设备进入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模式唤醒的原因?

附件是我的工程

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

1. 在HIDOFF模式下,只能通过LHL的GPIO唤醒。

2. mia_is_reset_reason_por是用来判断reset reason是否是POR,如果是,则是1,不是,则是0.

0 点赞

你好,你的回答没有解决我的问题。

我的问题是,怎么知道从HIDOFF唤醒的原因,是timer还是GPIO?应该调用哪些函数?

另外,CYW20706里面,mia_is_reset_reason_por没有定义,

还有,你说,这个函数用来判断reset reason是否是POR,这里的POR指什么?

pastedImage_1.png

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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。

0 点赞