Firmware  0.4.1
Loading...
Searching...
No Matches
mw::dcc::Service Class Reference

#include <service.hpp>

Inheritance diagram for mw::dcc::Service:
Collaboration diagram for mw::dcc::Service:

Classes

struct  CvRequest
 

Public Member Functions

 Service ()
 
void z21 (std::shared_ptr< z21::server::intf::System > z21_system_service, std::shared_ptr< z21::server::intf::Dcc > z21_dcc_service)
 
intf::http::Response getRequest (intf::http::Request const &req)
 
intf::http::Response postRequest (intf::http::Request const &req)
 
intf::http::Response locosGetRequest (intf::http::Request const &req)
 
intf::http::Response locosDeleteRequest (intf::http::Request const &req)
 
intf::http::Response locosPutRequest (intf::http::Request const &req)
 
intf::http::Response turnoutsGetRequest (intf::http::Request const &req)
 
intf::http::Response turnoutsDeleteRequest (intf::http::Request const &req)
 
intf::http::Response turnoutsPutRequest (intf::http::Request const &req)
 

Private Member Functions

void taskFunction (void *)
 
void operationsLoop ()
 
void operationsDcc ()
 Currently fills message buffer between 25 and 50%.
 
void operationsBiDi ()
 
void serviceLoop ()
 
std::optional< uint8_t > serviceRead (uint16_t cv_addr)
 
std::optional< uint8_t > serviceWrite (uint16_t cv_addr, uint8_t byte)
 
std::optional< bool > serviceReceiveBit ()
 
std::optional< uint8_t > serviceReceiveByte ()
 
void sendToFront (Packet const &packet, size_t n=1uz)
 
void sendToBack (Packet const &packet, size_t n=1uz)
 
z21::LocoInfo locoInfo (uint16_t loco_addr) final
 
void locoDrive (uint16_t loco_addr, z21::LocoInfo::SpeedSteps speed_steps, uint8_t rvvvvvvv) final
 
void locoFunction (uint16_t loco_addr, uint32_t mask, uint32_t state) final
 
z21::LocoInfo::Mode locoMode (uint16_t loco_addr) final
 
void locoMode (uint16_t, z21::LocoInfo::Mode mode) final
 
void broadcastLocoInfo (uint16_t loco_addr) final
 
z21::TurnoutInfo turnoutInfo (uint16_t accy_addr) final
 
z21::AccessoryInfo accessoryInfo (uint16_t accy_addr) final
 
void turnout (uint16_t accy_addr, bool p, bool a, bool q) final
 
void accessory (uint16_t accy_addr, uint8_t dddddddd) final
 
z21::TurnoutInfo::Mode turnoutMode (uint16_t accy_addr) final
 
void turnoutMode (uint16_t accy_addr, z21::TurnoutInfo::Mode mode) final
 
void broadcastTurnoutInfo (uint16_t accy_addr) final
 
void broadcastExtAccessoryInfo (uint16_t accy_addr) final
 
bool cvRead (uint16_t cv_addr) final
 
bool cvWrite (uint16_t cv_addr, uint8_t byte) final
 
void cvPomRead (uint16_t loco_addr, uint16_t cv_addr) final
 
void cvPomWrite (uint16_t loco_addr, uint16_t cv_addr, uint8_t byte) final
 
void cvPomAccessoryRead (uint16_t accy_addr, uint16_t cv_addr) final
 
void cvPomAccessoryWrite (uint16_t accy_addr, uint16_t cv_addr, uint8_t byte) final
 
void cvNackShortCircuit () final
 
void cvNack () final
 
void cvAck (uint16_t cv_addr, uint8_t byte) final
 
z21::RailComData railComData (uint16_t loco_addr) final
 
void broadcastRailComData (uint16_t loco_addr) final
 
void resume ()
 
void suspend ()
 
Address basicOrExtendedLocoAddress (Address::value_type addr) const
 

Private Attributes

Locos _locos
 
Turnouts _turnouts
 
std::mutex _internal_mutex
 
std::shared_ptr< z21::server::intf::System > _z21_system_service
 
std::shared_ptr< z21::server::intf::Dcc > _z21_dcc_service
 
uint8_t _priority_count {Loco::min_priority}
 
uint8_t _loco_flags {}
 
uint8_t _accy_flags {}
 
uint8_t _programming_type {}
 
uint8_t _program_packet_count {}
 
bool _bit_verify_to_1 {}
 
ztl::inplace_deque< CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT > _cv_request_deque {}
 
ztl::inplace_deque< CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT > _cv_pom_request_deque {}
 

Detailed Description

Todo
document

