// SPDX-License-Identifier: Apache-2.0 #include "hvac-service.hpp" #include #include 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); }