ROS Serial library for Mbed platforms for ROS Indigo Igloo. Check http://wiki.ros.org/rosserial_mbed/ for more information

Dependencies:   BufferedSerial

Dependents:   rosserial_mbed_hello_world_publisher rtos_base_control rosserial_mbed_F64MA ROS-RTOS ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Joy.h Source File

Joy.h

00001 #ifndef _ROS_sensor_msgs_Joy_h
00002 #define _ROS_sensor_msgs_Joy_h
00003 
00004 #include <stdint.h>
00005 #include <string.h>
00006 #include <stdlib.h>
00007 #include "ros/msg.h"
00008 #include "std_msgs/Header.h"
00009 
00010 namespace sensor_msgs
00011 {
00012 
00013   class Joy : public ros::Msg
00014   {
00015     public:
00016       std_msgs::Header header;
00017       uint8_t axes_length;
00018       float st_axes;
00019       float * axes;
00020       uint8_t buttons_length;
00021       int32_t st_buttons;
00022       int32_t * buttons;
00023 
00024     Joy():
00025       header(),
00026       axes_length(0), axes(NULL),
00027       buttons_length(0), buttons(NULL)
00028     {
00029     }
00030 
00031     virtual int serialize(unsigned char *outbuffer) const
00032     {
00033       int offset = 0;
00034       offset += this->header.serialize(outbuffer + offset);
00035       *(outbuffer + offset++) = axes_length;
00036       *(outbuffer + offset++) = 0;
00037       *(outbuffer + offset++) = 0;
00038       *(outbuffer + offset++) = 0;
00039       for( uint8_t i = 0; i < axes_length; i++){
00040       union {
00041         float real;
00042         uint32_t base;
00043       } u_axesi;
00044       u_axesi.real = this->axes[i];
00045       *(outbuffer + offset + 0) = (u_axesi.base >> (8 * 0)) & 0xFF;
00046       *(outbuffer + offset + 1) = (u_axesi.base >> (8 * 1)) & 0xFF;
00047       *(outbuffer + offset + 2) = (u_axesi.base >> (8 * 2)) & 0xFF;
00048       *(outbuffer + offset + 3) = (u_axesi.base >> (8 * 3)) & 0xFF;
00049       offset += sizeof(this->axes[i]);
00050       }
00051       *(outbuffer + offset++) = buttons_length;
00052       *(outbuffer + offset++) = 0;
00053       *(outbuffer + offset++) = 0;
00054       *(outbuffer + offset++) = 0;
00055       for( uint8_t i = 0; i < buttons_length; i++){
00056       union {
00057         int32_t real;
00058         uint32_t base;
00059       } u_buttonsi;
00060       u_buttonsi.real = this->buttons[i];
00061       *(outbuffer + offset + 0) = (u_buttonsi.base >> (8 * 0)) & 0xFF;
00062       *(outbuffer + offset + 1) = (u_buttonsi.base >> (8 * 1)) & 0xFF;
00063       *(outbuffer + offset + 2) = (u_buttonsi.base >> (8 * 2)) & 0xFF;
00064       *(outbuffer + offset + 3) = (u_buttonsi.base >> (8 * 3)) & 0xFF;
00065       offset += sizeof(this->buttons[i]);
00066       }
00067       return offset;
00068     }
00069 
00070     virtual int deserialize(unsigned char *inbuffer)
00071     {
00072       int offset = 0;
00073       offset += this->header.deserialize(inbuffer + offset);
00074       uint8_t axes_lengthT = *(inbuffer + offset++);
00075       if(axes_lengthT > axes_length)
00076         this->axes = (float*)realloc(this->axes, axes_lengthT * sizeof(float));
00077       offset += 3;
00078       axes_length = axes_lengthT;
00079       for( uint8_t i = 0; i < axes_length; i++){
00080       union {
00081         float real;
00082         uint32_t base;
00083       } u_st_axes;
00084       u_st_axes.base = 0;
00085       u_st_axes.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0);
00086       u_st_axes.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
00087       u_st_axes.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
00088       u_st_axes.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
00089       this->st_axes = u_st_axes.real;
00090       offset += sizeof(this->st_axes);
00091         memcpy( &(this->axes[i]), &(this->st_axes), sizeof(float));
00092       }
00093       uint8_t buttons_lengthT = *(inbuffer + offset++);
00094       if(buttons_lengthT > buttons_length)
00095         this->buttons = (int32_t*)realloc(this->buttons, buttons_lengthT * sizeof(int32_t));
00096       offset += 3;
00097       buttons_length = buttons_lengthT;
00098       for( uint8_t i = 0; i < buttons_length; i++){
00099       union {
00100         int32_t real;
00101         uint32_t base;
00102       } u_st_buttons;
00103       u_st_buttons.base = 0;
00104       u_st_buttons.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0);
00105       u_st_buttons.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
00106       u_st_buttons.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
00107       u_st_buttons.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
00108       this->st_buttons = u_st_buttons.real;
00109       offset += sizeof(this->st_buttons);
00110         memcpy( &(this->buttons[i]), &(this->st_buttons), sizeof(int32_t));
00111       }
00112      return offset;
00113     }
00114 
00115     const char * getType(){ return "sensor_msgs/Joy"; };
00116     const char * getMD5(){ return "5a9ea5f83505693b71e785041e67a8bb"; };
00117 
00118   };
00119 
00120 }
00121 #endif