Constructor & Destructor Documentation

◆ Service()

mw::dcc::Service::Service ( )
Todo
document

Member Function Documentation

◆ accessory()

void mw::dcc::Service::accessory ( uint16_t accy_addr,
uint8_t dddddddd )
finalprivate
Todo
document

◆ accessoryInfo()

z21::AccessoryInfo mw::dcc::Service::accessoryInfo ( uint16_t accy_addr)
nodiscardfinalprivate
Todo
document

◆ basicOrExtendedLocoAddress()

Address mw::dcc::Service::basicOrExtendedLocoAddress ( Address::value_type addr) const
private
Todo
document

◆ broadcastExtAccessoryInfo()

void mw::dcc::Service::broadcastExtAccessoryInfo ( uint16_t accy_addr)
finalprivate
Todo
document

◆ broadcastLocoInfo()

void mw::dcc::Service::broadcastLocoInfo ( uint16_t loco_addr)
finalprivate
Todo
document

◆ broadcastRailComData()

void mw::dcc::Service::broadcastRailComData ( uint16_t loco_addr)
finalprivate
Todo
document

◆ broadcastTurnoutInfo()

void mw::dcc::Service::broadcastTurnoutInfo ( uint16_t accy_addr)
finalprivate
Todo
document

◆ cvAck()

void mw::dcc::Service::cvAck ( uint16_t cv_addr,
uint8_t byte )
finalprivate
Todo
document

◆ cvNack()

void mw::dcc::Service::cvNack ( )
finalprivate
Todo
document

◆ cvNackShortCircuit()

void mw::dcc::Service::cvNackShortCircuit ( )
finalprivate
Todo
document

◆ cvPomAccessoryRead()

void mw::dcc::Service::cvPomAccessoryRead ( uint16_t accy_addr,
uint16_t cv_addr )
finalprivate
Todo
document

◆ cvPomAccessoryWrite()

void mw::dcc::Service::cvPomAccessoryWrite ( uint16_t accy_addr,
uint16_t cv_addr,
uint8_t byte )
finalprivate
Todo
document

◆ cvPomRead()

void mw::dcc::Service::cvPomRead ( uint16_t loco_addr,
uint16_t cv_addr )
finalprivate
Todo
document
Todo
reset loco prio here

◆ cvPomWrite()

void mw::dcc::Service::cvPomWrite ( uint16_t loco_addr,
uint16_t cv_addr,
uint8_t byte )
finalprivate
Todo
document

◆ cvRead()

bool mw::dcc::Service::cvRead ( uint16_t cv_addr)
nodiscardfinalprivate
Todo
document

◆ cvWrite()

bool mw::dcc::Service::cvWrite ( uint16_t cv_addr,
uint8_t byte )
nodiscardfinalprivate
Todo
document

◆ getRequest()

intf::http::Response mw::dcc::Service::getRequest ( intf::http::Request const & req)
Todo
document

◆ locoDrive()

void mw::dcc::Service::locoDrive ( uint16_t loco_addr,
z21::LocoInfo::SpeedSteps speed_steps,
uint8_t rvvvvvvv )
finalprivate
Todo
document

◆ locoFunction()

void mw::dcc::Service::locoFunction ( uint16_t loco_addr,
uint32_t mask,
uint32_t state )
finalprivate
Todo
document
Todo
are broadcast functions a thing?

◆ locoInfo()

z21::LocoInfo mw::dcc::Service::locoInfo ( uint16_t loco_addr)
finalprivate
Todo
document

◆ locoMode() [1/2]

z21::LocoInfo::Mode mw::dcc::Service::locoMode ( uint16_t loco_addr)
finalprivate
Todo
document

◆ locoMode() [2/2]

void mw::dcc::Service::locoMode ( uint16_t ,
z21::LocoInfo::Mode mode )
finalprivate
Todo
document

◆ locosDeleteRequest()

intf::http::Response mw::dcc::Service::locosDeleteRequest ( intf::http::Request const & req)
Todo

document

filters?

◆ locosGetRequest()

intf::http::Response mw::dcc::Service::locosGetRequest ( intf::http::Request const & req)
Todo

document

filters?

◆ locosPutRequest()

intf::http::Response mw::dcc::Service::locosPutRequest ( intf::http::Request const & req)
Todo
document

◆ operationsBiDi()

void mw::dcc::Service::operationsBiDi ( )
private
Todo
document
Todo
remove that once we care for other addresses

◆ operationsDcc()

void mw::dcc::Service::operationsDcc ( )
private

◆ operationsLoop()

void mw::dcc::Service::operationsLoop ( )
private
Todo
document

