diff --git a/data/index.html b/data/index.html index 5f29818..7c96223 100644 --- a/data/index.html +++ b/data/index.html @@ -506,7 +506,7 @@

Actions

- "; + msg += ""; + msg += ""; + modal.appendToModal('small', msg); + modal.showModal('small'); + }, + + /** @brief Clear all CAN mappings via direct SDO and reload the table */ + clearCanMapping: function() + { + modal.hideModal('small'); + inverter.clearCanMapping(function(values) { + ui.populateExistingCanMappingTable(values); + ui.showParamSuccessBar('CAN mappings cleared'); + }); + }, + /** @brief Populate the table of existing CAN mappings */ populateExistingCanMappingTable: function(values) { var existigCanMappingTable = document.getElementById("existingCanMappingTable"); diff --git a/esp32-web-interface.ino b/esp32-web-interface.ino index b0387e6..a4e2fc7 100644 --- a/esp32-web-interface.ino +++ b/esp32-web-interface.ino @@ -563,6 +563,9 @@ static void handleCanMap() { if (server.hasArg("add")) { res = OICan::AddCanMapping(server.arg("add")); } + else if (server.hasArg("clear")) { + res = OICan::ClearCanMapping(); + } else if (server.hasArg("remove")) { res = OICan::RemoveCanMapping(server.arg("remove")); } diff --git a/src/oi_can.cpp b/src/oi_can.cpp index b3a36d7..414ba99 100644 --- a/src/oi_can.cpp +++ b/src/oi_can.cpp @@ -57,6 +57,7 @@ #define SDO_CMD_LOAD 1 #define SDO_CMD_RESET 2 #define SDO_CMD_DEFAULTS 3 +#define SDO_CMD_CLEAR_CAN 4 #define SDO_CMD_START 4 #define SDO_CMD_STOP 5 #define MAX_ERROR_LOG_ENTRIES 100 @@ -559,6 +560,31 @@ SetResult RemoveCanMapping(String json){ return CommError; } +SetResult ClearCanMapping() { + if (state != IDLE) return CommError; + + twai_message_t rxframe; + + setValueSdo(SDO_INDEX_COMMANDS, SDO_CMD_CLEAR_CAN, 0U); + + if (twai_receive(&rxframe, pdMS_TO_TICKS(200)) == ESP_OK) { + if (rxframe.data[0] == SDO_WRITE_REPLY && + rxframe.data[1] == 0x02 && + rxframe.data[2] == 0x50 && + rxframe.data[3] == SDO_CMD_CLEAR_CAN) { + DBG_OUTPUT_PORT.println("CAN mappings cleared"); + return Ok; + } + else if (rxframe.data[0] == SDO_ABORT) { + DBG_OUTPUT_PORT.println("Clear CAN mappings aborted"); + return UnknownIndex; + } + } + + DBG_OUTPUT_PORT.println("Comm Error"); + return CommError; +} + SetResult SetValue(String name, double value) { if (state != IDLE) return CommError; diff --git a/src/oi_can.h b/src/oi_can.h index 5bbecad..dcaa8b7 100644 --- a/src/oi_can.h +++ b/src/oi_can.h @@ -30,6 +30,7 @@ void Loop(); bool SendJson(WiFiClient c); void SendCanMapping(WiFiClient c); SetResult AddCanMapping(String json); +SetResult ClearCanMapping(); SetResult RemoveCanMapping(String json); SetResult SetValue(String name, double value); double GetValue(String name);