MC Protocol Serial C++ 0.2.3
MC protocol serial library for MCU-oriented environments
Loading...
Searching...
No Matches
codec.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <cstddef>
5#include <cstdint>
6
9
13
22
23namespace mcprotocol::serial {
24
26enum class DecodeStatus : std::uint8_t {
32 Error
33};
34
40 std::size_t response_size = 0;
42 std::uint16_t error_code = 0;
44 std::array<std::uint8_t, kMaxResponseFrameBytes> response_data {};
45};
46
58
64[[nodiscard]] constexpr BitValue sparse_native_requested_bit_value(std::uint32_t raw_value) noexcept {
65 return (raw_value & 0x0001U) != 0U ? BitValue::On : BitValue::Off;
66}
67
71[[nodiscard]] constexpr std::uint16_t sparse_native_mask_word(std::uint32_t raw_value) noexcept {
72 return static_cast<std::uint16_t>(raw_value & 0xFFFFU);
73}
74
81 public:
86 [[nodiscard]] static Status validate_config(const ProtocolConfig& config) noexcept;
87
91 [[nodiscard]] static Status encode_request(
92 const ProtocolConfig& config,
95 std::size_t& out_size) noexcept;
96
101 [[nodiscard]] static Status encode_success_response(
102 const ProtocolConfig& config,
103 std::span<const std::uint8_t> response_data,
104 std::span<std::uint8_t> out_frame,
105 std::size_t& out_size) noexcept;
106
108 [[nodiscard]] static Status encode_error_response(
109 const ProtocolConfig& config,
110 std::uint16_t error_code,
111 std::span<std::uint8_t> out_frame,
112 std::size_t& out_size) noexcept;
113
117 [[nodiscard]] static DecodeResult decode_response(
118 const ProtocolConfig& config,
119 std::span<const std::uint8_t> bytes) noexcept;
120};
121
126namespace CommandCodec {
127
131 const ProtocolConfig& config,
132 const BatchReadWordsRequest& request,
133 std::span<std::uint8_t> out_request_data,
134 std::size_t& out_size) noexcept;
135
137 const ProtocolConfig& config,
139 std::span<std::uint8_t> out_request_data,
140 std::size_t& out_size) noexcept;
141
143 const ProtocolConfig& config,
145 std::span<std::uint8_t> out_request_data,
146 std::size_t& out_size) noexcept;
147
149 const ProtocolConfig& config,
150 const QualifiedBufferWordDevice& device,
151 std::uint16_t points,
152 std::span<std::uint8_t> out_request_data,
153 std::size_t& out_size) noexcept;
154
156 const ProtocolConfig& config,
157 const LinkDirectDevice& device,
158 std::uint16_t points,
159 std::span<std::uint8_t> out_request_data,
160 std::size_t& out_size) noexcept;
161
163 const ProtocolConfig& config,
164 const BatchReadWordsRequest& request,
165 std::span<const std::uint8_t> response_data,
166 std::span<std::uint16_t> out_words) noexcept;
167
169 const ProtocolConfig& config,
170 std::uint16_t points,
171 std::span<const std::uint8_t> response_data,
172 std::span<std::uint16_t> out_words) noexcept;
173
175 const ProtocolConfig& config,
176 std::uint16_t points,
177 std::span<const std::uint8_t> response_data,
178 std::span<std::uint16_t> out_words) noexcept;
179
181 const ProtocolConfig& config,
182 const BatchReadBitsRequest& request,
183 std::span<std::uint8_t> out_request_data,
184 std::size_t& out_size) noexcept;
185
187 const ProtocolConfig& config,
188 const LinkDirectDevice& device,
189 std::uint16_t points,
190 std::span<std::uint8_t> out_request_data,
191 std::size_t& out_size) noexcept;
192
194 const ProtocolConfig& config,
195 const BatchReadBitsRequest& request,
196 std::span<const std::uint8_t> response_data,
197 std::span<BitValue> out_bits) noexcept;
199
203 const ProtocolConfig& config,
204 const BatchWriteWordsRequest& request,
205 std::span<std::uint8_t> out_request_data,
206 std::size_t& out_size) noexcept;
207
209 const ProtocolConfig& config,
211 std::span<std::uint8_t> out_request_data,
212 std::size_t& out_size) noexcept;
213
215 const ProtocolConfig& config,
217 std::span<std::uint8_t> out_request_data,
218 std::size_t& out_size) noexcept;
219
221 const ProtocolConfig& config,
222 const LinkDirectDevice& device,
224 std::span<std::uint8_t> out_request_data,
225 std::size_t& out_size) noexcept;
226
228 const ProtocolConfig& config,
229 const QualifiedBufferWordDevice& device,
231 std::span<std::uint8_t> out_request_data,
232 std::size_t& out_size) noexcept;
233
235 const ProtocolConfig& config,
236 const BatchWriteBitsRequest& request,
237 std::span<std::uint8_t> out_request_data,
238 std::size_t& out_size) noexcept;
239
241 const ProtocolConfig& config,
242 const LinkDirectDevice& device,
244 std::span<std::uint8_t> out_request_data,
245 std::size_t& out_size) noexcept;
247
251 const ProtocolConfig& config,
253 std::span<std::uint8_t> out_request_data,
254 std::size_t& out_size) noexcept;
255
257 const ProtocolConfig& config,
258 const RandomReadRequest& request,
259 std::span<std::uint8_t> out_request_data,
260 std::size_t& out_size) noexcept;
261
263 const ProtocolConfig& config,
265 std::span<const std::uint8_t> response_data,
266 std::span<std::uint32_t> out_values) noexcept;
267
269 const ProtocolConfig& config,
271 std::span<std::uint8_t> out_request_data,
272 std::size_t& out_size) noexcept;
273
275 const ProtocolConfig& config,
277 std::span<std::uint8_t> out_request_data,
278 std::size_t& out_size) noexcept;
279
281 const ProtocolConfig& config,
283 std::span<std::uint8_t> out_request_data,
284 std::size_t& out_size) noexcept;
285
287 const ProtocolConfig& config,
289 std::span<std::uint8_t> out_request_data,
290 std::size_t& out_size) noexcept;
291
293 const ProtocolConfig& config,
295 std::span<std::uint8_t> out_request_data,
296 std::size_t& out_size) noexcept;
298
302 const ProtocolConfig& config,
303 const LinkDirectMultiBlockReadRequest& request,
304 std::span<std::uint8_t> out_request_data,
305 std::size_t& out_size) noexcept;
306
308 const ProtocolConfig& config,
309 const MultiBlockReadRequest& request,
310 std::span<std::uint8_t> out_request_data,
311 std::size_t& out_size) noexcept;
312
314 const ProtocolConfig& config,
316 std::span<const std::uint8_t> response_data,
317 std::span<std::uint16_t> out_words,
318 std::span<BitValue> out_bits,
319 std::span<MultiBlockReadBlockResult> out_results) noexcept;
320
322 const ProtocolConfig& config,
323 const MultiBlockWriteRequest& request,
324 std::span<std::uint8_t> out_request_data,
325 std::size_t& out_size) noexcept;
326
328 const ProtocolConfig& config,
330 std::span<std::uint8_t> out_request_data,
331 std::size_t& out_size) noexcept;
333
337 const ProtocolConfig& config,
338 const MonitorRegistration& request,
339 std::span<std::uint8_t> out_request_data,
340 std::size_t& out_size) noexcept;
341
343 const ProtocolConfig& config,
345 std::span<std::uint8_t> out_request_data,
346 std::size_t& out_size) noexcept;
347
349 const ProtocolConfig& config,
350 const LinkDirectMonitorRegistration& request,
351 std::span<std::uint8_t> out_request_data,
352 std::size_t& out_size) noexcept;
353
355 const ProtocolConfig& config,
356 std::span<std::uint8_t> out_request_data,
357 std::size_t& out_size) noexcept;
358
360 const ProtocolConfig& config,
362 std::span<std::uint8_t> out_request_data,
363 std::size_t& out_size) noexcept;
364
366 const ProtocolConfig& config,
368 std::span<std::uint8_t> out_request_data,
369 std::size_t& out_size) noexcept;
370
372 const ProtocolConfig& config,
374 std::span<const std::uint8_t> response_data,
375 std::span<std::uint32_t> out_values) noexcept;
376
378 const ProtocolConfig& config,
380 std::span<const std::uint8_t> response_data,
381 std::span<std::uint16_t> out_words) noexcept;
383
387 const ProtocolConfig& config,
388 const UserFrameReadRequest& request,
389 std::span<std::uint8_t> out_request_data,
390 std::size_t& out_size) noexcept;
391
393 const ProtocolConfig& config,
394 std::span<const std::uint8_t> response_data,
395 UserFrameRegistrationData& out_data) noexcept;
396
398 const ProtocolConfig& config,
399 const UserFrameWriteRequest& request,
400 std::span<std::uint8_t> out_request_data,
401 std::size_t& out_size) noexcept;
402
404 const ProtocolConfig& config,
405 const UserFrameDeleteRequest& request,
406 std::span<std::uint8_t> out_request_data,
407 std::size_t& out_size) noexcept;
408
410 const ProtocolConfig& config,
411 const GlobalSignalControlRequest& request,
412 std::span<std::uint8_t> out_request_data,
413 std::size_t& out_size) noexcept;
414
416 const ProtocolConfig& config,
417 std::span<std::uint8_t> out_request_data,
418 std::size_t& out_size) noexcept;
419
421 const ProtocolConfig& config,
422 std::span<std::uint8_t> out_request_data,
423 std::size_t& out_size) noexcept;
425
429 const ProtocolConfig& config,
430 const HostBufferReadRequest& request,
431 std::span<std::uint8_t> out_request_data,
432 std::size_t& out_size) noexcept;
433
435 const ProtocolConfig& config,
436 const HostBufferReadRequest& request,
437 std::span<const std::uint8_t> response_data,
438 std::span<std::uint16_t> out_words) noexcept;
439
441 const ProtocolConfig& config,
442 const HostBufferWriteRequest& request,
443 std::span<std::uint8_t> out_request_data,
444 std::size_t& out_size) noexcept;
445
447 const ProtocolConfig& config,
448 const ModuleBufferReadRequest& request,
449 std::span<std::uint8_t> out_request_data,
450 std::size_t& out_size) noexcept;
451
453 const ProtocolConfig& config,
454 const ModuleBufferReadRequest& request,
455 std::span<const std::uint8_t> response_data,
456 std::span<std::byte> out_bytes) noexcept;
457
459 const ProtocolConfig& config,
460 const ModuleBufferWriteRequest& request,
461 std::span<std::uint8_t> out_request_data,
462 std::size_t& out_size) noexcept;
464
468 const ProtocolConfig& config,
469 std::span<std::uint8_t> out_request_data,
470 std::size_t& out_size) noexcept;
471
473 const ProtocolConfig& config,
474 std::span<const std::uint8_t> response_data,
475 CpuModelInfo& out_info) noexcept;
476
478 const ProtocolConfig& config,
480 RemoteRunClearMode clear_mode,
481 std::span<std::uint8_t> out_request_data,
482 std::size_t& out_size) noexcept;
483
485 const ProtocolConfig& config,
486 std::span<std::uint8_t> out_request_data,
487 std::size_t& out_size) noexcept;
488
490 const ProtocolConfig& config,
492 std::span<std::uint8_t> out_request_data,
493 std::size_t& out_size) noexcept;
494
496 const ProtocolConfig& config,
497 std::span<std::uint8_t> out_request_data,
498 std::size_t& out_size) noexcept;
499
501 const ProtocolConfig& config,
502 std::span<std::uint8_t> out_request_data,
503 std::size_t& out_size) noexcept;
504
506 const ProtocolConfig& config,
507 std::string_view remote_password,
508 std::span<std::uint8_t> out_request_data,
509 std::size_t& out_size) noexcept;
510
512 const ProtocolConfig& config,
513 std::string_view remote_password,
514 std::span<std::uint8_t> out_request_data,
515 std::size_t& out_size) noexcept;
516
518 const ProtocolConfig& config,
519 std::span<std::uint8_t> out_request_data,
520 std::size_t& out_size) noexcept;
521
523 const ProtocolConfig& config,
524 std::span<const char> hex_ascii,
525 std::span<std::uint8_t> out_request_data,
526 std::size_t& out_size) noexcept;
527
529 const ProtocolConfig& config,
530 std::span<const std::uint8_t> response_data,
531 std::span<char> out_echoed) noexcept;
532
534[[nodiscard]] constexpr std::uint32_t module_buffer_start_address(
535 std::uint32_t buffer_memory_address,
536 std::uint32_t module_additional_value) noexcept {
537 return (buffer_memory_address * 2U) + module_additional_value;
538}
540
541} // namespace CommandCodec
542
543} // namespace mcprotocol::serial
Frame-level encode/decode helper for complete serial MC frames.
Definition codec.hpp:80
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.
Definition codec.hpp:534
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.
Definition types.hpp:249
DecodeStatus
High-level result of frame decoding.
Definition codec.hpp:26
@ 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.
Definition types.hpp:269
@ SuccessNoData
Successful response carrying no payload bytes.
BitValue
Logical single-bit value used by bit read/write APIs.
Definition types.hpp:243
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.
Definition codec.hpp:64
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.
Definition codec.hpp:71
RemoteRunClearMode
Clear scope applied during remote RUN initialization.
Definition types.hpp:255
Contiguous bit-read request (0401 bit path).
Definition types.hpp:377
Contiguous bit-write request (1401 bit path).
Definition types.hpp:393
Contiguous word-write request (1401).
Definition types.hpp:385
Result returned by FrameCodec::decode_response().
Definition codec.hpp:48
Status error
Decoder-side error when status == DecodeStatus::Error.
Definition codec.hpp:54
DecodeStatus status
Stream-level decode status.
Definition codec.hpp:50
std::size_t bytes_consumed
Number of bytes consumed from the input span.
Definition codec.hpp:56
RawResponseFrame frame
Raw response frame when status == DecodeStatus::Complete.
Definition codec.hpp:52
Extended file-register batch write (EW on 1C ACPU-common, chapter-18 block path on 1E).
Definition types.hpp:420
Direct extended file-register batch read (NR on 1C QnA-common, chapter-18 direct path on 1E).
Definition types.hpp:412
Direct extended file-register batch write (NW on 1C QnA-common, chapter-18 direct path on 1E).
Definition types.hpp:428
Extended file-register monitor registration (EM on 1C, chapter-18 on 1E).
Definition types.hpp:444
C24 global-signal ON/OFF request (1618).
Definition types.hpp:579
Host-buffer write request (1613).
Definition types.hpp:600
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).
Definition types.hpp:608
Module-buffer byte write request (1601 helper path).
Definition types.hpp:618
Native multi-block read request composed of multiple contiguous blocks.
Definition types.hpp:495
Native multi-block write request composed of multiple contiguous blocks.
Definition types.hpp:515
Top-level protocol configuration shared by codecs and client requests.
Definition types.hpp:323
Parsed U...\\G... or U...\\HG... qualified word device.
Native random-read request made of sparse word/dword items.
Definition types.hpp:461
Raw decoded response frame before command-specific parsing.
Definition codec.hpp:36
std::uint16_t error_code
PLC error code when type == ResponseType::PlcError.
Definition codec.hpp:42
std::array< std::uint8_t, kMaxResponseFrameBytes > response_data
Raw response payload bytes with the serial frame already removed.
Definition codec.hpp:44
ResponseType type
Success-with-data, success-without-data, or PLC-error classification.
Definition codec.hpp:38
std::size_t response_size
Number of valid bytes in response_data.
Definition codec.hpp:40
Result object returned by most public APIs.
Definition status.hpp:26
User-frame registration-data delete request (1610, subcommand 0001).
Definition types.hpp:573
User-frame registration-data payload returned by 0610.
Definition types.hpp:553
User-frame registration-data write request (1610, subcommand 0000).
Definition types.hpp:563
Public request, response, configuration, and callback types for the serial MC protocol library.