Skip to content

Commit b9c4a4c

Browse files
authored
Enable light sleep on ESP32. Fixed style (mysensors#1546)
1 parent aa520ce commit b9c4a4c

File tree

1 file changed

+38
-18
lines changed

1 file changed

+38
-18
lines changed

hal/architecture/ESP32/MyHwESP32.cpp

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ void hwWriteConfig(const int addr, uint8_t value)
7171
bool hwUniqueID(unique_id_t *uniqueID)
7272
{
7373
uint64_t val = ESP.getEfuseMac();
74-
(void)memcpy((void *)uniqueID, (void *)&val, 8);
75-
(void)memset((void *)(uniqueID + 8), MY_HWID_PADDING_BYTE, 8); // padding
74+
(void)memcpy(static_cast<void *>(uniqueID), (void *)&val, 8);
75+
(void)memset(static_cast<void *>(uniqueID + 8), MY_HWID_PADDING_BYTE, 8); // padding
7676
return true;
7777
}
7878

@@ -82,7 +82,7 @@ ssize_t hwGetentropy(void *__buffer, size_t __length)
8282
if (__length > 256) {
8383
__length = 256;
8484
}
85-
uint8_t *dst = (uint8_t *)__buffer;
85+
uint8_t *dst = static_cast<uint8_t *>(__buffer);
8686
// get random numbers
8787
for (size_t i = 0; i < __length; i++) {
8888
dst[i] = (uint8_t)esp_random();
@@ -92,31 +92,51 @@ ssize_t hwGetentropy(void *__buffer, size_t __length)
9292

9393
int8_t hwSleep(uint32_t ms)
9494
{
95-
// TODO: Not supported!
96-
(void)ms;
97-
return MY_SLEEP_NOT_POSSIBLE;
95+
esp_sleep_enable_timer_wakeup((uint64_t)ms * 1000);
96+
esp_light_sleep_start();
97+
return MY_WAKE_UP_BY_TIMER;
9898
}
9999

100100
int8_t hwSleep(const uint8_t interrupt, const uint8_t mode, uint32_t ms)
101101
{
102-
// TODO: Not supported!
103-
(void)interrupt;
104-
(void)mode;
105-
(void)ms;
106-
return MY_SLEEP_NOT_POSSIBLE;
102+
if(mode == FALLING) {
103+
gpio_wakeup_enable((gpio_num_t)interrupt, GPIO_INTR_LOW_LEVEL);
104+
} else if (mode == RISING) {
105+
gpio_wakeup_enable((gpio_num_t)interrupt, GPIO_INTR_HIGH_LEVEL);
106+
} else {
107+
return MY_SLEEP_NOT_POSSIBLE;
108+
}
109+
esp_sleep_enable_gpio_wakeup();
110+
esp_sleep_enable_timer_wakeup((uint64_t)ms * 1000);
111+
esp_light_sleep_start();
112+
gpio_wakeup_disable((gpio_num_t)interrupt);
113+
return 0;
107114
}
108115

109116
int8_t hwSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t interrupt2,
110117
const uint8_t mode2,
111118
uint32_t ms)
112119
{
113-
// TODO: Not supported!
114-
(void)interrupt1;
115-
(void)mode1;
116-
(void)interrupt2;
117-
(void)mode2;
118-
(void)ms;
119-
return MY_SLEEP_NOT_POSSIBLE;
120+
if(mode1 == FALLING) {
121+
gpio_wakeup_enable((gpio_num_t)interrupt1, GPIO_INTR_LOW_LEVEL);
122+
} else if (mode1 == RISING) {
123+
gpio_wakeup_enable((gpio_num_t)interrupt1, GPIO_INTR_HIGH_LEVEL);
124+
} else {
125+
return MY_SLEEP_NOT_POSSIBLE;
126+
}
127+
if(mode2 == FALLING) {
128+
gpio_wakeup_enable((gpio_num_t)interrupt2, GPIO_INTR_LOW_LEVEL);
129+
} else if (mode2 == RISING) {
130+
gpio_wakeup_enable((gpio_num_t)interrupt2, GPIO_INTR_HIGH_LEVEL);
131+
} else {
132+
return MY_SLEEP_NOT_POSSIBLE;
133+
}
134+
esp_sleep_enable_gpio_wakeup();
135+
esp_sleep_enable_timer_wakeup((uint64_t)ms * 1000);
136+
esp_light_sleep_start();
137+
gpio_wakeup_disable((gpio_num_t)interrupt1);
138+
gpio_wakeup_disable((gpio_num_t)interrupt2);
139+
return 0;
120140
}
121141

122142
uint16_t hwCPUVoltage(void)

0 commit comments

Comments
 (0)