|
17 | 17 | #include "core/os.h" |
18 | 18 | #include "user/audio_player.h" |
19 | 19 |
|
20 | | -#define OS_PWR_TAG "os_power" |
| 20 | +#define OS_PWR_TAG "os_pwr" |
21 | 21 |
|
22 | 22 | EventGroupHandle_t user_event_group; |
23 | 23 |
|
24 | | -#if defined(CONFIG_ENABLE_WAKEUP_KEY) || defined(CONFIG_ENABLE_SLEEP_KEY) || defined(CONFIG_ENABLE_BLE_CONTROL_IF) |
| 24 | +#if defined(CONFIG_ENABLE_SLEEP_KEY) || defined(CONFIG_ENABLE_BLE_CONTROL_IF) |
25 | 25 | static EventBits_t sleep_wait_bits = 0; |
26 | | -static EventBits_t restart_wait_bits = 0; |
| 26 | +static EventBits_t reset_wait_bits = 0; |
27 | 27 |
|
28 | | -static void os_power_task_handle(void *pvParameters) |
| 28 | +static void os_pwr_task_handle(void *pvParameters) |
29 | 29 | { |
30 | 30 | ESP_LOGI(OS_PWR_TAG, "started."); |
31 | 31 |
|
32 | 32 | while (1) { |
33 | 33 | xEventGroupWaitBits( |
34 | 34 | user_event_group, |
35 | | - OS_PWR_SLEEP_BIT | OS_PWR_RESTART_BIT, |
| 35 | + OS_PWR_SLEEP_BIT | OS_PWR_RESET_BIT, |
36 | 36 | pdFALSE, |
37 | 37 | pdFALSE, |
38 | 38 | portMAX_DELAY |
39 | 39 | ); |
40 | 40 |
|
41 | | - ESP_LOGW(OS_PWR_TAG, "waiting for unfinished jobs...."); |
42 | | - vTaskDelay(500 / portTICK_RATE_MS); |
43 | | - |
44 | 41 | EventBits_t uxBits = xEventGroupGetBits(user_event_group); |
45 | 42 | if (uxBits & OS_PWR_SLEEP_BIT) { |
46 | | - xEventGroupWaitBits( |
47 | | - user_event_group, |
48 | | - sleep_wait_bits, |
49 | | - pdFALSE, |
50 | | - pdTRUE, |
51 | | - portMAX_DELAY |
52 | | - ); |
53 | | - |
54 | | -#ifdef CONFIG_ENABLE_WAKEUP_KEY |
| 43 | + if (sleep_wait_bits) { |
| 44 | + ESP_LOGW(OS_PWR_TAG, "waiting for unfinished jobs...."); |
| 45 | + |
| 46 | + vTaskDelay(500 / portTICK_RATE_MS); |
| 47 | + |
| 48 | + xEventGroupWaitBits( |
| 49 | + user_event_group, |
| 50 | + sleep_wait_bits, |
| 51 | + pdFALSE, |
| 52 | + pdTRUE, |
| 53 | + portMAX_DELAY |
| 54 | + ); |
| 55 | + } |
| 56 | + |
| 57 | +#ifdef CONFIG_ENABLE_SLEEP_KEY |
55 | 58 | esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); |
56 | | - rtc_gpio_set_direction(CONFIG_WAKEUP_KEY_PIN, RTC_GPIO_MODE_INPUT_ONLY); |
57 | | - #ifdef CONFIG_WAKEUP_KEY_ACTIVE_LOW |
58 | | - rtc_gpio_pulldown_dis(CONFIG_WAKEUP_KEY_PIN); |
59 | | - rtc_gpio_pullup_en(CONFIG_WAKEUP_KEY_PIN); |
60 | | - esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_WAKEUP_KEY_PIN, ESP_EXT1_WAKEUP_ALL_LOW); |
| 59 | + rtc_gpio_set_direction(CONFIG_SLEEP_KEY_PIN, RTC_GPIO_MODE_INPUT_ONLY); |
| 60 | + #ifdef CONFIG_SLEEP_KEY_ACTIVE_LOW |
| 61 | + rtc_gpio_pulldown_dis(CONFIG_SLEEP_KEY_PIN); |
| 62 | + rtc_gpio_pullup_en(CONFIG_SLEEP_KEY_PIN); |
| 63 | + esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_SLEEP_KEY_PIN, ESP_EXT1_WAKEUP_ALL_LOW); |
61 | 64 | #else |
62 | | - rtc_gpio_pullup_dis(CONFIG_WAKEUP_KEY_PIN); |
63 | | - rtc_gpio_pulldown_en(CONFIG_WAKEUP_KEY_PIN); |
64 | | - esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_WAKEUP_KEY_PIN, ESP_EXT1_WAKEUP_ANY_HIGH); |
| 65 | + rtc_gpio_pullup_dis(CONFIG_SLEEP_KEY_PIN); |
| 66 | + rtc_gpio_pulldown_en(CONFIG_SLEEP_KEY_PIN); |
| 67 | + esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_SLEEP_KEY_PIN, ESP_EXT1_WAKEUP_ANY_HIGH); |
65 | 68 | #endif |
66 | 69 | #endif |
67 | 70 |
|
68 | 71 | ESP_LOGW(OS_PWR_TAG, "sleep now"); |
69 | 72 | esp_deep_sleep_start(); |
70 | | - } else if (uxBits & OS_PWR_RESTART_BIT) { |
71 | | - xEventGroupWaitBits( |
72 | | - user_event_group, |
73 | | - restart_wait_bits, |
74 | | - pdFALSE, |
75 | | - pdTRUE, |
76 | | - portMAX_DELAY |
77 | | - ); |
78 | | - |
79 | | - ESP_LOGW(OS_PWR_TAG, "restart now"); |
| 73 | + } else if (uxBits & OS_PWR_RESET_BIT) { |
| 74 | + if (reset_wait_bits) { |
| 75 | + ESP_LOGW(OS_PWR_TAG, "waiting for unfinished jobs...."); |
| 76 | + |
| 77 | + vTaskDelay(500 / portTICK_RATE_MS); |
| 78 | + |
| 79 | + xEventGroupWaitBits( |
| 80 | + user_event_group, |
| 81 | + reset_wait_bits, |
| 82 | + pdFALSE, |
| 83 | + pdTRUE, |
| 84 | + portMAX_DELAY |
| 85 | + ); |
| 86 | + } |
| 87 | + |
| 88 | + ESP_LOGW(OS_PWR_TAG, "reset now"); |
80 | 89 | esp_restart(); |
81 | 90 | } |
82 | 91 | } |
83 | 92 | } |
84 | 93 |
|
85 | | -void os_power_sleep_wait(EventBits_t bits) |
| 94 | +void os_pwr_sleep_wait(EventBits_t bits) |
86 | 95 | { |
87 | | - if (bits) { |
88 | | - sleep_wait_bits = bits; |
89 | | - xEventGroupSetBits(user_event_group, OS_PWR_SLEEP_BIT); |
90 | | - } else { |
91 | | -#ifdef CONFIG_ENABLE_WAKEUP_KEY |
92 | | - esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); |
93 | | - rtc_gpio_set_direction(CONFIG_WAKEUP_KEY_PIN, RTC_GPIO_MODE_INPUT_ONLY); |
94 | | - #ifdef CONFIG_WAKEUP_KEY_ACTIVE_LOW |
95 | | - rtc_gpio_pulldown_dis(CONFIG_WAKEUP_KEY_PIN); |
96 | | - rtc_gpio_pullup_en(CONFIG_WAKEUP_KEY_PIN); |
97 | | - esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_WAKEUP_KEY_PIN, ESP_EXT1_WAKEUP_ALL_LOW); |
98 | | - #else |
99 | | - rtc_gpio_pullup_dis(CONFIG_WAKEUP_KEY_PIN); |
100 | | - rtc_gpio_pulldown_en(CONFIG_WAKEUP_KEY_PIN); |
101 | | - esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_WAKEUP_KEY_PIN, ESP_EXT1_WAKEUP_ANY_HIGH); |
102 | | - #endif |
103 | | -#endif |
104 | | - ESP_LOGW(OS_PWR_TAG, "sleep now"); |
105 | | - esp_deep_sleep_start(); |
106 | | - } |
| 96 | + sleep_wait_bits = bits; |
| 97 | + xEventGroupSetBits(user_event_group, OS_PWR_SLEEP_BIT); |
107 | 98 | } |
108 | 99 |
|
109 | | -void os_power_restart_wait(EventBits_t bits) |
| 100 | +void os_pwr_reset_wait(EventBits_t bits) |
110 | 101 | { |
111 | | - if (bits) { |
112 | | - restart_wait_bits = bits; |
113 | | - xEventGroupSetBits(user_event_group, OS_PWR_RESTART_BIT); |
114 | | - } else { |
115 | | - ESP_LOGW(OS_PWR_TAG, "restart now"); |
116 | | - esp_restart(); |
117 | | - } |
| 102 | + reset_wait_bits = bits; |
| 103 | + xEventGroupSetBits(user_event_group, OS_PWR_RESET_BIT); |
118 | 104 | } |
119 | 105 | #endif |
120 | 106 |
|
121 | 107 | void os_init(void) |
122 | 108 | { |
123 | 109 | user_event_group = xEventGroupCreate(); |
124 | 110 |
|
125 | | -#ifdef CONFIG_ENABLE_WAKEUP_KEY |
126 | | - ESP_LOGW(OS_PWR_TAG, "checking wakeup cause"); |
| 111 | +#if defined(CONFIG_ENABLE_SLEEP_KEY) || defined(CONFIG_ENABLE_BLE_CONTROL_IF) |
| 112 | + xTaskCreatePinnedToCore(os_pwr_task_handle, "osPwrT", 2048, NULL, 5, NULL, 0); |
| 113 | +#endif |
| 114 | + |
| 115 | +#ifdef CONFIG_ENABLE_SLEEP_KEY |
127 | 116 | if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_UNDEFINED) { |
128 | | - vTaskDelay(CONFIG_WAKEUP_KEY_EXTRA_HOLD_TIME / portTICK_RATE_MS); |
| 117 | +#if CONFIG_SLEEP_KEY_HOLD_TIME > 500 |
| 118 | + vTaskDelay((CONFIG_SLEEP_KEY_HOLD_TIME - 500) / portTICK_RATE_MS); |
129 | 119 |
|
130 | | -#ifdef CONFIG_WAKEUP_KEY_ACTIVE_LOW |
131 | | - if (rtc_gpio_get_level(CONFIG_WAKEUP_KEY_PIN) == 0) { |
| 120 | +#ifdef CONFIG_SLEEP_KEY_ACTIVE_LOW |
| 121 | + if (rtc_gpio_get_level(CONFIG_SLEEP_KEY_PIN) == 0) { |
132 | 122 | #else |
133 | | - if (rtc_gpio_get_level(CONFIG_WAKEUP_KEY_PIN) == 1) { |
| 123 | + if (rtc_gpio_get_level(CONFIG_SLEEP_KEY_PIN) == 1) { |
134 | 124 | #endif |
135 | | - ESP_LOGW(OS_PWR_TAG, "resuming from sleep mode"); |
| 125 | + ESP_LOGW(OS_PWR_TAG, "resuming from sleep mode...."); |
136 | 126 | } else { |
137 | | - ESP_LOGW(OS_PWR_TAG, "resuming aborted"); |
| 127 | + ESP_LOGW(OS_PWR_TAG, "resuming aborted."); |
138 | 128 |
|
139 | | - os_power_sleep_wait(0); |
| 129 | + os_pwr_sleep_wait(0); |
140 | 130 | } |
| 131 | +#else |
| 132 | + ESP_LOGW(OS_PWR_TAG, "resuming from sleep mode...."); |
| 133 | +#endif |
141 | 134 | } else { |
142 | | - os_power_sleep_wait(0); |
| 135 | + os_pwr_sleep_wait(0); |
143 | 136 | } |
144 | 137 |
|
145 | 138 | #ifdef CONFIG_ENABLE_AUDIO_PROMPT |
146 | | - audio_player_play_file(2); |
| 139 | + audio_player_play_file(3); |
147 | 140 | #endif |
148 | | -#endif // CONFIG_ENABLE_WAKEUP_KEY |
149 | | - |
150 | | -#if defined(CONFIG_ENABLE_WAKEUP_KEY) || defined(CONFIG_ENABLE_SLEEP_KEY) || defined(CONFIG_ENABLE_BLE_CONTROL_IF) |
151 | | - xTaskCreatePinnedToCore(os_power_task_handle, "osPowerT", 2048, NULL, 5, NULL, 0); |
152 | 141 | #endif |
153 | 142 | } |
0 commit comments