diff --git a/include/client.h b/include/client.h index 46101ae..b1bb47c 100644 --- a/include/client.h +++ b/include/client.h @@ -178,6 +178,14 @@ namespace TeslaBLE pb_byte_t *output_buffer, size_t *output_length); + int buildOpenChargePortDoorMessage( + pb_byte_t *output_buffer, + size_t *output_length); + + int buildCloseChargePortDoorMessage( + pb_byte_t *output_buffer, + size_t *output_length); + Peer *getPeer(UniversalMessage_Domain domain) { if (domain == UniversalMessage_Domain_DOMAIN_VEHICLE_SECURITY) diff --git a/src/client.cpp b/src/client.cpp index d32ea67..36474f0 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -801,6 +801,57 @@ namespace TeslaBLE output_buffer, output_length); return 0; } + + int Client::buildOpenChargePortDoorMessage(pb_byte_t *output_buffer, + size_t *output_length) + { + CarServer_Action action = CarServer_Action_init_default; + action.which_action_msg = CarServer_Action_vehicleAction_tag; + CarServer_VehicleAction vehicle_action = CarServer_VehicleAction_init_default; + vehicle_action.which_vehicle_action_msg = CarServer_VehicleAction_chargePortDoorOpen_tag; + CarServer_ChargePortDoorOpen vehicle_action_msg = CarServer_ChargePortDoorOpen_init_default; + vehicle_action_msg.dummy_field = 1; + vehicle_action.vehicle_action_msg.chargePortDoorOpen = vehicle_action_msg; + action.action_msg.vehicleAction = vehicle_action; + + size_t universal_encode_buffer_size = UniversalMessage_RoutableMessage_size; + pb_byte_t universal_encode_buffer[universal_encode_buffer_size]; + int status = this->buildCarServerActionPayload(&action, universal_encode_buffer, &universal_encode_buffer_size); + if (status != 0) + { + LOG_ERROR("Failed to build car action message"); + return status; + } + this->prependLength(universal_encode_buffer, universal_encode_buffer_size, + output_buffer, output_length); + return 0; + } + + int Client::buildCloseChargePortDoorMessage(pb_byte_t *output_buffer, + size_t *output_length) + { + CarServer_Action action = CarServer_Action_init_default; + action.which_action_msg = CarServer_Action_vehicleAction_tag; + + CarServer_VehicleAction vehicle_action = CarServer_VehicleAction_init_default; + vehicle_action.which_vehicle_action_msg = CarServer_VehicleAction_chargePortDoorClose_tag; + CarServer_ChargePortDoorClose vehicle_action_msg = CarServer_ChargePortDoorClose_init_default; + vehicle_action_msg.dummy_field = 1; + vehicle_action.vehicle_action_msg.chargePortDoorClose = vehicle_action_msg; + action.action_msg.vehicleAction = vehicle_action; + + size_t universal_encode_buffer_size = UniversalMessage_RoutableMessage_size; + pb_byte_t universal_encode_buffer[universal_encode_buffer_size]; + int status = this->buildCarServerActionPayload(&action, universal_encode_buffer, &universal_encode_buffer_size); + if (status != 0) + { + LOG_ERROR("Failed to build car action message"); + return status; + } + this->prependLength(universal_encode_buffer, universal_encode_buffer_size, + output_buffer, output_length); + return 0; + } int Client::buildHVACMessage(bool isOn, pb_byte_t *output_buffer,