29class Service :
public z21::server::intf::Dcc {
34 void z21(std::shared_ptr<z21::server::intf::System> z21_system_service,
35 std::shared_ptr<z21::server::intf::Dcc> z21_dcc_service);
61 std::optional<uint8_t>
serviceRead(uint16_t cv_addr);
62 std::optional<uint8_t>
serviceWrite(uint16_t cv_addr, uint8_t
byte);
66 void sendToFront(Packet
const& packet,
size_t n = 1uz)
const;
67 void sendToBack(Packet
const& packet,
size_t n = 1uz)
const;
72 z21::LocoInfo
locoInfo(uint16_t loco_addr)
final;
73 void locoName(uint16_t loco_addr, uint8_t, std::string_view name)
final;
75 z21::LocoInfo::SpeedSteps speed_steps,
76 uint8_t rvvvvvvv)
final;
78 z21::LocoInfo::Mode
locoMode(uint16_t loco_addr)
final;
79 void locoMode(uint16_t, z21::LocoInfo::Mode mode)
final;
83 [[nodiscard]] z21::TurnoutInfo
turnoutInfo(uint16_t accy_addr)
final;
84 [[nodiscard]] z21::AccessoryInfo
accessoryInfo(uint16_t accy_addr)
final;
85 void turnout(uint16_t accy_addr,
bool p,
bool a,
bool q)
final;
86 void accessory(uint16_t accy_addr, uint8_t dddddddd)
final;
87 [[nodiscard]] z21::TurnoutInfo::Mode
turnoutMode(uint16_t accy_addr)
final;
88 void turnoutMode(uint16_t accy_addr, z21::TurnoutInfo::Mode mode)
final;
93 [[nodiscard]]
bool cvRead(uint16_t cv_addr)
final;
94 [[nodiscard]]
bool cvWrite(uint16_t cv_addr, uint8_t
byte)
final;
95 void cvPomRead(uint16_t loco_addr, uint16_t cv_addr)
final;
96 void cvPomWrite(uint16_t loco_addr, uint16_t cv_addr, uint8_t
byte)
final;
104 void cvAck(uint16_t cv_addr, uint8_t
byte)
final;
107 [[nodiscard]] z21::RailComData
railComData(uint16_t loco_addr)
final;
122 Loco const& loco)
const;
147 std::optional<uint8_t>
byte{};
149 ztl::inplace_deque<CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT>
151 ztl::inplace_deque<CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT>
uint8_t loco_flags
Definition service.hpp:136
ztl::inplace_deque< CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT > _cv_pom_request_deque
Definition service.hpp:152
void locoFunction(uint16_t loco_addr, uint32_t mask, uint32_t state) final
Definition service.cpp:794
std::optional< bool > serviceReceiveBit()
Definition service.cpp:663
intf::http::Response locosGetRequest(intf::http::Request const &req)
Definition service.cpp:102
Locos _locos
Definition service.hpp:124
Address basicOrExtendedLocoAddress(Address::value_type addr) const
Definition service.cpp:1083
void resume()
Definition service.cpp:1029
Turnout & getOrInsertTurnout(uint16_t accy_addr)
Definition service.cpp:1064
std::shared_ptr< z21::server::intf::System > _z21_system_service
Definition service.hpp:128
void cvNack() final
Definition service.cpp:1008
void cvNackShortCircuit() final
Definition service.cpp:1005
void cvAck(uint16_t cv_addr, uint8_t byte) final
Definition service.cpp:1011
intf::http::Response turnoutsGetRequest(intf::http::Request const &req)
Definition service.cpp:238
intf::http::Response turnoutsDeleteRequest(intf::http::Request const &req)
Definition service.cpp:273
uint8_t programming_type
Definition service.hpp:133
std::shared_ptr< z21::server::intf::Dcc > _z21_dcc_service
Definition service.hpp:129
void cvPomWrite(uint16_t loco_addr, uint16_t cv_addr, uint8_t byte) final
Definition service.cpp:955
void operationsLocos()
Currently fills message buffer between 25 and 50%.
Definition service.cpp:405
std::optional< uint8_t > serviceRead(uint16_t cv_addr)
Definition service.cpp:611
void locoName(uint16_t loco_addr, uint8_t, std::string_view name) final
Definition service.cpp:761
void sendLocoSpeedAndDirection(Address::value_type addr, Loco const &loco) const
Definition service.cpp:1101
void operationsBiDi()
Definition service.cpp:489
Loco & getOrInsertLoco(uint16_t loco_addr)
Definition service.cpp:1053
z21::TurnoutInfo turnoutInfo(uint16_t accy_addr) final
Definition service.cpp:843
void suspend()
Definition service.cpp:1045
z21::LocoInfo locoInfo(uint16_t loco_addr) final
Definition service.cpp:749
void locoPurge(uint16_t loco_addr) final
Definition service.cpp:738
void broadcastExtAccessoryInfo(uint16_t accy_addr) final
Definition service.cpp:916
z21::AccessoryInfo accessoryInfo(uint16_t accy_addr) final
Definition service.cpp:852
void broadcastLocoInfo(uint16_t loco_addr) final
Definition service.cpp:838
struct mw::dcc::Service::@375351017336315001104246161026011227303125012136 _nvs
z21::TurnoutInfo::Mode turnoutMode(uint16_t accy_addr) final
Definition service.cpp:901
uint8_t accy_flags
Definition service.hpp:137
ztl::inplace_deque< CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT > _cv_request_deque
Definition service.hpp:150
void sendToBack(Packet const &packet, size_t n=1uz) const
Definition service.cpp:699
bool cvRead(uint16_t cv_addr) final
Definition service.cpp:921
void turnout(uint16_t accy_addr, bool p, bool a, bool q) final
Definition service.cpp:861
std::optional< uint8_t > serviceWrite(uint16_t cv_addr, uint8_t byte)
Definition service.cpp:652
void accessory(uint16_t accy_addr, uint8_t dddddddd) final
Definition service.cpp:896
Service()
Definition service.cpp:36
void sendToFront(Packet const &packet, size_t n=1uz) const
Definition service.cpp:685
void locoEStop(uint16_t loco_addr) final
Definition service.cpp:706
z21::RailComData railComData(uint16_t loco_addr) final
Definition service.cpp:1016
uint8_t accy_packet_count
Definition service.hpp:139
void operationsLoop()
Definition service.cpp:392
void broadcastRailComData(uint16_t loco_addr) final
Definition service.cpp:1024
intf::http::Response turnoutsPutRequest(intf::http::Request const &req)
Definition service.cpp:298
std::mutex _internal_mutex
Definition service.hpp:127
intf::http::Response locosDeleteRequest(intf::http::Request const &req)
Definition service.cpp:138
void z21(std::shared_ptr< z21::server::intf::System > z21_system_service, std::shared_ptr< z21::server::intf::Dcc > z21_dcc_service)
Definition service.cpp:51
void locoDrive(uint16_t loco_addr, z21::LocoInfo::SpeedSteps speed_steps, uint8_t rvvvvvvv) final
Definition service.cpp:773
intf::http::Response locosPutRequest(intf::http::Request const &req)
Definition service.cpp:162
intf::http::Response postRequest(intf::http::Request const &req)
Definition service.cpp:69
bool maybeInvertR(bool p) const
Definition service.cpp:1094
void operationsTurnouts()
Definition service.cpp:474
uint8_t accy_switch_time
Definition service.hpp:138
void serviceLoop()
Definition service.cpp:568
Turnouts _turnouts
Definition service.hpp:125
std::optional< uint8_t > serviceReceiveByte()
Definition service.cpp:675
bool bit_verify_to_1
Definition service.hpp:135
uint8_t program_packet_count
Definition service.hpp:134
z21::LocoInfo::Mode locoMode(uint16_t loco_addr) final
Definition service.cpp:828
void cvPomRead(uint16_t loco_addr, uint16_t cv_addr) final
Definition service.cpp:935
void taskFunction(void *)
Definition service.cpp:374
void cvPomAccessoryWrite(uint16_t accy_addr, uint16_t cv_addr, uint8_t byte, bool) final
Definition service.cpp:990
bool cvWrite(uint16_t cv_addr, uint8_t byte) final
Definition service.cpp:928
void cvPomAccessoryRead(uint16_t accy_addr, uint16_t cv_addr, bool) final
Definition service.cpp:966
intf::http::Response getRequest(intf::http::Request const &req)
Definition service.cpp:58
void broadcastTurnoutInfo(uint16_t accy_addr) final
Definition service.cpp:911
std::atomic< State > state
Restricts access to low-level tasks.
Definition config.hpp:180
HTTP and WebSocket endpoints.
std::expected< std::string, std::string > Response
Definition response.hpp:29
Definition config.hpp:578
std::map< Address::value_type, Loco > Locos
Definition locos.hpp:23
std::map< Address::value_type, Turnout > Turnouts
Definition turnouts.hpp:23
Definition request.hpp:28
Actual object with volatile and non-volatile stuff.
Definition loco.hpp:43
Definition service.hpp:143
uint16_t addr
Definition service.hpp:145
uint16_t cv_addr
Definition service.hpp:146
TickType_t timeout_tick
Definition service.hpp:144
Actual object with volatile and non-volatile stuff.
Definition turnout.hpp:75