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
ChannelFloat32.h
00001 #ifndef _ROS_sensor_msgs_ChannelFloat32_h 00002 #define _ROS_sensor_msgs_ChannelFloat32_h 00003 00004 #include <stdint.h> 00005 #include <string.h> 00006 #include <stdlib.h> 00007 #include "ros/msg.h" 00008 00009 namespace sensor_msgs 00010 { 00011 00012 class ChannelFloat32 : public ros::Msg 00013 { 00014 public: 00015 const char* name; 00016 uint8_t values_length; 00017 float st_values; 00018 float * values; 00019 00020 ChannelFloat32(): 00021 name(""), 00022 values_length(0), values(NULL) 00023 { 00024 } 00025 00026 virtual int serialize(unsigned char *outbuffer) const 00027 { 00028 int offset = 0; 00029 uint32_t length_name = strlen(this->name); 00030 memcpy(outbuffer + offset, &length_name, sizeof(uint32_t)); 00031 offset += 4; 00032 memcpy(outbuffer + offset, this->name, length_name); 00033 offset += length_name; 00034 *(outbuffer + offset++) = values_length; 00035 *(outbuffer + offset++) = 0; 00036 *(outbuffer + offset++) = 0; 00037 *(outbuffer + offset++) = 0; 00038 for( uint8_t i = 0; i < values_length; i++){ 00039 union { 00040 float real; 00041 uint32_t base; 00042 } u_valuesi; 00043 u_valuesi.real = this->values[i]; 00044 *(outbuffer + offset + 0) = (u_valuesi.base >> (8 * 0)) & 0xFF; 00045 *(outbuffer + offset + 1) = (u_valuesi.base >> (8 * 1)) & 0xFF; 00046 *(outbuffer + offset + 2) = (u_valuesi.base >> (8 * 2)) & 0xFF; 00047 *(outbuffer + offset + 3) = (u_valuesi.base >> (8 * 3)) & 0xFF; 00048 offset += sizeof(this->values[i]); 00049 } 00050 return offset; 00051 } 00052 00053 virtual int deserialize(unsigned char *inbuffer) 00054 { 00055 int offset = 0; 00056 uint32_t length_name; 00057 memcpy(&length_name, (inbuffer + offset), sizeof(uint32_t)); 00058 offset += 4; 00059 for(unsigned int k= offset; k< offset+length_name; ++k){ 00060 inbuffer[k-1]=inbuffer[k]; 00061 } 00062 inbuffer[offset+length_name-1]=0; 00063 this->name = (char *)(inbuffer + offset-1); 00064 offset += length_name; 00065 uint8_t values_lengthT = *(inbuffer + offset++); 00066 if(values_lengthT > values_length) 00067 this->values = (float*)realloc(this->values, values_lengthT * sizeof(float)); 00068 offset += 3; 00069 values_length = values_lengthT; 00070 for( uint8_t i = 0; i < values_length; i++){ 00071 union { 00072 float real; 00073 uint32_t base; 00074 } u_st_values; 00075 u_st_values.base = 0; 00076 u_st_values.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0); 00077 u_st_values.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1); 00078 u_st_values.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2); 00079 u_st_values.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3); 00080 this->st_values = u_st_values.real; 00081 offset += sizeof(this->st_values); 00082 memcpy( &(this->values[i]), &(this->st_values), sizeof(float)); 00083 } 00084 return offset; 00085 } 00086 00087 const char * getType(){ return "sensor_msgs/ChannelFloat32"; }; 00088 const char * getMD5(){ return "3d40139cdd33dfedcb71ffeeeb42ae7f"; }; 00089 00090 }; 00091 00092 } 00093 #endif
Generated on Tue Jul 12 2022 18:39:38 by 1.7.2