rosserial library for mbed Inspired by nucho's rosserial library This library is still under development

Dependencies:   MODSERIAL mbed

Dependents:   mbed_roshydro_test

Library still under development!

Committer:
akashvibhute
Date:
Sun Feb 15 10:53:43 2015 +0000
Revision:
0:30537dec6e0b
First commit; Library still need to be debugged, compilation issues with new mbed and modserial updates.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akashvibhute 0:30537dec6e0b 1 #ifndef _ROS_visualization_msgs_InteractiveMarkerUpdate_h
akashvibhute 0:30537dec6e0b 2 #define _ROS_visualization_msgs_InteractiveMarkerUpdate_h
akashvibhute 0:30537dec6e0b 3
akashvibhute 0:30537dec6e0b 4 #include <stdint.h>
akashvibhute 0:30537dec6e0b 5 #include <string.h>
akashvibhute 0:30537dec6e0b 6 #include <stdlib.h>
akashvibhute 0:30537dec6e0b 7 #include "ros/msg.h"
akashvibhute 0:30537dec6e0b 8 #include "visualization_msgs/InteractiveMarker.h"
akashvibhute 0:30537dec6e0b 9 #include "visualization_msgs/InteractiveMarkerPose.h"
akashvibhute 0:30537dec6e0b 10
akashvibhute 0:30537dec6e0b 11 namespace visualization_msgs
akashvibhute 0:30537dec6e0b 12 {
akashvibhute 0:30537dec6e0b 13
akashvibhute 0:30537dec6e0b 14 class InteractiveMarkerUpdate : public ros::Msg
akashvibhute 0:30537dec6e0b 15 {
akashvibhute 0:30537dec6e0b 16 public:
akashvibhute 0:30537dec6e0b 17 const char* server_id;
akashvibhute 0:30537dec6e0b 18 uint64_t seq_num;
akashvibhute 0:30537dec6e0b 19 uint8_t type;
akashvibhute 0:30537dec6e0b 20 uint8_t markers_length;
akashvibhute 0:30537dec6e0b 21 visualization_msgs::InteractiveMarker st_markers;
akashvibhute 0:30537dec6e0b 22 visualization_msgs::InteractiveMarker * markers;
akashvibhute 0:30537dec6e0b 23 uint8_t poses_length;
akashvibhute 0:30537dec6e0b 24 visualization_msgs::InteractiveMarkerPose st_poses;
akashvibhute 0:30537dec6e0b 25 visualization_msgs::InteractiveMarkerPose * poses;
akashvibhute 0:30537dec6e0b 26 uint8_t erases_length;
akashvibhute 0:30537dec6e0b 27 char* st_erases;
akashvibhute 0:30537dec6e0b 28 char* * erases;
akashvibhute 0:30537dec6e0b 29 enum { KEEP_ALIVE = 0 };
akashvibhute 0:30537dec6e0b 30 enum { UPDATE = 1 };
akashvibhute 0:30537dec6e0b 31
akashvibhute 0:30537dec6e0b 32 InteractiveMarkerUpdate():
akashvibhute 0:30537dec6e0b 33 server_id(""),
akashvibhute 0:30537dec6e0b 34 seq_num(0),
akashvibhute 0:30537dec6e0b 35 type(0),
akashvibhute 0:30537dec6e0b 36 markers_length(0), markers(NULL),
akashvibhute 0:30537dec6e0b 37 poses_length(0), poses(NULL),
akashvibhute 0:30537dec6e0b 38 erases_length(0), erases(NULL)
akashvibhute 0:30537dec6e0b 39 {
akashvibhute 0:30537dec6e0b 40 }
akashvibhute 0:30537dec6e0b 41
akashvibhute 0:30537dec6e0b 42 virtual int serialize(unsigned char *outbuffer) const
akashvibhute 0:30537dec6e0b 43 {
akashvibhute 0:30537dec6e0b 44 int offset = 0;
akashvibhute 0:30537dec6e0b 45 uint32_t length_server_id = strlen(this->server_id);
akashvibhute 0:30537dec6e0b 46 memcpy(outbuffer + offset, &length_server_id, sizeof(uint32_t));
akashvibhute 0:30537dec6e0b 47 offset += 4;
akashvibhute 0:30537dec6e0b 48 memcpy(outbuffer + offset, this->server_id, length_server_id);
akashvibhute 0:30537dec6e0b 49 offset += length_server_id;
akashvibhute 0:30537dec6e0b 50 union {
akashvibhute 0:30537dec6e0b 51 uint64_t real;
akashvibhute 0:30537dec6e0b 52 uint32_t base;
akashvibhute 0:30537dec6e0b 53 } u_seq_num;
akashvibhute 0:30537dec6e0b 54 u_seq_num.real = this->seq_num;
akashvibhute 0:30537dec6e0b 55 *(outbuffer + offset + 0) = (u_seq_num.base >> (8 * 0)) & 0xFF;
akashvibhute 0:30537dec6e0b 56 *(outbuffer + offset + 1) = (u_seq_num.base >> (8 * 1)) & 0xFF;
akashvibhute 0:30537dec6e0b 57 *(outbuffer + offset + 2) = (u_seq_num.base >> (8 * 2)) & 0xFF;
akashvibhute 0:30537dec6e0b 58 *(outbuffer + offset + 3) = (u_seq_num.base >> (8 * 3)) & 0xFF;
akashvibhute 0:30537dec6e0b 59 offset += sizeof(this->seq_num);
akashvibhute 0:30537dec6e0b 60 *(outbuffer + offset + 0) = (this->type >> (8 * 0)) & 0xFF;
akashvibhute 0:30537dec6e0b 61 offset += sizeof(this->type);
akashvibhute 0:30537dec6e0b 62 *(outbuffer + offset++) = markers_length;
akashvibhute 0:30537dec6e0b 63 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 64 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 65 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 66 for( uint8_t i = 0; i < markers_length; i++){
akashvibhute 0:30537dec6e0b 67 offset += this->markers[i].serialize(outbuffer + offset);
akashvibhute 0:30537dec6e0b 68 }
akashvibhute 0:30537dec6e0b 69 *(outbuffer + offset++) = poses_length;
akashvibhute 0:30537dec6e0b 70 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 71 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 72 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 73 for( uint8_t i = 0; i < poses_length; i++){
akashvibhute 0:30537dec6e0b 74 offset += this->poses[i].serialize(outbuffer + offset);
akashvibhute 0:30537dec6e0b 75 }
akashvibhute 0:30537dec6e0b 76 *(outbuffer + offset++) = erases_length;
akashvibhute 0:30537dec6e0b 77 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 78 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 79 *(outbuffer + offset++) = 0;
akashvibhute 0:30537dec6e0b 80 for( uint8_t i = 0; i < erases_length; i++){
akashvibhute 0:30537dec6e0b 81 uint32_t length_erasesi = strlen(this->erases[i]);
akashvibhute 0:30537dec6e0b 82 memcpy(outbuffer + offset, &length_erasesi, sizeof(uint32_t));
akashvibhute 0:30537dec6e0b 83 offset += 4;
akashvibhute 0:30537dec6e0b 84 memcpy(outbuffer + offset, this->erases[i], length_erasesi);
akashvibhute 0:30537dec6e0b 85 offset += length_erasesi;
akashvibhute 0:30537dec6e0b 86 }
akashvibhute 0:30537dec6e0b 87 return offset;
akashvibhute 0:30537dec6e0b 88 }
akashvibhute 0:30537dec6e0b 89
akashvibhute 0:30537dec6e0b 90 virtual int deserialize(unsigned char *inbuffer)
akashvibhute 0:30537dec6e0b 91 {
akashvibhute 0:30537dec6e0b 92 int offset = 0;
akashvibhute 0:30537dec6e0b 93 uint32_t length_server_id;
akashvibhute 0:30537dec6e0b 94 memcpy(&length_server_id, (inbuffer + offset), sizeof(uint32_t));
akashvibhute 0:30537dec6e0b 95 offset += 4;
akashvibhute 0:30537dec6e0b 96 for(unsigned int k= offset; k< offset+length_server_id; ++k){
akashvibhute 0:30537dec6e0b 97 inbuffer[k-1]=inbuffer[k];
akashvibhute 0:30537dec6e0b 98 }
akashvibhute 0:30537dec6e0b 99 inbuffer[offset+length_server_id-1]=0;
akashvibhute 0:30537dec6e0b 100 this->server_id = (char *)(inbuffer + offset-1);
akashvibhute 0:30537dec6e0b 101 offset += length_server_id;
akashvibhute 0:30537dec6e0b 102 union {
akashvibhute 0:30537dec6e0b 103 uint64_t real;
akashvibhute 0:30537dec6e0b 104 uint32_t base;
akashvibhute 0:30537dec6e0b 105 } u_seq_num;
akashvibhute 0:30537dec6e0b 106 u_seq_num.base = 0;
akashvibhute 0:30537dec6e0b 107 u_seq_num.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0);
akashvibhute 0:30537dec6e0b 108 u_seq_num.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
akashvibhute 0:30537dec6e0b 109 u_seq_num.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
akashvibhute 0:30537dec6e0b 110 u_seq_num.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
akashvibhute 0:30537dec6e0b 111 this->seq_num = u_seq_num.real;
akashvibhute 0:30537dec6e0b 112 offset += sizeof(this->seq_num);
akashvibhute 0:30537dec6e0b 113 this->type = ((uint8_t) (*(inbuffer + offset)));
akashvibhute 0:30537dec6e0b 114 offset += sizeof(this->type);
akashvibhute 0:30537dec6e0b 115 uint8_t markers_lengthT = *(inbuffer + offset++);
akashvibhute 0:30537dec6e0b 116 if(markers_lengthT > markers_length)
akashvibhute 0:30537dec6e0b 117 this->markers = (visualization_msgs::InteractiveMarker*)realloc(this->markers, markers_lengthT * sizeof(visualization_msgs::InteractiveMarker));
akashvibhute 0:30537dec6e0b 118 offset += 3;
akashvibhute 0:30537dec6e0b 119 markers_length = markers_lengthT;
akashvibhute 0:30537dec6e0b 120 for( uint8_t i = 0; i < markers_length; i++){
akashvibhute 0:30537dec6e0b 121 offset += this->st_markers.deserialize(inbuffer + offset);
akashvibhute 0:30537dec6e0b 122 memcpy( &(this->markers[i]), &(this->st_markers), sizeof(visualization_msgs::InteractiveMarker));
akashvibhute 0:30537dec6e0b 123 }
akashvibhute 0:30537dec6e0b 124 uint8_t poses_lengthT = *(inbuffer + offset++);
akashvibhute 0:30537dec6e0b 125 if(poses_lengthT > poses_length)
akashvibhute 0:30537dec6e0b 126 this->poses = (visualization_msgs::InteractiveMarkerPose*)realloc(this->poses, poses_lengthT * sizeof(visualization_msgs::InteractiveMarkerPose));
akashvibhute 0:30537dec6e0b 127 offset += 3;
akashvibhute 0:30537dec6e0b 128 poses_length = poses_lengthT;
akashvibhute 0:30537dec6e0b 129 for( uint8_t i = 0; i < poses_length; i++){
akashvibhute 0:30537dec6e0b 130 offset += this->st_poses.deserialize(inbuffer + offset);
akashvibhute 0:30537dec6e0b 131 memcpy( &(this->poses[i]), &(this->st_poses), sizeof(visualization_msgs::InteractiveMarkerPose));
akashvibhute 0:30537dec6e0b 132 }
akashvibhute 0:30537dec6e0b 133 uint8_t erases_lengthT = *(inbuffer + offset++);
akashvibhute 0:30537dec6e0b 134 if(erases_lengthT > erases_length)
akashvibhute 0:30537dec6e0b 135 this->erases = (char**)realloc(this->erases, erases_lengthT * sizeof(char*));
akashvibhute 0:30537dec6e0b 136 offset += 3;
akashvibhute 0:30537dec6e0b 137 erases_length = erases_lengthT;
akashvibhute 0:30537dec6e0b 138 for( uint8_t i = 0; i < erases_length; i++){
akashvibhute 0:30537dec6e0b 139 uint32_t length_st_erases;
akashvibhute 0:30537dec6e0b 140 memcpy(&length_st_erases, (inbuffer + offset), sizeof(uint32_t));
akashvibhute 0:30537dec6e0b 141 offset += 4;
akashvibhute 0:30537dec6e0b 142 for(unsigned int k= offset; k< offset+length_st_erases; ++k){
akashvibhute 0:30537dec6e0b 143 inbuffer[k-1]=inbuffer[k];
akashvibhute 0:30537dec6e0b 144 }
akashvibhute 0:30537dec6e0b 145 inbuffer[offset+length_st_erases-1]=0;
akashvibhute 0:30537dec6e0b 146 this->st_erases = (char *)(inbuffer + offset-1);
akashvibhute 0:30537dec6e0b 147 offset += length_st_erases;
akashvibhute 0:30537dec6e0b 148 memcpy( &(this->erases[i]), &(this->st_erases), sizeof(char*));
akashvibhute 0:30537dec6e0b 149 }
akashvibhute 0:30537dec6e0b 150 return offset;
akashvibhute 0:30537dec6e0b 151 }
akashvibhute 0:30537dec6e0b 152
akashvibhute 0:30537dec6e0b 153 const char * getType(){ return "visualization_msgs/InteractiveMarkerUpdate"; };
akashvibhute 0:30537dec6e0b 154 const char * getMD5(){ return "83e22f99d3b31fde725e0a338200e036"; };
akashvibhute 0:30537dec6e0b 155
akashvibhute 0:30537dec6e0b 156 };
akashvibhute 0:30537dec6e0b 157
akashvibhute 0:30537dec6e0b 158 }
akashvibhute 0:30537dec6e0b 159 #endif