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 
22 #include <stdlib.h>
23 #include <stdbool.h>
24 
25 #include "dynamixel_protocol.h"
26 
27 #ifdef __cplusplus
28 extern "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 
39 typedef struct {
40  const uint8_t *buffer;
41  size_t size;
43 
51 static 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 
74 static inline uint8_t dynamixel_reader_get_id(const dynamixel_reader_t *reader)
75 {
76  return reader->buffer[4];
77 }
78 
86 static inline uint8_t dynamixel_reader_get_instr(const dynamixel_reader_t *reader)
87 {
88  return reader->buffer[7];
89 }
90 
98 static 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 
112 static 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 
126 static 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 const uint8_t * dynamixel_reader_status_get_payload(const dynamixel_reader_t *reader)
Get the packet's payload (response)
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 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