diff --git a/components/truma_inetbox/TrumaStatusFrameBuilder.h b/components/truma_inetbox/TrumaStatusFrameBuilder.h index 65d4a54..5be58ee 100644 --- a/components/truma_inetbox/TrumaStatusFrameBuilder.h +++ b/components/truma_inetbox/TrumaStatusFrameBuilder.h @@ -8,21 +8,21 @@ namespace truma_inetbox { inline void status_frame_create_empty(StatusFrame *response, u_int8_t message_type, u_int8_t message_length, u_int8_t command_counter) { - response->inner.genericHeader.service_identifier = LIN_SID_READ_STATE_BUFFER | LIN_SID_RESPONSE; + response->genericHeader.service_identifier = LIN_SID_READ_STATE_BUFFER | LIN_SID_RESPONSE; // Copy header over for this message. for (size_t i = 1; i < truma_message_header.size(); i++) { response->raw[i] = truma_message_header[i]; } - response->inner.genericHeader.header_2 = 'T'; - response->inner.genericHeader.header_3 = 0x01; - response->inner.genericHeader.message_type = message_type; - response->inner.genericHeader.message_length = message_length; - response->inner.genericHeader.command_counter = command_counter; + response->genericHeader.header_2 = 'T'; + response->genericHeader.header_3 = 0x01; + response->genericHeader.message_type = message_type; + response->genericHeader.message_length = message_length; + response->genericHeader.command_counter = command_counter; } inline void status_frame_calculate_checksum(StatusFrame *response) { - response->inner.genericHeader.checksum = 0x0; - response->inner.genericHeader.checksum = data_checksum(&response->raw[10], sizeof(StatusFrame) - 10, 0); + response->genericHeader.checksum = 0x0; + response->genericHeader.checksum = data_checksum(&response->raw[10], sizeof(StatusFrame) - 10, 0); } inline void status_frame_create_init(StatusFrame *response, u_int8_t *response_len, u_int8_t command_counter) { diff --git a/components/truma_inetbox/TrumaStructs.h b/components/truma_inetbox/TrumaStructs.h index c841e67..66975c8 100644 --- a/components/truma_inetbox/TrumaStructs.h +++ b/components/truma_inetbox/TrumaStructs.h @@ -10,7 +10,7 @@ namespace truma_inetbox { #define LIN_SID_FIll_STATE_BUFFFER 0xBB // Response to init are the following frames: -// - 2 * STATUS_FRAME_DEVICES +// - 2/3 STATUS_FRAME_DEVICES // - STATUS_FRAME_HEATER // - STATUS_FRAME_TIMER // - STAUTS_FRAME_CONFIG @@ -302,7 +302,7 @@ struct StatusFrameAirconAutoInit { // NOLINT(altera-struct-pack-align) union StatusFrame { // NOLINT(altera-struct-pack-align) u_int8_t raw[41]; - struct inner { // NOLINT(altera-struct-pack-align) + struct { // NOLINT(altera-struct-pack-align) StatusFrameHeader genericHeader; union { // NOLINT(altera-struct-pack-align) StatusFrameHeater heater; @@ -320,7 +320,7 @@ union StatusFrame { // NOLINT(altera-struct-pack-align) StatusFrameAirconAutoResponse airconAutoResponse; StatusFrameAirconAutoInit airconAutoInit; } __attribute__((packed)); - } inner; + }; } __attribute__((packed)); } // namespace truma_inetbox diff --git a/components/truma_inetbox/TrumaiNetBoxApp.cpp b/components/truma_inetbox/TrumaiNetBoxApp.cpp index 35cc709..cb59c9f 100644 --- a/components/truma_inetbox/TrumaiNetBoxApp.cpp +++ b/components/truma_inetbox/TrumaiNetBoxApp.cpp @@ -185,7 +185,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message } auto statusFrame = reinterpret_cast(message); - auto header = &statusFrame->inner.genericHeader; + auto header = &statusFrame->genericHeader; // Validate Truma frame checksum if (header->checksum != data_checksum(&statusFrame->raw[10], sizeof(StatusFrame) - 10, (0xFF - header->checksum)) || header->header_2 != 'T' || header->header_3 != 0x01) { @@ -202,7 +202,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // Example: // SID<---------PREAMBLE---------->|<---MSG_HEAD---->|tRoom|mo| |elecA|tWate|elecB|mi|mi|cWate|cRoom|st|err | | // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.14.33.00.12.00.00.00.00.00.00.00.00.00.00.01.01.CC.0B.6C.0B.00.00.00.00 - this->heater_.set_status(statusFrame->inner.heater); + this->heater_.set_status(statusFrame->heater); return response; } else if (header->message_type == STATUS_FRAME_AIRCON_MANUAL && header->message_length == sizeof(StatusFrameAirconManual)) { @@ -226,7 +226,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.C2.04.00.71.01.D6.0B.00.00.88.0B.00.00.00.00.00.00.AA.0A // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.13.04.00.71.01.86.0B.00.00.88.0B.00.00.00.00.00.00.AA.0A // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.A8.00.00.71.01.00.00.00.00.88.0B.00.00.00.00.00.00.AA.0A - this->airconManual_.set_status(statusFrame->inner.airconManual); + this->airconManual_.set_status(statusFrame->airconManual); return response; } else if (header->message_type == STATUS_FRAME_AIRCON_MANUAL_INIT && header->message_length == sizeof(StatusFrameAirconManualInit)) { @@ -241,7 +241,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // Example: // SID<---------PREAMBLE---------->|<---MSG_HEAD---->| // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.37.00.BF.01.00.01.00.00.00.00.00.00.00.00.00.00.00.49.0B.40.0B - this->airconAuto_.set_status(statusFrame->inner.airconAuto); + this->airconAuto_.set_status(statusFrame->airconAuto); return response; } else if (header->message_type == STATUS_FRAME_AIRCON_AUTO_INIT && header->message_length == sizeof(StatusFrameAirconAutoInit)) { @@ -256,7 +256,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // SID<---------PREAMBLE---------->|<---MSG_HEAD---->|tRoom|mo|??|elecA|tWate|elecB|mi|mi|<--response-->|??|??|on|start|stop-| // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.18.3D.00.1D.18.0B.01.00.00.00.00.00.00.00.01.01.00.00.00.00.00.00.00.01.00.08.00.09 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.18.3D.00.13.18.0B.0B.00.00.00.00.00.00.00.01.01.00.00.00.00.00.00.00.01.00.08.00.09 - this->timer_.set_status(statusFrame->inner.timer); + this->timer_.set_status(statusFrame->timer); return response; } else if (header->message_type == STATUS_FRAME_CLOCK && header->message_length == sizeof(StatusFrameClock)) { @@ -266,7 +266,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0A.15.00.5B.0D.20.00.01.01.00.00.01.00.00 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0A.15.00.71.16.00.00.01.01.00.00.02.00.00 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0A.15.00.2B.16.1F.28.01.01.00.00.01.00.00 - this->clock_.set_status(statusFrame->inner.clock); + this->clock_.set_status(statusFrame->clock); return response; } else if (header->message_type == STAUTS_FRAME_CONFIG && header->message_length == sizeof(StatusFrameConfig)) { ESP_LOGI(TAG, "StatusFrameConfig"); @@ -275,21 +275,21 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0A.17.00.0F.06.01.B4.0A.AA.0A.00.00.00.00 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0A.17.00.41.06.01.B4.0A.78.0A.00.00.00.00 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0A.17.00.0F.06.01.B4.0A.AA.0A.00.00.00.00 - this->config_.set_status(statusFrame->inner.config); + this->config_.set_status(statusFrame->config); return response; } else if (header->message_type == STATUS_FRAME_RESPONSE_ACK && header->message_length == sizeof(StatusFrameResponseAck)) { // Example: // SID<---------PREAMBLE---------->|<---MSG_HEAD---->| // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.02.0D.01.98.02.00 - auto data = statusFrame->inner.responseAck; + auto data = statusFrame->responseAck; if (data.error_code != ResponseAckResult::RESPONSE_ACK_RESULT_OKAY) { ESP_LOGW(TAG, "StatusFrameResponseAck"); } else { ESP_LOGI(TAG, "StatusFrameResponseAck"); } - ESP_LOGD(TAG, "StatusFrameResponseAck %02X %s %02X", statusFrame->inner.genericHeader.command_counter, + ESP_LOGD(TAG, "StatusFrameResponseAck %02X %s %02X", statusFrame->genericHeader.command_counter, data.error_code == ResponseAckResult::RESPONSE_ACK_RESULT_OKAY ? " OKAY " : " FAILED ", (u_int8_t) data.error_code); @@ -314,7 +314,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.C7.03.00.01.00.50.00.00.04.03.00.60.10 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.71.03.01.01.00.10.03.02.06.00.02.00.00 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.7C.03.02.01.00.01.0C.00.01.02.01.00.00 - auto device = statusFrame->inner.device; + auto device = statusFrame->device; ESP_LOGD(TAG, "StatusFrameDevice %d/%d - %d.%02d.%02d %04X.%02X (%02X %02X)", device.device_id + 1, device.device_count, device.software_revision[0], device.software_revision[1], device.software_revision[2], diff --git a/components/truma_inetbox/TrumaiNetBoxAppAirconAuto.cpp b/components/truma_inetbox/TrumaiNetBoxAppAirconAuto.cpp index 7e2d8fe..68f2ab3 100644 --- a/components/truma_inetbox/TrumaiNetBoxAppAirconAuto.cpp +++ b/components/truma_inetbox/TrumaiNetBoxAppAirconAuto.cpp @@ -38,17 +38,17 @@ void TrumaiNetBoxAppAirconAuto::create_update_data(StatusFrame *response, u_int8 status_frame_create_empty(response, STATUS_FRAME_AIRCON_AUTO_RESPONSE, sizeof(StatusFrameAirconAutoResponse), command_counter); - response->inner.airconAutoResponse.energy_mix_a = this->update_status_.energy_mix_a; - response->inner.airconAutoResponse.unknown_02 = this->update_status_.unknown_02; - response->inner.airconAutoResponse.energy_mix_b = this->update_status_.energy_mix_b; - response->inner.airconAutoResponse.unknown_04 = this->update_status_.unknown_04; - response->inner.airconAutoResponse.unknown_05 = this->update_status_.unknown_05; - response->inner.airconAutoResponse.unknown_06 = this->update_status_.unknown_06; - response->inner.airconAutoResponse.target_temp_aircon_auto = this->update_status_.target_temp_aircon_auto; - response->inner.airconAutoResponse.el_power_level_a = this->update_status_.el_power_level_a; - response->inner.airconAutoResponse.unknown_11 = this->update_status_.unknown_11; - response->inner.airconAutoResponse.unknown_12 = this->update_status_.unknown_12; - response->inner.airconAutoResponse.el_power_level_b = this->update_status_.el_power_level_b; + response->airconAutoResponse.energy_mix_a = this->update_status_.energy_mix_a; + response->airconAutoResponse.unknown_02 = this->update_status_.unknown_02; + response->airconAutoResponse.energy_mix_b = this->update_status_.energy_mix_b; + response->airconAutoResponse.unknown_04 = this->update_status_.unknown_04; + response->airconAutoResponse.unknown_05 = this->update_status_.unknown_05; + response->airconAutoResponse.unknown_06 = this->update_status_.unknown_06; + response->airconAutoResponse.target_temp_aircon_auto = this->update_status_.target_temp_aircon_auto; + response->airconAutoResponse.el_power_level_a = this->update_status_.el_power_level_a; + response->airconAutoResponse.unknown_11 = this->update_status_.unknown_11; + response->airconAutoResponse.unknown_12 = this->update_status_.unknown_12; + response->airconAutoResponse.el_power_level_b = this->update_status_.el_power_level_b; status_frame_calculate_checksum(response); (*response_len) = sizeof(StatusFrameHeader) + sizeof(StatusFrameAirconAutoResponse); diff --git a/components/truma_inetbox/TrumaiNetBoxAppAirconManual.cpp b/components/truma_inetbox/TrumaiNetBoxAppAirconManual.cpp index fa32a22..5747e5e 100644 --- a/components/truma_inetbox/TrumaiNetBoxAppAirconManual.cpp +++ b/components/truma_inetbox/TrumaiNetBoxAppAirconManual.cpp @@ -31,11 +31,11 @@ void TrumaiNetBoxAppAirconManual::create_update_data(StatusFrame *response, u_in status_frame_create_empty(response, STATUS_FRAME_AIRCON_MANUAL_RESPONSE, sizeof(StatusFrameAirconManualResponse), command_counter); - response->inner.airconManualResponse.mode = this->update_status_.mode; - response->inner.airconManualResponse.unknown_02 = this->update_status_.unknown_02; - response->inner.airconManualResponse.operation = this->update_status_.operation; - response->inner.airconManualResponse.energy_mix = this->update_status_.energy_mix; - response->inner.airconManualResponse.target_temp_aircon = this->update_status_.target_temp_aircon; + response->airconManualResponse.mode = this->update_status_.mode; + response->airconManualResponse.unknown_02 = this->update_status_.unknown_02; + response->airconManualResponse.operation = this->update_status_.operation; + response->airconManualResponse.energy_mix = this->update_status_.energy_mix; + response->airconManualResponse.target_temp_aircon = this->update_status_.target_temp_aircon; status_frame_calculate_checksum(response); (*response_len) = sizeof(StatusFrameHeader) + sizeof(StatusFrameAirconManualResponse); diff --git a/components/truma_inetbox/TrumaiNetBoxAppClock.cpp b/components/truma_inetbox/TrumaiNetBoxAppClock.cpp index cdfd71a..c535512 100644 --- a/components/truma_inetbox/TrumaiNetBoxAppClock.cpp +++ b/components/truma_inetbox/TrumaiNetBoxAppClock.cpp @@ -47,12 +47,12 @@ void TrumaiNetBoxAppClock::create_update_data(StatusFrame *response, u_int8_t *r status_frame_create_empty(response, STATUS_FRAME_CLOCK_RESPONSE, sizeof(StatusFrameClock), command_counter); - response->inner.clock.clock_hour = now.hour; - response->inner.clock.clock_minute = now.minute; - response->inner.clock.clock_second = now.second; - response->inner.clock.display_1 = 0x1; - response->inner.clock.display_2 = 0x1; - response->inner.clock.clock_mode = this->data_.clock_mode; + response->clock.clock_hour = now.hour; + response->clock.clock_minute = now.minute; + response->clock.clock_second = now.second; + response->clock.display_1 = 0x1; + response->clock.display_2 = 0x1; + response->clock.clock_mode = this->data_.clock_mode; status_frame_calculate_checksum(response); (*response_len) = sizeof(StatusFrameHeader) + sizeof(StatusFrameClock); diff --git a/components/truma_inetbox/TrumaiNetBoxAppHeater.cpp b/components/truma_inetbox/TrumaiNetBoxAppHeater.cpp index 305e219..92d457f 100644 --- a/components/truma_inetbox/TrumaiNetBoxAppHeater.cpp +++ b/components/truma_inetbox/TrumaiNetBoxAppHeater.cpp @@ -33,13 +33,13 @@ void TrumaiNetBoxAppHeater::create_update_data(StatusFrame *response, u_int8_t * u_int8_t command_counter) { status_frame_create_empty(response, STATUS_FRAME_HEATER_RESPONSE, sizeof(StatusFrameHeaterResponse), command_counter); - response->inner.heaterResponse.target_temp_room = this->update_status_.target_temp_room; - response->inner.heaterResponse.heating_mode = this->update_status_.heating_mode; - response->inner.heaterResponse.target_temp_water = this->update_status_.target_temp_water; - response->inner.heaterResponse.energy_mix_a = this->update_status_.energy_mix_a; - response->inner.heaterResponse.energy_mix_b = this->update_status_.energy_mix_a; - response->inner.heaterResponse.el_power_level_a = this->update_status_.el_power_level_a; - response->inner.heaterResponse.el_power_level_b = this->update_status_.el_power_level_a; + response->heaterResponse.target_temp_room = this->update_status_.target_temp_room; + response->heaterResponse.heating_mode = this->update_status_.heating_mode; + response->heaterResponse.target_temp_water = this->update_status_.target_temp_water; + response->heaterResponse.energy_mix_a = this->update_status_.energy_mix_a; + response->heaterResponse.energy_mix_b = this->update_status_.energy_mix_a; + response->heaterResponse.el_power_level_a = this->update_status_.el_power_level_a; + response->heaterResponse.el_power_level_b = this->update_status_.el_power_level_a; status_frame_calculate_checksum(response); (*response_len) = sizeof(StatusFrameHeader) + sizeof(StatusFrameHeaterResponse); diff --git a/components/truma_inetbox/TrumaiNetBoxAppTimer.cpp b/components/truma_inetbox/TrumaiNetBoxAppTimer.cpp index a0e8162..ee71ce3 100644 --- a/components/truma_inetbox/TrumaiNetBoxAppTimer.cpp +++ b/components/truma_inetbox/TrumaiNetBoxAppTimer.cpp @@ -37,18 +37,18 @@ StatusFrameTimerResponse *TrumaiNetBoxAppTimer::update_prepare() { void TrumaiNetBoxAppTimer::create_update_data(StatusFrame *response, u_int8_t *response_len, u_int8_t command_counter) { status_frame_create_empty(response, STATUS_FRAME_TIMER_RESPONSE, sizeof(StatusFrameTimerResponse), command_counter); - response->inner.timerResponse.timer_target_temp_room = this->update_status_.timer_target_temp_room; - response->inner.timerResponse.timer_heating_mode = this->update_status_.timer_heating_mode; - response->inner.timerResponse.timer_target_temp_water = this->update_status_.timer_target_temp_water; - response->inner.timerResponse.timer_energy_mix_a = this->update_status_.timer_energy_mix_a; - response->inner.timerResponse.timer_energy_mix_b = this->update_status_.timer_energy_mix_a; - response->inner.timerResponse.timer_el_power_level_a = this->update_status_.timer_el_power_level_a; - response->inner.timerResponse.timer_el_power_level_b = this->update_status_.timer_el_power_level_a; - response->inner.timerResponse.timer_resp_active = this->update_status_.timer_resp_active; - response->inner.timerResponse.timer_resp_start_hours = this->update_status_.timer_resp_start_hours; - response->inner.timerResponse.timer_resp_start_minutes = this->update_status_.timer_resp_start_minutes; - response->inner.timerResponse.timer_resp_stop_hours = this->update_status_.timer_resp_stop_hours; - response->inner.timerResponse.timer_resp_stop_minutes = this->update_status_.timer_resp_stop_minutes; + response->timerResponse.timer_target_temp_room = this->update_status_.timer_target_temp_room; + response->timerResponse.timer_heating_mode = this->update_status_.timer_heating_mode; + response->timerResponse.timer_target_temp_water = this->update_status_.timer_target_temp_water; + response->timerResponse.timer_energy_mix_a = this->update_status_.timer_energy_mix_a; + response->timerResponse.timer_energy_mix_b = this->update_status_.timer_energy_mix_a; + response->timerResponse.timer_el_power_level_a = this->update_status_.timer_el_power_level_a; + response->timerResponse.timer_el_power_level_b = this->update_status_.timer_el_power_level_a; + response->timerResponse.timer_resp_active = this->update_status_.timer_resp_active; + response->timerResponse.timer_resp_start_hours = this->update_status_.timer_resp_start_hours; + response->timerResponse.timer_resp_start_minutes = this->update_status_.timer_resp_start_minutes; + response->timerResponse.timer_resp_stop_hours = this->update_status_.timer_resp_stop_hours; + response->timerResponse.timer_resp_stop_minutes = this->update_status_.timer_resp_stop_minutes; status_frame_calculate_checksum(response); (*response_len) = sizeof(StatusFrameHeader) + sizeof(StatusFrameTimerResponse);