Loading...
Searching...
No Matches
dynamixel_reader.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Inria
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
18
19#include <stdlib.h>
20#include <stdbool.h>
21
22#include "dynamixel_protocol.h"
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28#define DXL_PING_SIZE (10)
29#define DXL_STATUS_SIZE(len) (11+len)
30#define DXL_READ_SIZE (14)
31#define DXL_WRITE_SIZE(len) (12+len)
32
36typedef struct {
37 const uint8_t *buffer;
38 size_t size;
40
48static inline void dynamixel_reader_init(dynamixel_reader_t *reader, const uint8_t *buffer, size_t size)
49{
50 reader->buffer = buffer;
51 reader->size = size;
52}
53
63
71static inline uint8_t dynamixel_reader_get_id(const dynamixel_reader_t *reader)
72{
73 return reader->buffer[4];
74}
75
83static inline uint8_t dynamixel_reader_get_instr(const dynamixel_reader_t *reader)
84{
85 return reader->buffer[7];
86}
87
95static inline uint16_t dynamixel_reader_get_length(const dynamixel_reader_t *reader)
96{
97 return
98 (((uint16_t)reader->buffer[5]) & 0xFF) |
99 ((((uint16_t)reader->buffer[6]) & 0xFF) << 8);
100}
101
109static inline uint16_t dynamixel_reader_get_crc(const dynamixel_reader_t *reader)
110{
111 return
112 (((uint16_t)reader->buffer[reader->size - 2]) & 0xFF) |
113 ((((uint16_t)reader->buffer[reader->size - 1]) & 0xFF) << 8);
114}
115
123static inline const uint8_t *dynamixel_reader_status_get_payload(const dynamixel_reader_t *reader)
124{
125 return &reader->buffer[9];
126}
127
136{
137 return dynamixel_reader_get_length(reader) - 4;
138}
139
140#ifdef __cplusplus
141}
142#endif
143
Dynamixel protocol definitions.
static uint8_t dynamixel_reader_get_instr(const dynamixel_reader_t *reader)
Get the packet's instruction code.
static uint8_t dynamixel_reader_get_id(const dynamixel_reader_t *reader)
Get the packet's device id.
static size_t dynamixel_reader_status_get_payload_size(const dynamixel_reader_t *reader)
Get the packet's payload size (response)
static void dynamixel_reader_init(dynamixel_reader_t *reader, const uint8_t *buffer, size_t size)
Initialize the Dynamixel packet reader.
static const uint8_t * dynamixel_reader_status_get_payload(const dynamixel_reader_t *reader)
Get the packet's payload (response)
static uint16_t dynamixel_reader_get_length(const dynamixel_reader_t *reader)
Get the packet's length field.
bool dynamixel_reader_is_valid(const dynamixel_reader_t *reader)
Check if the packet is valid.
static uint16_t dynamixel_reader_get_crc(const dynamixel_reader_t *reader)
Get the packet's crc.
Dynamixel packet reader struct.
const uint8_t * buffer
data buffer
size_t size
data buffer's size