Add local OLED recovery controls

This commit is contained in:
2026-08-29 19:31:57 +02:00
parent e291e29357
commit 371c0ab896
8 changed files with 605 additions and 49 deletions
+32
View File
@@ -518,6 +518,38 @@ esp_err_t session_broker_force_writer(session_broker_client_id_t client_id)
return ESP_OK;
}
esp_err_t session_broker_force_release_writer(
session_broker_client_id_t expected_writer_id)
{
if (!s_initialized) {
return ESP_ERR_INVALID_STATE;
}
if (expected_writer_id == SESSION_BROKER_NO_CLIENT) {
return ESP_ERR_INVALID_ARG;
}
xSemaphoreTake(s_mutex, portMAX_DELAY);
if (s_writer_id != expected_writer_id) {
xSemaphoreGive(s_mutex);
return ESP_ERR_NOT_FOUND;
}
session_broker_slot_t *writer = find_slot_locked(expected_writer_id);
if (writer == NULL) {
xSemaphoreGive(s_mutex);
return ESP_ERR_NOT_FOUND;
}
s_writer_id = SESSION_BROKER_NO_CLIENT;
++writer->counters.writer_revocations;
++writer->counters.writer_changes;
++s_counters.writer_revocations;
++s_counters.writer_changes;
broadcast_event_locked(SESSION_BROKER_EVENT_WRITER_REVOKED,
expected_writer_id, s_writer_id);
xSemaphoreGive(s_mutex);
return ESP_OK;
}
session_broker_client_id_t session_broker_get_writer_id(void)
{
if (!s_initialized) {