Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /