.. _program_listing_file__tmp_ws_src_kobuki_core_include_kobuki_core_packets_three_axis_gyro.hpp: Program Listing for File three_axis_gyro.hpp ============================================ |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/kobuki_core/include/kobuki_core/packets/three_axis_gyro.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /***************************************************************************** ** Preprocessor *****************************************************************************/ #ifndef KOBUKI_CORE_THREE_AXIS_GYRO_DATA_HPP__ #define KOBUKI_CORE_THREE_AXIS_GYRO_DATA_HPP__ /***************************************************************************** ** Includes *****************************************************************************/ #include "../packet_handler/payload_base.hpp" #include "../packet_handler/payload_headers.hpp" /***************************************************************************** ** Defines *****************************************************************************/ #define MAX_DATA_SIZE (3*8) //derived from ST_GYRO_MAX_DATA_SIZE in firmware /***************************************************************************** ** Namespaces *****************************************************************************/ namespace kobuki { /***************************************************************************** ** Interface *****************************************************************************/ class ThreeAxisGyro : public packet_handler::payloadBase { public: ThreeAxisGyro() : packet_handler::payloadBase(true, 4) {}; struct Data { unsigned char frame_id; unsigned char followed_data_length; unsigned short data[MAX_DATA_SIZE]; } data; virtual ~ThreeAxisGyro() {}; bool serialise(ecl::PushAndPop & byteStream) { unsigned char length = 2 + 2 * data.followed_data_length; buildBytes(Header::ThreeAxisGyro, byteStream); buildBytes(length, byteStream); buildBytes(data.frame_id, byteStream); buildBytes(data.followed_data_length, byteStream); for (unsigned int i=0; i & byteStream) { if (byteStream.size() < static_cast(length)+2) { //std::cout << "kobuki_node: three_axis_gyro: deserialise failed. not enough byte stream." << std::endl; return false; } unsigned char header_id(0x00), length_packed(0x00); buildVariable(header_id, byteStream); buildVariable(length_packed, byteStream); if( header_id != Header::ThreeAxisGyro ) return false; if( length > length_packed ) return false; buildVariable(data.frame_id, byteStream); buildVariable(data.followed_data_length, byteStream); if( length_packed != 2 + 2 * data.followed_data_length ) return false; for (unsigned int i=0; i