◆ postRequest()

intf::http::Response mw::dcc::Service::postRequest ( intf::http::Request const & req)
Todo
document

◆ railComData()

z21::RailComData mw::dcc::Service::railComData ( uint16_t loco_addr)
nodiscardfinalprivate
Todo
document

◆ resume()

void mw::dcc::Service::resume ( )
private
Todo
document

◆ sendToBack()

void mw::dcc::Service::sendToBack ( Packet const & packet,
size_t n = 1uz )
private
Todo
document

◆ sendToFront()

void mw::dcc::Service::sendToFront ( Packet const & packet,
size_t n = 1uz )
private
Todo
document

◆ serviceLoop()

void mw::dcc::Service::serviceLoop ( )
private
Todo
document
Todo
oh god please make this safer... it changes from opmode to serv...

◆ serviceRead()

std::optional< uint8_t > mw::dcc::Service::serviceRead ( uint16_t cv_addr)
private
Todo
document

◆ serviceReceiveBit()

std::optional< bool > mw::dcc::Service::serviceReceiveBit ( )
private
Todo
document Depending on the DCC settings we might need to wait a long ass time...

◆ serviceReceiveByte()

std::optional< uint8_t > mw::dcc::Service::serviceReceiveByte ( )
private
Todo
document

◆ serviceWrite()

std::optional< uint8_t > mw::dcc::Service::serviceWrite ( uint16_t cv_addr,
uint8_t byte )
private
Todo
document

◆ suspend()

void mw::dcc::Service::suspend ( )
private
Todo
document

◆ taskFunction()

void mw::dcc::Service::taskFunction ( void * )
private
Todo
document

◆ turnout()

void mw::dcc::Service::turnout ( uint16_t accy_addr,
bool p,
bool a,
bool q )
finalprivate
Todo
document

◆ turnoutInfo()

z21::TurnoutInfo mw::dcc::Service::turnoutInfo ( uint16_t accy_addr)
nodiscardfinalprivate
Todo
document

◆ turnoutMode() [1/2]

z21::TurnoutInfo::Mode mw::dcc::Service::turnoutMode ( uint16_t accy_addr)
nodiscardfinalprivate
Todo
document

◆ turnoutMode() [2/2]

void mw::dcc::Service::turnoutMode ( uint16_t accy_addr,
z21::TurnoutInfo::Mode mode )
finalprivate
Todo
document

◆ turnoutsDeleteRequest()

intf::http::Response mw::dcc::Service::turnoutsDeleteRequest ( intf::http::Request const & req)
Todo
document

◆ turnoutsGetRequest()

intf::http::Response mw::dcc::Service::turnoutsGetRequest ( intf::http::Request const & req)
Todo
document

◆ turnoutsPutRequest()

intf::http::Response mw::dcc::Service::turnoutsPutRequest ( intf::http::Request const & req)
Todo
document

◆ z21()

void mw::dcc::Service::z21 ( std::shared_ptr< z21::server::intf::System > z21_system_service,
std::shared_ptr< z21::server::intf::Dcc > z21_dcc_service )
Todo
document

Member Data Documentation

◆ _accy_flags

uint8_t mw::dcc::Service::_accy_flags {}
private

◆ _bit_verify_to_1

bool mw::dcc::Service::_bit_verify_to_1 {}
private

◆ _cv_pom_request_deque

ztl::inplace_deque<CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT> mw::dcc::Service::_cv_pom_request_deque {}
private

◆ _cv_request_deque

ztl::inplace_deque<CvRequest, Z21_SERVER_MAX_LOCO_ADDRESSES_PER_CLIENT> mw::dcc::Service::_cv_request_deque {}
private

◆ _internal_mutex

std::mutex mw::dcc::Service::_internal_mutex
private

◆ _loco_flags

uint8_t mw::dcc::Service::_loco_flags {}
private

◆ _locos

Locos mw::dcc::Service::_locos
private

◆ _priority_count

uint8_t mw::dcc::Service::_priority_count {Loco::min_priority}
private

◆ _program_packet_count

uint8_t mw::dcc::Service::_program_packet_count {}
private

◆ _programming_type

uint8_t mw::dcc::Service::_programming_type {}
private

◆ _turnouts

Turnouts mw::dcc::Service::_turnouts
private

◆ _z21_dcc_service

std::shared_ptr<z21::server::intf::Dcc> mw::dcc::Service::_z21_dcc_service
private

◆ _z21_system_service

std::shared_ptr<z21::server::intf::System> mw::dcc::Service::_z21_system_service
private

The documentation for this class was generated from the following files: