summaryrefslogtreecommitdiffstats
path: root/src/hvac-service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hvac-service.cpp')
-rw-r--r--src/hvac-service.cpp85
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 &timestamp)
+{
+ // Placeholder since no gets are performed ATM
+}
+
+void HvacService::handle_notification(std::string &path, std::string &value, std::string &timestamp)
+{
+ 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);
+}