ROS Serial library for Mbed platforms for ROS Indigo Igloo. Check http://wiki.ros.org/rosserial_mbed/ for more information
Dependents: rosserial_mbed_hello_world_publisher rtos_base_control rosserial_mbed_F64MA ROS-RTOS ... more
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
Generated on Tue Jul 12 2022 18:39:39 by 1.7.2