Firmware  0.8.1
Loading...
Searching...
No Matches
service.hpp
Go to the documentation of this file.
1// Copyright (C) 2025 Vincent Hamp
2//
3// This program is free software: you can redistribute it and/or modify
4// it under the terms of the GNU General Public License as published by
5// the Free Software Foundation, either version 3 of the License, or
6// (at your option) any later version.
7//
8// This program is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11// GNU General Public License for more details.
12//
13// You should have received a copy of the GNU General Public License
14// along with this program. If not, see <https://www.gnu.org/licenses/>.
15
16#pragma once
17
18#include <mutex>
19#include <set>
20#include <z21/z21.hpp>
21#include "intf/http/message.hpp"
22
23namespace mw::roco::z21 {
24
25using namespace ::z21;
26
27using ServerBase = z21::server::Base<z21::server::intf::System,
28 z21::server::intf::Dcc,
29 z21::server::intf::Settings>;
30
31class Service : public ServerBase {
32public:
33 Service();
34
35 void dcc(std::shared_ptr<z21::server::intf::Dcc> dcc_service);
36
37 esp_err_t socket(intf::http::Message& msg);
38
39private:
40 // This gets called by FreeRTOS
41 [[noreturn]] void taskFunction(void*);
42
43 //
44 void transmit(z21::Socket const& sock,
45 std::span<uint8_t const> datasets) final;
46
47 //
48 [[nodiscard]] bool trackPower(bool on) final;
49 [[nodiscard]] bool stop() final;
50 [[nodiscard]] int32_t serialNumber() const final;
51 void logoff(z21::Socket const& sock) final;
52 [[nodiscard]] z21::SystemState& systemState() final;
53
54 // Driving interface
55 void locoEStop(uint16_t loco_addr) final;
56 void locoPurge(uint16_t loco_addr) final;
57 z21::LocoInfo locoInfo(uint16_t loco_addr) final;
58 [[nodiscard]] z21::LocoEntry locoEntry(uint16_t loco_addr) final;
59 void locoEntry(uint16_t loco_addr, z21::LocoEntry loco_entry) final;
60 void locoFunction(uint16_t loco_addr, uint32_t mask, uint32_t state) final;
61 void locoDrive(uint16_t loco_addr,
62 z21::LocoInfo::SpeedSteps speed_steps,
63 uint8_t rvvvvvvv) final;
64 z21::LocoInfo::Mode locoMode(uint16_t loco_addr) final;
65 void locoMode(uint16_t loco_addr, z21::LocoInfo::Mode mode) final;
66
67 // Switching interface
68 [[nodiscard]] z21::TurnoutInfo turnoutInfo(uint16_t accy_addr) final;
69 [[nodiscard]] z21::AccessoryInfo accessoryInfo(uint16_t accy_addr) final;
70 void turnout(uint16_t accy_addr, bool p, bool a, bool q) final;
71 void accessory(uint16_t accy_addr, uint8_t dddddddd) final;
72 [[nodiscard]] z21::TurnoutInfo::Mode turnoutMode(uint16_t accy_addr) final;
73 void turnoutMode(uint16_t accy_addr, z21::TurnoutInfo::Mode mode) final;
74
75 // Programming interface
76 [[nodiscard]] bool cvRead(uint16_t cv_addr) final;
77 [[nodiscard]] bool cvWrite(uint16_t cv_addr, uint8_t byte) final;
78 void cvPomRead(uint16_t loco_addr, uint16_t cv_addr) final;
79 void cvPomWrite(uint16_t loco_addr, uint16_t cv_addr, uint8_t byte) final;
80 void cvPomAccessoryRead(uint16_t accy_addr, uint16_t cv_addr, bool c) final;
81 void cvPomAccessoryWrite(uint16_t accy_addr,
82 uint16_t cv_addr,
83 uint8_t byte,
84 bool c) final;
85
86 // RailCom interface
87 [[nodiscard]] z21::RailComData railComData(uint16_t loco_addr) final;
88
89 // Settings interface
90 [[nodiscard]] z21::CommonSettings commonSettings() final;
91 void commonSettings(z21::CommonSettings const& common_settings) final;
92 [[nodiscard]] z21::MmDccSettings mmDccSettings() final;
93 void mmDccSettings(z21::MmDccSettings const& mm_dcc_settings) final;
94
95 // Logging interface
96 // void log(char const* str) final;
97
98 //
99 bool trackPower(bool on, State desired_dcc_state);
100
102 std::shared_ptr<z21::server::intf::Dcc> _dcc_service;
103
105 std::set<int> _ws_sock_fds;
106
107 std::mutex _internal_mutex;
108};
109
110} // namespace mw::roco::z21
void turnout(uint16_t accy_addr, bool p, bool a, bool q) final
Definition service.cpp:275
void accessory(uint16_t accy_addr, uint8_t dddddddd) final
Definition service.cpp:280
void locoFunction(uint16_t loco_addr, uint32_t mask, uint32_t state) final
Definition service.cpp:250
bool stop() final
Definition service.cpp:141
bool cvRead(uint16_t cv_addr) final
Definition service.cpp:295
std::shared_ptr< z21::server::intf::Dcc > _dcc_service
Definition service.hpp:102
z21::TurnoutInfo turnoutInfo(uint16_t accy_addr) final
Definition service.cpp:265
esp_err_t socket(intf::http::Message &msg)
Definition service.cpp:42
void locoPurge(uint16_t loco_addr) final
Definition service.cpp:223
void cvPomWrite(uint16_t loco_addr, uint16_t cv_addr, uint8_t byte) final
Definition service.cpp:314
z21::MmDccSettings mmDccSettings() final
Definition service.cpp:356
void dcc(std::shared_ptr< z21::server::intf::Dcc > dcc_service)
Definition service.cpp:35
void locoEStop(uint16_t loco_addr) final
Definition service.cpp:218
std::set< int > _ws_sock_fds
Definition service.hpp:105
void cvPomRead(uint16_t loco_addr, uint16_t cv_addr) final
Definition service.cpp:309
void cvPomAccessoryWrite(uint16_t accy_addr, uint16_t cv_addr, uint8_t byte, bool c) final
Definition service.cpp:324
z21::LocoEntry locoEntry(uint16_t loco_addr) final
Definition service.cpp:233
z21::LocoInfo locoInfo(uint16_t loco_addr) final
Definition service.cpp:228
z21::LocoInfo::Mode locoMode(uint16_t loco_addr) final
Definition service.cpp:255
z21::TurnoutInfo::Mode turnoutMode(uint16_t accy_addr) final
Definition service.cpp:285
z21::SystemState & systemState() final
Definition service.cpp:161
void transmit(z21::Socket const &sock, std::span< uint8_t const > datasets) final
Definition service.cpp:114
int32_t serialNumber() const final
Definition service.cpp:149
Service()
Definition service.cpp:30
std::mutex _internal_mutex
Definition service.hpp:107
void logoff(z21::Socket const &sock) final
Definition service.cpp:154
void locoDrive(uint16_t loco_addr, z21::LocoInfo::SpeedSteps speed_steps, uint8_t rvvvvvvv) final
Definition service.cpp:243
bool cvWrite(uint16_t cv_addr, uint8_t byte) final
Definition service.cpp:302
z21::CommonSettings commonSettings() final
Definition service.cpp:337
void taskFunction(void *)
Definition service.cpp:75
z21::RailComData railComData(uint16_t loco_addr) final
Definition service.cpp:332
z21::AccessoryInfo accessoryInfo(uint16_t accy_addr) final
Definition service.cpp:270
bool trackPower(bool on) final
Definition service.cpp:136
void cvPomAccessoryRead(uint16_t accy_addr, uint16_t cv_addr, bool c) final
Definition service.cpp:319
std::atomic< State > state
Restricts access to low-level tasks.
Definition config.hpp:180
State
System state.
Definition config.hpp:152
HTTP websocket message.
Definition config.hpp:625
z21::server::Base< z21::server::intf::System, z21::server::intf::Dcc, z21::server::intf::Settings > ServerBase
Definition service.hpp:27
Definition message.hpp:29