34 : api_spec_(read_api_spec)
35 , reg_idx_cont_(getRegisters(write_api_spec))
36 , reg_start_idx_(getMinRegisterIdx(reg_idx_cont_))
37 , reg_block_size_(getRegisterBlockSize(reg_idx_cont_))
38 , write_modbus_register_func_(write_modbus_register_func)
63 std::ostringstream os;
64 os <<
"Registers of BRAKETEST_PERFORMED and BRAKETEST_RESULT need to be 1 apart";
65 os <<
" (distance: " <<
abs(reg_idx_cont.cbegin()->second - reg_idx_cont.cend()->second) <<
")";
77 if (
msg.isDisconnect())
84 msg.checkStructuralIntegrity();
94 std::ostringstream os;
95 os <<
"Received Modbus message of unsupported API Version: " 99 os <<
"Can not determine from Modbus message if brake-test is required.";
112 && last_brake_test_flag != IsBrakeTestRequiredResponse::REQUIRED)
119 SendBrakeTestResult::Response& res)
123 res.error_msg =
"No callback available to send brake test result to FS control";
133 res.error_msg =
"Resetting of modus registers failed";
142 res.error_msg =
"Sending of brake test result to FS control failed";
const TRegIdx reg_start_idx_
static const std::string BRAKETEST_PERFORMED
IsBrakeTestRequiredResponse::_result_type TBrakeTestRequired
std::vector< uint16_t > RegCont
Convenience data type defining the data type for a collection of registers.
ModbusAdapterBrakeTest(TWriteModbusRegister &&write_modbus_register_func, const ModbusApiSpec &read_api_spec, const ModbusApiSpec &write_api_spec)
static const std::string BRAKETEST_RESULT
TWriteModbusRegister write_modbus_register_func_
TBrakeTestRequired brake_test_required_
Store the current state of whether a brake test is required.
const TRegIdxCont reg_idx_cont_
Exception thrown by the ModbusAdapterBrakeTest class.
const ModbusApiSpec api_spec_
static constexpr unsigned int BRAKE_TEST_PERFORMED
bool sendBrakeTestResult(SendBrakeTestResult::Request &req, SendBrakeTestResult::Response &res)
Sends the brake test result data to the modbus client.
static constexpr unsigned int MODBUS_API_VERSION_REQUIRED
void updateBrakeTestRequiredState(TBrakeTestRequired brake_test_required)
const RegCont::size_type reg_block_size_
std::map< std::string, TRegIdx > TRegIdxCont
Wrapper class to add semantic to a raw ModbusMsgInStamped.
INLINE Rall1d< T, V, S > abs(const Rall1d< T, V, S > &x)
void modbusMsgCallback(const ModbusMsgInStampedConstPtr &msg_raw)
Called whenever a new modbus message arrives.
unsigned short getRegisterDefinition(const std::string &key) const
Expection thrown upon construction of ModbusMsgWrapperBase of the message does not contain the requir...
std::function< bool(const uint16_t &, const RegCont &)> TWriteModbusRegister
#define ROS_ERROR_STREAM(args)
static TRegIdxCont getRegisters(const ModbusApiSpec &write_api_spec)
bool hasRegisterDefinition(const std::string &key) const
Specifies the meaning of the holding registers.