Remove inner from status frame.
This commit is contained in:
parent
21144d3645
commit
1dfe75af44
@ -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) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -185,7 +185,7 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message
|
||||
}
|
||||
|
||||
auto statusFrame = reinterpret_cast<const StatusFrame *>(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],
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user