Cleanup code and only allocate buffer when needed

This commit is contained in:
Matthijs Abma 2020-05-24 17:15:06 +02:00
parent a4ce4830e8
commit 7210934774
2 changed files with 32 additions and 18 deletions

View File

@ -1345,16 +1345,23 @@ void SerialInput(void)
if (Settings.flag.mqtt_serial && serial_in_byte_counter && (millis() > (serial_polling_window + SERIAL_POLLING))) { // CMND_SERIALSEND and CMND_SERIALLOG if (Settings.flag.mqtt_serial && serial_in_byte_counter && (millis() > (serial_polling_window + SERIAL_POLLING))) { // CMND_SERIALSEND and CMND_SERIALLOG
serial_in_buffer[serial_in_byte_counter] = 0; // Serial data completed serial_in_buffer[serial_in_byte_counter] = 0; // Serial data completed
char hex_char[(serial_in_byte_counter * 2) + 2];
bool assume_json = (!Settings.flag.mqtt_serial_raw && (serial_in_buffer[0] == '{')); bool assume_json = (!Settings.flag.mqtt_serial_raw && (serial_in_buffer[0] == '{'));
Response_P(PSTR("{\"" D_JSON_SERIALRECEIVED "\":%s%s%s}"),
(assume_json) ? "" : "\"", Response_P(PSTR("{\"" D_JSON_SERIALRECEIVED "\":"));
(Settings.flag.mqtt_serial_raw) if (assume_json) {
? ToHex_P((unsigned char*)serial_in_buffer, serial_in_byte_counter, hex_char, sizeof(hex_char)) ResponseAppend_P(serial_in_buffer);
: (assume_json) } else {
? serial_in_buffer ResponseAppend_P(PSTR("\""));
: EscapeJSONString(serial_in_buffer).c_str(), if (Settings.flag.mqtt_serial_raw) {
(assume_json) ? "" : "\""); char hex_char[(serial_in_byte_counter * 2) + 2];
ResponseAppend_P(ToHex_P((unsigned char*)serial_in_buffer, serial_in_byte_counter, hex_char, sizeof(hex_char)));
} else {
ResponseAppend_P(EscapeJSONString(serial_in_buffer).c_str());
}
ResponseAppend_P(PSTR("\""));
}
ResponseAppend_P(PSTR("}"));
MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_SERIALRECEIVED)); MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_SERIALRECEIVED));
XdrvRulesProcess(); XdrvRulesProcess();
serial_in_byte_counter = 0; serial_in_byte_counter = 0;

View File

@ -76,16 +76,23 @@ void SerialBridgeInput(void)
if (serial_bridge_in_byte_counter && (millis() > (serial_bridge_polling_window + SERIAL_POLLING))) { if (serial_bridge_in_byte_counter && (millis() > (serial_bridge_polling_window + SERIAL_POLLING))) {
serial_bridge_buffer[serial_bridge_in_byte_counter] = 0; // Serial data completed serial_bridge_buffer[serial_bridge_in_byte_counter] = 0; // Serial data completed
char hex_char[(serial_bridge_in_byte_counter * 2) + 2];
bool assume_json = (!serial_bridge_raw && (serial_bridge_buffer[0] == '{')); bool assume_json = (!serial_bridge_raw && (serial_bridge_buffer[0] == '{'));
Response_P(PSTR("{\"" D_JSON_SSERIALRECEIVED "\":%s%s%s}"),
(assume_json) ? "" : "\"", Response_P(PSTR("{\"" D_JSON_SSERIALRECEIVED "\":"));
(serial_bridge_raw) if (assume_json) {
? ToHex_P((unsigned char*)serial_bridge_buffer, serial_bridge_in_byte_counter, hex_char, sizeof(hex_char)) ResponseAppend_P(serial_bridge_buffer);
: (assume_json) } else {
? serial_bridge_buffer ResponseAppend_P(PSTR("\""));
: EscapeJSONString(serial_bridge_buffer).c_str(), if (serial_bridge_raw) {
(assume_json) ? "" : "\""); char hex_char[(serial_bridge_in_byte_counter * 2) + 2];
ResponseAppend_P(ToHex_P((unsigned char*)serial_bridge_buffer, serial_bridge_in_byte_counter, hex_char, sizeof(hex_char)));
} else {
ResponseAppend_P(EscapeJSONString(serial_bridge_buffer).c_str());
}
ResponseAppend_P(PSTR("\""));
}
ResponseAppend_P(PSTR("}"));
MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_SSERIALRECEIVED)); MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_SSERIALRECEIVED));
XdrvRulesProcess(); XdrvRulesProcess();
serial_bridge_in_byte_counter = 0; serial_bridge_in_byte_counter = 0;