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

DiagnosticStatus.h

00001 #ifndef _ROS_diagnostic_msgs_DiagnosticStatus_h
00002 #define _ROS_diagnostic_msgs_DiagnosticStatus_h
00003 
00004 #include <stdint.h>
00005 #include <string.h>
00006 #include <stdlib.h>
00007 #include "ros/msg.h"
00008 #include "diagnostic_msgs/KeyValue.h"
00009 
00010 namespace diagnostic_msgs
00011 {
00012 
00013   class DiagnosticStatus : public ros::Msg
00014   {
00015     public:
00016       int8_t level;
00017       const char* name;
00018       const char* message;
00019       const char* hardware_id;
00020       uint8_t values_length;
00021       diagnostic_msgs::KeyValue st_values;
00022       diagnostic_msgs::KeyValue * values;
00023       enum { OK = 0 };
00024       enum { WARN = 1 };
00025       enum { ERROR = 2 };
00026       enum { STALE = 3 };
00027 
00028     DiagnosticStatus():
00029       level(0),
00030       name(""),
00031       message(""),
00032       hardware_id(""),
00033       values_length(0), values(NULL)
00034     {
00035     }
00036 
00037     virtual int serialize(unsigned char *outbuffer) const
00038     {
00039       int offset = 0;
00040       union {
00041         int8_t real;
00042         uint8_t base;
00043       } u_level;
00044       u_level.real = this->level;
00045       *(outbuffer + offset + 0) = (u_level.base >> (8 * 0)) & 0xFF;
00046       offset += sizeof(this->level);
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_message = strlen(this->message);
00053       memcpy(outbuffer + offset, &length_message, sizeof(uint32_t));
00054       offset += 4;
00055       memcpy(outbuffer + offset, this->message, length_message);
00056       offset += length_message;
00057       uint32_t length_hardware_id = strlen(this->hardware_id);
00058       memcpy(outbuffer + offset, &length_hardware_id, sizeof(uint32_t));
00059       offset += 4;
00060       memcpy(outbuffer + offset, this->hardware_id, length_hardware_id);
00061       offset += length_hardware_id;
00062       *(outbuffer + offset++) = values_length;
00063       *(outbuffer + offset++) = 0;
00064       *(outbuffer + offset++) = 0;
00065       *(outbuffer + offset++) = 0;
00066       for( uint8_t i = 0; i < values_length; i++){
00067       offset += this->values[i].serialize(outbuffer + offset);
00068       }
00069       return offset;
00070     }
00071 
00072     virtual int deserialize(unsigned char *inbuffer)
00073     {
00074       int offset = 0;
00075       union {
00076         int8_t real;
00077         uint8_t base;
00078       } u_level;
00079       u_level.base = 0;
00080       u_level.base |= ((uint8_t) (*(inbuffer + offset + 0))) << (8 * 0);
00081       this->level = u_level.real;
00082       offset += sizeof(this->level);
00083       uint32_t length_name;
00084       memcpy(&length_name, (inbuffer + offset), sizeof(uint32_t));
00085       offset += 4;
00086       for(unsigned int k= offset; k< offset+length_name; ++k){
00087           inbuffer[k-1]=inbuffer[k];
00088       }
00089       inbuffer[offset+length_name-1]=0;
00090       this->name = (char *)(inbuffer + offset-1);
00091       offset += length_name;
00092       uint32_t length_message;
00093       memcpy(&length_message, (inbuffer + offset), sizeof(uint32_t));
00094       offset += 4;
00095       for(unsigned int k= offset; k< offset+length_message; ++k){
00096           inbuffer[k-1]=inbuffer[k];
00097       }
00098       inbuffer[offset+length_message-1]=0;
00099       this->message = (char *)(inbuffer + offset-1);
00100       offset += length_message;
00101       uint32_t length_hardware_id;
00102       memcpy(&length_hardware_id, (inbuffer + offset), sizeof(uint32_t));
00103       offset += 4;
00104       for(unsigned int k= offset; k< offset+length_hardware_id; ++k){
00105           inbuffer[k-1]=inbuffer[k];
00106       }
00107       inbuffer[offset+length_hardware_id-1]=0;
00108       this->hardware_id = (char *)(inbuffer + offset-1);
00109       offset += length_hardware_id;
00110       uint8_t values_lengthT = *(inbuffer + offset++);
00111       if(values_lengthT > values_length)
00112         this->values = (diagnostic_msgs::KeyValue*)realloc(this->values, values_lengthT * sizeof(diagnostic_msgs::KeyValue));
00113       offset += 3;
00114       values_length = values_lengthT;
00115       for( uint8_t i = 0; i < values_length; i++){
00116       offset += this->st_values.deserialize(inbuffer + offset);
00117         memcpy( &(this->values[i]), &(this->st_values), sizeof(diagnostic_msgs::KeyValue));
00118       }
00119      return offset;
00120     }
00121 
00122     const char * getType(){ return "diagnostic_msgs/DiagnosticStatus"; };
00123     const char * getMD5(){ return "d0ce08bc6e5ba34c7754f563a9cabaf1"; };
00124 
00125   };
00126 
00127 }
00128 #endif