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 InteractiveMarker.h Source File

InteractiveMarker.h

00001 #ifndef _ROS_visualization_msgs_InteractiveMarker_h
00002 #define _ROS_visualization_msgs_InteractiveMarker_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 #include "geometry_msgs/Pose.h"
00010 #include "visualization_msgs/MenuEntry.h"
00011 #include "visualization_msgs/InteractiveMarkerControl.h"
00012 
00013 namespace visualization_msgs
00014 {
00015 
00016   class InteractiveMarker : public ros::Msg
00017   {
00018     public:
00019       std_msgs::Header header;
00020       geometry_msgs::Pose pose;
00021       const char* name;
00022       const char* description;
00023       float scale;
00024       uint8_t menu_entries_length;
00025       visualization_msgs::MenuEntry st_menu_entries;
00026       visualization_msgs::MenuEntry * menu_entries;
00027       uint8_t controls_length;
00028       visualization_msgs::InteractiveMarkerControl st_controls;
00029       visualization_msgs::InteractiveMarkerControl * controls;
00030 
00031     InteractiveMarker():
00032       header(),
00033       pose(),
00034       name(""),
00035       description(""),
00036       scale(0),
00037       menu_entries_length(0), menu_entries(NULL),
00038       controls_length(0), controls(NULL)
00039     {
00040     }
00041 
00042     virtual int serialize(unsigned char *outbuffer) const
00043     {
00044       int offset = 0;
00045       offset += this->header.serialize(outbuffer + offset);
00046       offset += this->pose.serialize(outbuffer + offset);
00047       uint32_t length_name = strlen(this->name);
00048       memcpy(outbuffer + offset, &length_name, sizeof(uint32_t));
00049       offset += 4;
00050       memcpy(outbuffer + offset, this->name, length_name);
00051       offset += length_name;
00052       uint32_t length_description = strlen(this->description);
00053       memcpy(outbuffer + offset, &length_description, sizeof(uint32_t));
00054       offset += 4;
00055       memcpy(outbuffer + offset, this->description, length_description);
00056       offset += length_description;
00057       union {
00058         float real;
00059         uint32_t base;
00060       } u_scale;
00061       u_scale.real = this->scale;
00062       *(outbuffer + offset + 0) = (u_scale.base >> (8 * 0)) & 0xFF;
00063       *(outbuffer + offset + 1) = (u_scale.base >> (8 * 1)) & 0xFF;
00064       *(outbuffer + offset + 2) = (u_scale.base >> (8 * 2)) & 0xFF;
00065       *(outbuffer + offset + 3) = (u_scale.base >> (8 * 3)) & 0xFF;
00066       offset += sizeof(this->scale);
00067       *(outbuffer + offset++) = menu_entries_length;
00068       *(outbuffer + offset++) = 0;
00069       *(outbuffer + offset++) = 0;
00070       *(outbuffer + offset++) = 0;
00071       for( uint8_t i = 0; i < menu_entries_length; i++){
00072       offset += this->menu_entries[i].serialize(outbuffer + offset);
00073       }
00074       *(outbuffer + offset++) = controls_length;
00075       *(outbuffer + offset++) = 0;
00076       *(outbuffer + offset++) = 0;
00077       *(outbuffer + offset++) = 0;
00078       for( uint8_t i = 0; i < controls_length; i++){
00079       offset += this->controls[i].serialize(outbuffer + offset);
00080       }
00081       return offset;
00082     }
00083 
00084     virtual int deserialize(unsigned char *inbuffer)
00085     {
00086       int offset = 0;
00087       offset += this->header.deserialize(inbuffer + offset);
00088       offset += this->pose.deserialize(inbuffer + offset);
00089       uint32_t length_name;
00090       memcpy(&length_name, (inbuffer + offset), sizeof(uint32_t));
00091       offset += 4;
00092       for(unsigned int k= offset; k< offset+length_name; ++k){
00093           inbuffer[k-1]=inbuffer[k];
00094       }
00095       inbuffer[offset+length_name-1]=0;
00096       this->name = (char *)(inbuffer + offset-1);
00097       offset += length_name;
00098       uint32_t length_description;
00099       memcpy(&length_description, (inbuffer + offset), sizeof(uint32_t));
00100       offset += 4;
00101       for(unsigned int k= offset; k< offset+length_description; ++k){
00102           inbuffer[k-1]=inbuffer[k];
00103       }
00104       inbuffer[offset+length_description-1]=0;
00105       this->description = (char *)(inbuffer + offset-1);
00106       offset += length_description;
00107       union {
00108         float real;
00109         uint32_t base;
00110       } u_scale;
00111       u_scale.base = 0;
00112       u_scale.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0);
00113       u_scale.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
00114       u_scale.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
00115       u_scale.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
00116       this->scale = u_scale.real;
00117       offset += sizeof(this->scale);
00118       uint8_t menu_entries_lengthT = *(inbuffer + offset++);
00119       if(menu_entries_lengthT > menu_entries_length)
00120         this->menu_entries = (visualization_msgs::MenuEntry*)realloc(this->menu_entries, menu_entries_lengthT * sizeof(visualization_msgs::MenuEntry));
00121       offset += 3;
00122       menu_entries_length = menu_entries_lengthT;
00123       for( uint8_t i = 0; i < menu_entries_length; i++){
00124       offset += this->st_menu_entries.deserialize(inbuffer + offset);
00125         memcpy( &(this->menu_entries[i]), &(this->st_menu_entries), sizeof(visualization_msgs::MenuEntry));
00126       }
00127       uint8_t controls_lengthT = *(inbuffer + offset++);
00128       if(controls_lengthT > controls_length)
00129         this->controls = (visualization_msgs::InteractiveMarkerControl*)realloc(this->controls, controls_lengthT * sizeof(visualization_msgs::InteractiveMarkerControl));
00130       offset += 3;
00131       controls_length = controls_lengthT;
00132       for( uint8_t i = 0; i < controls_length; i++){
00133       offset += this->st_controls.deserialize(inbuffer + offset);
00134         memcpy( &(this->controls[i]), &(this->st_controls), sizeof(visualization_msgs::InteractiveMarkerControl));
00135       }
00136      return offset;
00137     }
00138 
00139     const char * getType(){ return "visualization_msgs/InteractiveMarker"; };
00140     const char * getMD5(){ return "311bd5f6cd6a20820ac0ba84315f4e22"; };
00141 
00142   };
00143 
00144 }
00145 #endif