mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
55 lines
1.4 KiB
C
55 lines
1.4 KiB
C
/*
|
|
* Copyright (C) 2017 Inria
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser General
|
|
* Public License v2.1. See the file LICENSE in the top level directory for more
|
|
* details.
|
|
*/
|
|
|
|
/**
|
|
* @ingroup drivers_dynamixel
|
|
* @{
|
|
*
|
|
* @file
|
|
* @brief Dynamixel messages reader
|
|
*
|
|
* @author Loïc Dauphin <loic.dauphin@inria.fr>
|
|
*
|
|
* @}
|
|
*/
|
|
|
|
#include "dynamixel_reader.h"
|
|
#include "dynamixel_crc.h"
|
|
|
|
static inline bool dynamixel_reader_check_minsize(const dynamixel_reader_t *reader)
|
|
{
|
|
return 10 <= reader->size;
|
|
}
|
|
|
|
static inline bool dynamixel_reader_check_start(const dynamixel_reader_t *reader)
|
|
{
|
|
return
|
|
reader->buffer[0] == DXL_HEADER[0] &&
|
|
reader->buffer[1] == DXL_HEADER[1] &&
|
|
reader->buffer[2] == DXL_HEADER[2];
|
|
}
|
|
|
|
static inline bool dynamixel_reader_check_size(const dynamixel_reader_t *reader)
|
|
{
|
|
return reader->size == (size_t)(dynamixel_reader_get_length(reader) + 7);
|
|
}
|
|
|
|
static inline bool dynamixel_reader_check_sum(const dynamixel_reader_t *reader)
|
|
{
|
|
return dynamixel_crc_update(0, reader->buffer, reader->size - 2) == dynamixel_reader_get_crc(reader);
|
|
}
|
|
|
|
bool dynamixel_reader_is_valid(const dynamixel_reader_t *reader)
|
|
{
|
|
return
|
|
dynamixel_reader_check_minsize(reader) &&
|
|
dynamixel_reader_check_start(reader) &&
|
|
dynamixel_reader_check_size(reader) &&
|
|
dynamixel_reader_check_sum(reader);
|
|
}
|