Skip to content

Commit 9ac7570

Browse files
authored
Merge branch 'espressif:master' into main
2 parents 96dbdb5 + 2fecc48 commit 9ac7570

File tree

5 files changed

+49
-14
lines changed

5 files changed

+49
-14
lines changed

cores/esp32/esp32-hal-misc.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,13 @@ void enableCore0WDT() {
156156
}
157157
}
158158

159-
void disableCore0WDT() {
159+
bool disableCore0WDT() {
160160
TaskHandle_t idle_0 = xTaskGetIdleTaskHandleForCore(0);
161-
if (idle_0 == NULL || esp_task_wdt_delete(idle_0) != ESP_OK) {
161+
if (idle_0 == NULL || esp_task_wdt_status(idle_0) || esp_task_wdt_delete(idle_0) != ESP_OK) {
162162
log_e("Failed to remove Core 0 IDLE task from WDT");
163+
return false;
163164
}
165+
return true;
164166
}
165167

166168
#ifndef CONFIG_FREERTOS_UNICORE
@@ -171,11 +173,13 @@ void enableCore1WDT() {
171173
}
172174
}
173175

174-
void disableCore1WDT() {
176+
bool disableCore1WDT() {
175177
TaskHandle_t idle_1 = xTaskGetIdleTaskHandleForCore(1);
176-
if (idle_1 == NULL || esp_task_wdt_delete(idle_1) != ESP_OK) {
178+
if (idle_1 == NULL || esp_task_wdt_status(idle_1) || esp_task_wdt_delete(idle_1) != ESP_OK) {
177179
log_e("Failed to remove Core 1 IDLE task from WDT");
180+
return false;
178181
}
182+
return true;
179183
}
180184
#endif
181185

cores/esp32/esp32-hal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,11 @@ void feedLoopWDT();
121121

122122
//enable/disable WDT for the IDLE task on Core 0 (SYSTEM)
123123
void enableCore0WDT();
124-
void disableCore0WDT();
124+
bool disableCore0WDT();
125125
#ifndef CONFIG_FREERTOS_UNICORE
126126
//enable/disable WDT for the IDLE task on Core 1 (Arduino)
127127
void enableCore1WDT();
128-
void disableCore1WDT();
128+
bool disableCore1WDT();
129129
#endif
130130

131131
//if xCoreID < 0 or CPU is unicore, it will use xTaskCreate, else xTaskCreatePinnedToCore

libraries/LittleFS/src/LittleFS.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ void LittleFSFS::end() {
9595
}
9696

9797
bool LittleFSFS::format() {
98-
disableCore0WDT();
98+
bool wdt_active = disableCore0WDT();
9999
esp_err_t err = esp_littlefs_format(partitionLabel_);
100-
enableCore0WDT();
100+
if (wdt_active) {
101+
enableCore0WDT();
102+
}
101103
if (err) {
102104
log_e("Formatting LittleFS failed! Error: %d", err);
103105
return false;

libraries/Zigbee/src/ZigbeeEP.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ class ZigbeeEP {
105105
virtual void zbReadBasicCluster(const esp_zb_zcl_attribute_t *attribute); //already implemented
106106
virtual void zbIdentify(const esp_zb_zcl_set_attr_value_message_t *message);
107107

108+
virtual void zbIASZoneStatusChangeNotification(const esp_zb_zcl_ias_zone_status_change_notification_message_t *message) {};
109+
110+
virtual void addBoundDevice(zb_device_params_t *device) {
111+
_bound_devices.push_back(device);
112+
_is_bound = true;
113+
}
114+
108115
void onIdentify(void (*callback)(uint16_t)) {
109116
_on_identify = callback;
110117
}
@@ -125,10 +132,6 @@ class ZigbeeEP {
125132
SemaphoreHandle_t lock;
126133
zb_power_source_t _power_source;
127134

128-
void addBoundDevice(zb_device_params_t *device) {
129-
_bound_devices.push_back(device);
130-
_is_bound = true;
131-
}
132135
friend class ZigbeeCore;
133136
};
134137

libraries/Zigbee/src/ZigbeeHandlers.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ static esp_err_t zb_attribute_set_handler(const esp_zb_zcl_set_attr_value_messag
99
static esp_err_t zb_attribute_reporting_handler(const esp_zb_zcl_report_attr_message_t *message);
1010
static esp_err_t zb_cmd_read_attr_resp_handler(const esp_zb_zcl_cmd_read_attr_resp_message_t *message);
1111
static esp_err_t zb_configure_report_resp_handler(const esp_zb_zcl_cmd_config_report_resp_message_t *message);
12+
static esp_err_t zb_cmd_ias_zone_status_change_handler(const esp_zb_zcl_ias_zone_status_change_notification_message_t *message);
1213
static esp_err_t zb_cmd_default_resp_handler(const esp_zb_zcl_cmd_default_resp_message_t *message);
1314

1415
// Zigbee action handlers
@@ -20,8 +21,11 @@ static esp_err_t zb_action_handler(esp_zb_core_action_callback_id_t callback_id,
2021
case ESP_ZB_CORE_REPORT_ATTR_CB_ID: ret = zb_attribute_reporting_handler((esp_zb_zcl_report_attr_message_t *)message); break;
2122
case ESP_ZB_CORE_CMD_READ_ATTR_RESP_CB_ID: ret = zb_cmd_read_attr_resp_handler((esp_zb_zcl_cmd_read_attr_resp_message_t *)message); break;
2223
case ESP_ZB_CORE_CMD_REPORT_CONFIG_RESP_CB_ID: ret = zb_configure_report_resp_handler((esp_zb_zcl_cmd_config_report_resp_message_t *)message); break;
23-
case ESP_ZB_CORE_CMD_DEFAULT_RESP_CB_ID: ret = zb_cmd_default_resp_handler((esp_zb_zcl_cmd_default_resp_message_t *)message); break;
24-
default: log_w("Receive unhandled Zigbee action(0x%x) callback", callback_id); break;
24+
case ESP_ZB_CORE_CMD_IAS_ZONE_ZONE_STATUS_CHANGE_NOT_ID:
25+
ret = zb_cmd_ias_zone_status_change_handler((esp_zb_zcl_ias_zone_status_change_notification_message_t *)message);
26+
break;
27+
case ESP_ZB_CORE_CMD_DEFAULT_RESP_CB_ID: ret = zb_cmd_default_resp_handler((esp_zb_zcl_cmd_default_resp_message_t *)message); break;
28+
default: log_w("Receive unhandled Zigbee action(0x%x) callback", callback_id); break;
2529
}
2630
return ret;
2731
}
@@ -132,6 +136,28 @@ static esp_err_t zb_configure_report_resp_handler(const esp_zb_zcl_cmd_config_re
132136
return ESP_OK;
133137
}
134138

139+
static esp_err_t zb_cmd_ias_zone_status_change_handler(const esp_zb_zcl_ias_zone_status_change_notification_message_t *message) {
140+
if (!message) {
141+
log_e("Empty message");
142+
return ESP_FAIL;
143+
}
144+
if (message->info.status != ESP_ZB_ZCL_STATUS_SUCCESS) {
145+
log_e("Received message: error status(%d)", message->info.status);
146+
return ESP_ERR_INVALID_ARG;
147+
}
148+
log_v(
149+
"IAS Zone Status Notification: from address(0x%x) src endpoint(%d) to dst endpoint(%d) cluster(0x%x)", message->info.src_address.u.short_addr,
150+
message->info.src_endpoint, message->info.dst_endpoint, message->info.cluster
151+
);
152+
153+
for (std::list<ZigbeeEP *>::iterator it = Zigbee.ep_objects.begin(); it != Zigbee.ep_objects.end(); ++it) {
154+
if (message->info.dst_endpoint == (*it)->getEndpoint()) {
155+
(*it)->zbIASZoneStatusChangeNotification(message);
156+
}
157+
}
158+
return ESP_OK;
159+
}
160+
135161
static esp_err_t zb_cmd_default_resp_handler(const esp_zb_zcl_cmd_default_resp_message_t *message) {
136162
if (!message) {
137163
log_e("Empty message");

0 commit comments

Comments
 (0)