modify for Hydro version

Dependencies:   MODSERIAL

Fork of rosserial_mbed_lib by nucho

Committer:
jjzak
Date:
Sat Oct 26 15:39:01 2013 +0000
Revision:
6:3c54bc7badd4
modify for Hydro version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jjzak 6:3c54bc7badd4 1 #ifndef _ROS_sensor_msgs_PointCloud2_h
jjzak 6:3c54bc7badd4 2 #define _ROS_sensor_msgs_PointCloud2_h
jjzak 6:3c54bc7badd4 3
jjzak 6:3c54bc7badd4 4 #include <stdint.h>
jjzak 6:3c54bc7badd4 5 #include <string.h>
jjzak 6:3c54bc7badd4 6 #include <stdlib.h>
jjzak 6:3c54bc7badd4 7 #include "ros/msg.h"
jjzak 6:3c54bc7badd4 8 #include "std_msgs/Header.h"
jjzak 6:3c54bc7badd4 9 #include "sensor_msgs/PointField.h"
jjzak 6:3c54bc7badd4 10
jjzak 6:3c54bc7badd4 11 namespace sensor_msgs
jjzak 6:3c54bc7badd4 12 {
jjzak 6:3c54bc7badd4 13
jjzak 6:3c54bc7badd4 14 class PointCloud2 : public ros::Msg
jjzak 6:3c54bc7badd4 15 {
jjzak 6:3c54bc7badd4 16 public:
jjzak 6:3c54bc7badd4 17 std_msgs::Header header;
jjzak 6:3c54bc7badd4 18 uint32_t height;
jjzak 6:3c54bc7badd4 19 uint32_t width;
jjzak 6:3c54bc7badd4 20 uint8_t fields_length;
jjzak 6:3c54bc7badd4 21 sensor_msgs::PointField st_fields;
jjzak 6:3c54bc7badd4 22 sensor_msgs::PointField * fields;
jjzak 6:3c54bc7badd4 23 bool is_bigendian;
jjzak 6:3c54bc7badd4 24 uint32_t point_step;
jjzak 6:3c54bc7badd4 25 uint32_t row_step;
jjzak 6:3c54bc7badd4 26 uint8_t data_length;
jjzak 6:3c54bc7badd4 27 uint8_t st_data;
jjzak 6:3c54bc7badd4 28 uint8_t * data;
jjzak 6:3c54bc7badd4 29 bool is_dense;
jjzak 6:3c54bc7badd4 30
jjzak 6:3c54bc7badd4 31 virtual int serialize(unsigned char *outbuffer) const
jjzak 6:3c54bc7badd4 32 {
jjzak 6:3c54bc7badd4 33 int offset = 0;
jjzak 6:3c54bc7badd4 34 offset += this->header.serialize(outbuffer + offset);
jjzak 6:3c54bc7badd4 35 *(outbuffer + offset + 0) = (this->height >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 36 *(outbuffer + offset + 1) = (this->height >> (8 * 1)) & 0xFF;
jjzak 6:3c54bc7badd4 37 *(outbuffer + offset + 2) = (this->height >> (8 * 2)) & 0xFF;
jjzak 6:3c54bc7badd4 38 *(outbuffer + offset + 3) = (this->height >> (8 * 3)) & 0xFF;
jjzak 6:3c54bc7badd4 39 offset += sizeof(this->height);
jjzak 6:3c54bc7badd4 40 *(outbuffer + offset + 0) = (this->width >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 41 *(outbuffer + offset + 1) = (this->width >> (8 * 1)) & 0xFF;
jjzak 6:3c54bc7badd4 42 *(outbuffer + offset + 2) = (this->width >> (8 * 2)) & 0xFF;
jjzak 6:3c54bc7badd4 43 *(outbuffer + offset + 3) = (this->width >> (8 * 3)) & 0xFF;
jjzak 6:3c54bc7badd4 44 offset += sizeof(this->width);
jjzak 6:3c54bc7badd4 45 *(outbuffer + offset++) = fields_length;
jjzak 6:3c54bc7badd4 46 *(outbuffer + offset++) = 0;
jjzak 6:3c54bc7badd4 47 *(outbuffer + offset++) = 0;
jjzak 6:3c54bc7badd4 48 *(outbuffer + offset++) = 0;
jjzak 6:3c54bc7badd4 49 for( uint8_t i = 0; i < fields_length; i++){
jjzak 6:3c54bc7badd4 50 offset += this->fields[i].serialize(outbuffer + offset);
jjzak 6:3c54bc7badd4 51 }
jjzak 6:3c54bc7badd4 52 union {
jjzak 6:3c54bc7badd4 53 bool real;
jjzak 6:3c54bc7badd4 54 uint8_t base;
jjzak 6:3c54bc7badd4 55 } u_is_bigendian;
jjzak 6:3c54bc7badd4 56 u_is_bigendian.real = this->is_bigendian;
jjzak 6:3c54bc7badd4 57 *(outbuffer + offset + 0) = (u_is_bigendian.base >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 58 offset += sizeof(this->is_bigendian);
jjzak 6:3c54bc7badd4 59 *(outbuffer + offset + 0) = (this->point_step >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 60 *(outbuffer + offset + 1) = (this->point_step >> (8 * 1)) & 0xFF;
jjzak 6:3c54bc7badd4 61 *(outbuffer + offset + 2) = (this->point_step >> (8 * 2)) & 0xFF;
jjzak 6:3c54bc7badd4 62 *(outbuffer + offset + 3) = (this->point_step >> (8 * 3)) & 0xFF;
jjzak 6:3c54bc7badd4 63 offset += sizeof(this->point_step);
jjzak 6:3c54bc7badd4 64 *(outbuffer + offset + 0) = (this->row_step >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 65 *(outbuffer + offset + 1) = (this->row_step >> (8 * 1)) & 0xFF;
jjzak 6:3c54bc7badd4 66 *(outbuffer + offset + 2) = (this->row_step >> (8 * 2)) & 0xFF;
jjzak 6:3c54bc7badd4 67 *(outbuffer + offset + 3) = (this->row_step >> (8 * 3)) & 0xFF;
jjzak 6:3c54bc7badd4 68 offset += sizeof(this->row_step);
jjzak 6:3c54bc7badd4 69 *(outbuffer + offset++) = data_length;
jjzak 6:3c54bc7badd4 70 *(outbuffer + offset++) = 0;
jjzak 6:3c54bc7badd4 71 *(outbuffer + offset++) = 0;
jjzak 6:3c54bc7badd4 72 *(outbuffer + offset++) = 0;
jjzak 6:3c54bc7badd4 73 for( uint8_t i = 0; i < data_length; i++){
jjzak 6:3c54bc7badd4 74 *(outbuffer + offset + 0) = (this->data[i] >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 75 offset += sizeof(this->data[i]);
jjzak 6:3c54bc7badd4 76 }
jjzak 6:3c54bc7badd4 77 union {
jjzak 6:3c54bc7badd4 78 bool real;
jjzak 6:3c54bc7badd4 79 uint8_t base;
jjzak 6:3c54bc7badd4 80 } u_is_dense;
jjzak 6:3c54bc7badd4 81 u_is_dense.real = this->is_dense;
jjzak 6:3c54bc7badd4 82 *(outbuffer + offset + 0) = (u_is_dense.base >> (8 * 0)) & 0xFF;
jjzak 6:3c54bc7badd4 83 offset += sizeof(this->is_dense);
jjzak 6:3c54bc7badd4 84 return offset;
jjzak 6:3c54bc7badd4 85 }
jjzak 6:3c54bc7badd4 86
jjzak 6:3c54bc7badd4 87 virtual int deserialize(unsigned char *inbuffer)
jjzak 6:3c54bc7badd4 88 {
jjzak 6:3c54bc7badd4 89 int offset = 0;
jjzak 6:3c54bc7badd4 90 offset += this->header.deserialize(inbuffer + offset);
jjzak 6:3c54bc7badd4 91 this->height = ((uint32_t) (*(inbuffer + offset)));
jjzak 6:3c54bc7badd4 92 this->height |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
jjzak 6:3c54bc7badd4 93 this->height |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
jjzak 6:3c54bc7badd4 94 this->height |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
jjzak 6:3c54bc7badd4 95 offset += sizeof(this->height);
jjzak 6:3c54bc7badd4 96 this->width = ((uint32_t) (*(inbuffer + offset)));
jjzak 6:3c54bc7badd4 97 this->width |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
jjzak 6:3c54bc7badd4 98 this->width |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
jjzak 6:3c54bc7badd4 99 this->width |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
jjzak 6:3c54bc7badd4 100 offset += sizeof(this->width);
jjzak 6:3c54bc7badd4 101 uint8_t fields_lengthT = *(inbuffer + offset++);
jjzak 6:3c54bc7badd4 102 if(fields_lengthT > fields_length)
jjzak 6:3c54bc7badd4 103 this->fields = (sensor_msgs::PointField*)realloc(this->fields, fields_lengthT * sizeof(sensor_msgs::PointField));
jjzak 6:3c54bc7badd4 104 offset += 3;
jjzak 6:3c54bc7badd4 105 fields_length = fields_lengthT;
jjzak 6:3c54bc7badd4 106 for( uint8_t i = 0; i < fields_length; i++){
jjzak 6:3c54bc7badd4 107 offset += this->st_fields.deserialize(inbuffer + offset);
jjzak 6:3c54bc7badd4 108 memcpy( &(this->fields[i]), &(this->st_fields), sizeof(sensor_msgs::PointField));
jjzak 6:3c54bc7badd4 109 }
jjzak 6:3c54bc7badd4 110 union {
jjzak 6:3c54bc7badd4 111 bool real;
jjzak 6:3c54bc7badd4 112 uint8_t base;
jjzak 6:3c54bc7badd4 113 } u_is_bigendian;
jjzak 6:3c54bc7badd4 114 u_is_bigendian.base = 0;
jjzak 6:3c54bc7badd4 115 u_is_bigendian.base |= ((uint8_t) (*(inbuffer + offset + 0))) << (8 * 0);
jjzak 6:3c54bc7badd4 116 this->is_bigendian = u_is_bigendian.real;
jjzak 6:3c54bc7badd4 117 offset += sizeof(this->is_bigendian);
jjzak 6:3c54bc7badd4 118 this->point_step = ((uint32_t) (*(inbuffer + offset)));
jjzak 6:3c54bc7badd4 119 this->point_step |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
jjzak 6:3c54bc7badd4 120 this->point_step |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
jjzak 6:3c54bc7badd4 121 this->point_step |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
jjzak 6:3c54bc7badd4 122 offset += sizeof(this->point_step);
jjzak 6:3c54bc7badd4 123 this->row_step = ((uint32_t) (*(inbuffer + offset)));
jjzak 6:3c54bc7badd4 124 this->row_step |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
jjzak 6:3c54bc7badd4 125 this->row_step |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
jjzak 6:3c54bc7badd4 126 this->row_step |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
jjzak 6:3c54bc7badd4 127 offset += sizeof(this->row_step);
jjzak 6:3c54bc7badd4 128 uint8_t data_lengthT = *(inbuffer + offset++);
jjzak 6:3c54bc7badd4 129 if(data_lengthT > data_length)
jjzak 6:3c54bc7badd4 130 this->data = (uint8_t*)realloc(this->data, data_lengthT * sizeof(uint8_t));
jjzak 6:3c54bc7badd4 131 offset += 3;
jjzak 6:3c54bc7badd4 132 data_length = data_lengthT;
jjzak 6:3c54bc7badd4 133 for( uint8_t i = 0; i < data_length; i++){
jjzak 6:3c54bc7badd4 134 this->st_data = ((uint8_t) (*(inbuffer + offset)));
jjzak 6:3c54bc7badd4 135 offset += sizeof(this->st_data);
jjzak 6:3c54bc7badd4 136 memcpy( &(this->data[i]), &(this->st_data), sizeof(uint8_t));
jjzak 6:3c54bc7badd4 137 }
jjzak 6:3c54bc7badd4 138 union {
jjzak 6:3c54bc7badd4 139 bool real;
jjzak 6:3c54bc7badd4 140 uint8_t base;
jjzak 6:3c54bc7badd4 141 } u_is_dense;
jjzak 6:3c54bc7badd4 142 u_is_dense.base = 0;
jjzak 6:3c54bc7badd4 143 u_is_dense.base |= ((uint8_t) (*(inbuffer + offset + 0))) << (8 * 0);
jjzak 6:3c54bc7badd4 144 this->is_dense = u_is_dense.real;
jjzak 6:3c54bc7badd4 145 offset += sizeof(this->is_dense);
jjzak 6:3c54bc7badd4 146 return offset;
jjzak 6:3c54bc7badd4 147 }
jjzak 6:3c54bc7badd4 148
jjzak 6:3c54bc7badd4 149 const char * getType(){ return "sensor_msgs/PointCloud2"; };
jjzak 6:3c54bc7badd4 150 const char * getMD5(){ return "1158d486dd51d683ce2f1be655c3c181"; };
jjzak 6:3c54bc7badd4 151
jjzak 6:3c54bc7badd4 152 };
jjzak 6:3c54bc7badd4 153
jjzak 6:3c54bc7badd4 154 }
jjzak 6:3c54bc7badd4 155 #endif