72 return static_cast<std::uint16_t
>(raw_value & 0xFFFFU);
95 std::size_t& out_size)
noexcept;
105 std::size_t& out_size)
noexcept;
110 std::uint16_t error_code,
112 std::size_t& out_size)
noexcept;
126namespace CommandCodec {
134 std::size_t& out_size)
noexcept;
140 std::size_t& out_size)
noexcept;
146 std::size_t& out_size)
noexcept;
151 std::uint16_t points,
153 std::size_t& out_size)
noexcept;
158 std::uint16_t points,
160 std::size_t& out_size)
noexcept;
170 std::uint16_t points,
176 std::uint16_t points,
184 std::size_t& out_size)
noexcept;
189 std::uint16_t points,
191 std::size_t& out_size)
noexcept;
206 std::size_t& out_size)
noexcept;
212 std::size_t& out_size)
noexcept;
218 std::size_t& out_size)
noexcept;
225 std::size_t& out_size)
noexcept;
232 std::size_t& out_size)
noexcept;
238 std::size_t& out_size)
noexcept;
245 std::size_t& out_size)
noexcept;
254 std::size_t& out_size)
noexcept;
260 std::size_t& out_size)
noexcept;
272 std::size_t& out_size)
noexcept;
278 std::size_t& out_size)
noexcept;
284 std::size_t& out_size)
noexcept;
290 std::size_t& out_size)
noexcept;
296 std::size_t& out_size)
noexcept;
305 std::size_t& out_size)
noexcept;
311 std::size_t& out_size)
noexcept;
325 std::size_t& out_size)
noexcept;
331 std::size_t& out_size)
noexcept;
340 std::size_t& out_size)
noexcept;
346 std::size_t& out_size)
noexcept;
352 std::size_t& out_size)
noexcept;
357 std::size_t& out_size)
noexcept;
363 std::size_t& out_size)
noexcept;
369 std::size_t& out_size)
noexcept;
390 std::size_t& out_size)
noexcept;
401 std::size_t& out_size)
noexcept;
407 std::size_t& out_size)
noexcept;
413 std::size_t& out_size)
noexcept;
418 std::size_t& out_size)
noexcept;
423 std::size_t& out_size)
noexcept;
432 std::size_t& out_size)
noexcept;
444 std::size_t& out_size)
noexcept;
450 std::size_t& out_size)
noexcept;
462 std::size_t& out_size)
noexcept;
470 std::size_t& out_size)
noexcept;
482 std::size_t& out_size)
noexcept;
487 std::size_t& out_size)
noexcept;
493 std::size_t& out_size)
noexcept;
498 std::size_t& out_size)
noexcept;
503 std::size_t& out_size)
noexcept;
509 std::size_t& out_size)
noexcept;
515 std::size_t& out_size)
noexcept;
520 std::size_t& out_size)
noexcept;
526 std::size_t& out_size)
noexcept;
535 std::uint32_t buffer_memory_address,
536 std::uint32_t module_additional_value)
noexcept {
537 return (buffer_memory_address * 2U) + module_additional_value;
Frame-level encode/decode helper for complete serial MC frames.
static Status encode_success_response(const ProtocolConfig &config, std::span< const std::uint8_t > response_data, std::span< std::uint8_t > out_frame, std::size_t &out_size) noexcept
Builds a success response frame for tests and local tools.
static DecodeResult decode_response(const ProtocolConfig &config, std::span< const std::uint8_t > bytes) noexcept
Decodes one response frame from the front of bytes.
static Status validate_config(const ProtocolConfig &config) noexcept
Validates a static protocol configuration before encoding requests.
static Status encode_request(const ProtocolConfig &config, std::span< const std::uint8_t > request_data, std::span< std::uint8_t > out_frame, std::size_t &out_size) noexcept
Wraps command data in the configured serial frame format.
static Status encode_error_response(const ProtocolConfig &config, std::uint16_t error_code, std::span< std::uint8_t > out_frame, std::size_t &out_size) noexcept
Builds a PLC-error response frame for tests and local tools.
Status parse_multi_block_read_response(const ProtocolConfig &config, std::span< const MultiBlockReadBlock > blocks, std::span< const std::uint8_t > response_data, std::span< std::uint16_t > out_words, std::span< BitValue > out_bits, std::span< MultiBlockReadBlockResult > out_results) noexcept
Status encode_read_user_frame(const ProtocolConfig &config, const UserFrameReadRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_loopback(const ProtocolConfig &config, std::span< const char > hex_ascii, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_random_write_bits(const ProtocolConfig &config, std::span< const RandomWriteBitItem > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_direct_write_extended_file_register_words(const ProtocolConfig &config, const ExtendedFileRegisterDirectBatchWriteWordsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_random_write_words(const ProtocolConfig &config, std::span< const LinkDirectRandomWriteWordItem > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_batch_write_words(const ProtocolConfig &config, const LinkDirectDevice &device, std::span< const std::uint16_t > words, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_write_extended_file_register_words(const ProtocolConfig &config, const ExtendedFileRegisterBatchWriteWordsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_register_monitor(const ProtocolConfig &config, const LinkDirectMonitorRegistration &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_remote_pause(const ProtocolConfig &config, RemoteOperationMode mode, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_extended_batch_write_words(const ProtocolConfig &config, const QualifiedBufferWordDevice &device, std::span< const std::uint16_t > words, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_multi_block_read(const ProtocolConfig &config, const LinkDirectMultiBlockReadRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_read_cpu_model(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_random_read(const ProtocolConfig &config, const RandomReadRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_lock_remote_password(const ProtocolConfig &config, std::string_view remote_password, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_extended_batch_read_words(const ProtocolConfig &config, const QualifiedBufferWordDevice &device, std::uint16_t points, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_write_host_buffer(const ProtocolConfig &config, const HostBufferWriteRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_control_global_signal(const ProtocolConfig &config, const GlobalSignalControlRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_remote_stop(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_unlock_remote_password(const ProtocolConfig &config, std::string_view remote_password, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_extended_batch_read_words_response(const ProtocolConfig &config, std::uint16_t points, std::span< const std::uint8_t > response_data, std::span< std::uint16_t > out_words) noexcept
Status encode_link_direct_batch_read_words(const ProtocolConfig &config, const LinkDirectDevice &device, std::uint16_t points, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_initialize_transmission_sequence(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_random_write_extended_file_register_words(const ProtocolConfig &config, std::span< const ExtendedFileRegisterRandomWriteWordItem > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_remote_latch_clear(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_read_extended_file_register_words(const ProtocolConfig &config, const ExtendedFileRegisterBatchReadWordsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_remote_run(const ProtocolConfig &config, RemoteOperationMode mode, RemoteRunClearMode clear_mode, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_random_write_words(const ProtocolConfig &config, std::span< const RandomWriteWordItem > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_read_user_frame_response(const ProtocolConfig &config, std::span< const std::uint8_t > response_data, UserFrameRegistrationData &out_data) noexcept
Status encode_read_host_buffer(const ProtocolConfig &config, const HostBufferReadRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
constexpr std::uint32_t module_buffer_start_address(std::uint32_t buffer_memory_address, std::uint32_t module_additional_value) noexcept
Converts a logical buffer-memory word address plus module offset into a byte start address.
Status parse_loopback_response(const ProtocolConfig &config, std::span< const std::uint8_t > response_data, std::span< char > out_echoed) noexcept
Status encode_write_module_buffer(const ProtocolConfig &config, const ModuleBufferWriteRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_batch_read_bits_response(const ProtocolConfig &config, const BatchReadBitsRequest &request, std::span< const std::uint8_t > response_data, std::span< BitValue > out_bits) noexcept
Status parse_read_cpu_model_response(const ProtocolConfig &config, std::span< const std::uint8_t > response_data, CpuModelInfo &out_info) noexcept
Status parse_read_host_buffer_response(const ProtocolConfig &config, const HostBufferReadRequest &request, std::span< const std::uint8_t > response_data, std::span< std::uint16_t > out_words) noexcept
Status encode_batch_write_words(const ProtocolConfig &config, const BatchWriteWordsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_batch_read_bits(const ProtocolConfig &config, const BatchReadBitsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_remote_reset(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_random_write_bits(const ProtocolConfig &config, std::span< const LinkDirectRandomWriteBitItem > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_read_module_buffer(const ProtocolConfig &config, const ModuleBufferReadRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_read_monitor(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_read_extended_file_register_monitor(const ProtocolConfig &config, std::span< const ExtendedFileRegisterAddress > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_read_monitor_response(const ProtocolConfig &config, std::span< const RandomReadItem > items, std::span< const std::uint8_t > response_data, std::span< std::uint32_t > out_values) noexcept
Status encode_multi_block_write(const ProtocolConfig &config, const MultiBlockWriteRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_multi_block_read(const ProtocolConfig &config, const MultiBlockReadRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_read_module_buffer_response(const ProtocolConfig &config, const ModuleBufferReadRequest &request, std::span< const std::uint8_t > response_data, std::span< std::byte > out_bytes) noexcept
Status parse_batch_read_words_response(const ProtocolConfig &config, const BatchReadWordsRequest &request, std::span< const std::uint8_t > response_data, std::span< std::uint16_t > out_words) noexcept
Status encode_register_extended_file_register_monitor(const ProtocolConfig &config, const ExtendedFileRegisterMonitorRegistration &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_clear_error_information(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_batch_read_bits(const ProtocolConfig &config, const LinkDirectDevice &device, std::uint16_t points, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_read_extended_file_register_words_response(const ProtocolConfig &config, std::uint16_t points, std::span< const std::uint8_t > response_data, std::span< std::uint16_t > out_words) noexcept
Status parse_read_extended_file_register_monitor_response(const ProtocolConfig &config, std::span< const ExtendedFileRegisterAddress > items, std::span< const std::uint8_t > response_data, std::span< std::uint16_t > out_words) noexcept
Status encode_delete_user_frame(const ProtocolConfig &config, const UserFrameDeleteRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_direct_read_extended_file_register_words(const ProtocolConfig &config, const ExtendedFileRegisterDirectBatchReadWordsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_random_read(const ProtocolConfig &config, std::span< const LinkDirectRandomReadItem > items, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status parse_random_read_response(const ProtocolConfig &config, std::span< const RandomReadItem > items, std::span< const std::uint8_t > response_data, std::span< std::uint32_t > out_values) noexcept
Status encode_deregister_cpu_monitoring(const ProtocolConfig &config, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_register_monitor(const ProtocolConfig &config, const MonitorRegistration &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_batch_write_bits(const ProtocolConfig &config, const LinkDirectDevice &device, std::span< const BitValue > bits, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_write_user_frame(const ProtocolConfig &config, const UserFrameWriteRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_link_direct_multi_block_write(const ProtocolConfig &config, const LinkDirectMultiBlockWriteRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_batch_read_words(const ProtocolConfig &config, const BatchReadWordsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
Status encode_batch_write_bits(const ProtocolConfig &config, const BatchWriteBitsRequest &request, std::span< std::uint8_t > out_request_data, std::size_t &out_size) noexcept
RemoteOperationMode
Conflict-handling mode for remote RUN / PAUSE.
DecodeStatus
High-level result of frame decoding.
@ Incomplete
More bytes are required before a full frame can be decoded.
@ Error
The byte stream is invalid for the selected frame configuration.
@ Complete
One full frame was decoded successfully.
ResponseType
Decoded PLC response class before command-specific parsing.
@ SuccessNoData
Successful response carrying no payload bytes.
BitValue
Logical single-bit value used by bit read/write APIs.
constexpr BitValue sparse_native_requested_bit_value(std::uint32_t raw_value) noexcept
Returns the requested-point value from a sparse native bit result word.
constexpr std::uint16_t sparse_native_mask_word(std::uint32_t raw_value) noexcept
Returns the raw 16-point mask word from a sparse native bit result.
RemoteRunClearMode
Clear scope applied during remote RUN initialization.
Contiguous bit-read request (0401 bit path).
Contiguous bit-write request (1401 bit path).
Contiguous word-write request (1401).
Result returned by FrameCodec::decode_response().
Status error
Decoder-side error when status == DecodeStatus::Error.
DecodeStatus status
Stream-level decode status.
std::size_t bytes_consumed
Number of bytes consumed from the input span.
RawResponseFrame frame
Raw response frame when status == DecodeStatus::Complete.
Extended file-register batch write (EW on 1C ACPU-common, chapter-18 block path on 1E).
Direct extended file-register batch read (NR on 1C QnA-common, chapter-18 direct path on 1E).
Direct extended file-register batch write (NW on 1C QnA-common, chapter-18 direct path on 1E).
Extended file-register monitor registration (EM on 1C, chapter-18 on 1E).
C24 global-signal ON/OFF request (1618).
Host-buffer write request (1613).
Parsed Jn\\... link-direct device reference such as J1\\W100.
Jn\\... monitor registration payload (0801 + device extension specification).
Jn\\... native multi-block read request.
Jn\\... native multi-block write request.
Module-buffer byte read request (0601 helper path).
Module-buffer byte write request (1601 helper path).
Native multi-block read request composed of multiple contiguous blocks.
Native multi-block write request composed of multiple contiguous blocks.
Top-level protocol configuration shared by codecs and client requests.
Parsed U...\\G... or U...\\HG... qualified word device.
Native random-read request made of sparse word/dword items.
Raw decoded response frame before command-specific parsing.
std::uint16_t error_code
PLC error code when type == ResponseType::PlcError.
std::array< std::uint8_t, kMaxResponseFrameBytes > response_data
Raw response payload bytes with the serial frame already removed.
ResponseType type
Success-with-data, success-without-data, or PLC-error classification.
std::size_t response_size
Number of valid bytes in response_data.
Result object returned by most public APIs.
User-frame registration-data delete request (1610, subcommand 0001).
User-frame registration-data payload returned by 0610.
User-frame registration-data write request (1610, subcommand 0000).
Public request, response, configuration, and callback types for the serial MC protocol library.