Loading...
Searching...
No Matches
dynamixel_reader.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2017 Inria
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser General
5 * Public License v2.1. See the file LICENSE in the top level directory for more
6 * details.
7 */
8
9#pragma once
10
21
22#include <stdlib.h>
23#include <stdbool.h>
24
25#include "dynamixel_protocol.h"
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31#define DXL_PING_SIZE (10)
32#define DXL_STATUS_SIZE(len) (11+len)
33#define DXL_READ_SIZE (14)
34#define DXL_WRITE_SIZE(len) (12+len)
35
39typedef struct {
40 const uint8_t *buffer;
41 size_t size;
43
51static inline void dynamixel_reader_init(dynamixel_reader_t *reader, const uint8_t *buffer, size_t size)
52{
53 reader->buffer = buffer;
54 reader->size = size;
55}
56
66
74static inline uint8_t dynamixel_reader_get_id(const dynamixel_reader_t *reader)
75{
76 return reader->buffer[4];
77}
78
86static inline uint8_t dynamixel_reader_get_instr(const dynamixel_reader_t *reader)
87{
88 return reader->buffer[7];
89}
90
98static inline uint16_t dynamixel_reader_get_length(const dynamixel_reader_t *reader)
99{
100 return
101 (((uint16_t)reader->buffer[5]) & 0xFF) |
102 ((((uint16_t)reader->buffer[6]) & 0xFF) << 8);
103}
104
112static inline uint16_t dynamixel_reader_get_crc(const dynamixel_reader_t *reader)
113{
114 return
115 (((uint16_t)reader->buffer[reader->size - 2]) & 0xFF) |
116 ((((uint16_t)reader->buffer[reader->size - 1]) & 0xFF) << 8);
117}
118
126static inline const uint8_t *dynamixel_reader_status_get_payload(const dynamixel_reader_t *reader)
127{
128 return &reader->buffer[9];
129}
130
139{
140 return dynamixel_reader_get_length(reader) - 4;
141}
142
143#ifdef __cplusplus
144}
145#endif
146
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