diff options
Diffstat (limited to 'src/hvac-service.cpp')
-rw-r--r-- | src/hvac-service.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/hvac-service.cpp b/src/hvac-service.cpp new file mode 100644 index 0000000..ee05806 --- /dev/null +++ b/src/hvac-service.cpp @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: Apache-2.0 + +#include "hvac-service.hpp" +#include <iostream> +#include <algorithm> + + +HvacService::HvacService(const VisConfig &config, net::io_context& ioc, ssl::context& ctx) : + VisSession(config, ioc, ctx), + m_can_helper(), + m_led_helper() +{ +} + +void HvacService::handle_authorized_response(void) +{ + subscribe("Vehicle.Cabin.HVAC.Station.Row1.Left.Temperature"); + subscribe("Vehicle.Cabin.HVAC.Station.Row1.Left.FanSpeed"); + subscribe("Vehicle.Cabin.HVAC.Station.Row1.Right.Temperature"); + subscribe("Vehicle.Cabin.HVAC.Station.Row1.Right.FanSpeed"); +} + +void HvacService::handle_get_response(std::string &path, std::string &value, std::string ×tamp) +{ + // Placeholder since no gets are performed ATM +} + +void HvacService::handle_notification(std::string &path, std::string &value, std::string ×tamp) +{ + if (path == "Vehicle.Cabin.HVAC.Station.Row1.Left.Temperature") { + try { + int temp = std::stoi(value); + if (temp >= 0 && temp < 256) + set_left_temperature(temp); + } + catch (std::exception ex) { + // ignore bad value + } + } else if (path == "Vehicle.Cabin.HVAC.Station.Row1.Right.Temperature") { + try { + int temp = std::stoi(value); + if (temp >= 0 && temp < 256) + set_right_temperature(temp); + } + catch (std::exception ex) { + // ignore bad value + } + } else if (path == "Vehicle.Cabin.HVAC.Station.Row1.Left.FanSpeed") { + try { + int speed = std::stoi(value); + if (speed >= 0 && speed < 256) + set_fan_speed(speed); + } + catch (std::exception ex) { + // ignore bad value + } + } else if (path == "Vehicle.Cabin.HVAC.Station.Row1.Right.FanSpeed") { + try { + int speed = std::stoi(value); + if (speed >= 0 && speed < 256) + set_fan_speed(speed); + } + catch (std::exception ex) { + // ignore bad value + } + } + // else ignore +} + +void HvacService::set_left_temperature(uint8_t temp) +{ + m_can_helper.set_left_temperature(temp); + m_led_helper.set_left_temperature(temp); +} + +void HvacService::set_right_temperature(uint8_t temp) +{ + m_can_helper.set_right_temperature(temp); + m_led_helper.set_right_temperature(temp); +} + +void HvacService::set_fan_speed(uint8_t speed) +{ + m_can_helper.set_fan_speed(speed); +} |