00001 #ifndef _ROS_SERVICE_SelfTest_h 00002 #define _ROS_SERVICE_SelfTest_h 00003 #include <stdint.h> 00004 #include <string.h> 00005 #include <stdlib.h> 00006 #include "ros/msg.h" 00007 #include "diagnostic_msgs/DiagnosticStatus.h" 00008 00009 namespace diagnostic_msgs 00010 { 00011 00012 static const char SELFTEST[] = "diagnostic_msgs/SelfTest"; 00013 00014 class SelfTestRequest : public ros::Msg 00015 { 00016 public: 00017 00018 virtual int serialize(unsigned char *outbuffer) const 00019 { 00020 int offset = 0; 00021 return offset; 00022 } 00023 00024 virtual int deserialize(unsigned char *inbuffer) 00025 { 00026 int offset = 0; 00027 return offset; 00028 } 00029 00030 const char * getType(){ return SELFTEST; }; 00031 const char * getMD5(){ return "d41d8cd98f00b204e9800998ecf8427e"; }; 00032 00033 }; 00034 00035 class SelfTestResponse : public ros::Msg 00036 { 00037 public: 00038 char * id; 00039 int8_t passed; 00040 uint8_t status_length; 00041 diagnostic_msgs::DiagnosticStatus st_status; 00042 diagnostic_msgs::DiagnosticStatus * status; 00043 00044 virtual int serialize(unsigned char *outbuffer) const 00045 { 00046 int offset = 0; 00047 uint32_t length_id = strlen( (const char*) this->id); 00048 memcpy(outbuffer + offset, &length_id, sizeof(uint32_t)); 00049 offset += 4; 00050 memcpy(outbuffer + offset, this->id, length_id); 00051 offset += length_id; 00052 union { 00053 int8_t real; 00054 uint8_t base; 00055 } u_passed; 00056 u_passed.real = this->passed; 00057 *(outbuffer + offset + 0) = (u_passed.base >> (8 * 0)) & 0xFF; 00058 offset += sizeof(this->passed); 00059 *(outbuffer + offset++) = status_length; 00060 *(outbuffer + offset++) = 0; 00061 *(outbuffer + offset++) = 0; 00062 *(outbuffer + offset++) = 0; 00063 for( uint8_t i = 0; i < status_length; i++){ 00064 offset += this->status[i].serialize(outbuffer + offset); 00065 } 00066 return offset; 00067 } 00068 00069 virtual int deserialize(unsigned char *inbuffer) 00070 { 00071 int offset = 0; 00072 uint32_t length_id; 00073 memcpy(&length_id, (inbuffer + offset), sizeof(uint32_t)); 00074 offset += 4; 00075 for(unsigned int k= offset; k< offset+length_id; ++k){ 00076 inbuffer[k-1]=inbuffer[k]; 00077 } 00078 inbuffer[offset+length_id-1]=0; 00079 this->id = (char *)(inbuffer + offset-1); 00080 offset += length_id; 00081 union { 00082 int8_t real; 00083 uint8_t base; 00084 } u_passed; 00085 u_passed.base = 0; 00086 u_passed.base |= ((uint8_t) (*(inbuffer + offset + 0))) << (8 * 0); 00087 this->passed = u_passed.real; 00088 offset += sizeof(this->passed); 00089 uint8_t status_lengthT = *(inbuffer + offset++); 00090 if(status_lengthT > status_length) 00091 this->status = (diagnostic_msgs::DiagnosticStatus*)realloc(this->status, status_lengthT * sizeof(diagnostic_msgs::DiagnosticStatus)); 00092 offset += 3; 00093 status_length = status_lengthT; 00094 for( uint8_t i = 0; i < status_length; i++){ 00095 offset += this->st_status.deserialize(inbuffer + offset); 00096 memcpy( &(this->status[i]), &(this->st_status), sizeof(diagnostic_msgs::DiagnosticStatus)); 00097 } 00098 return offset; 00099 } 00100 00101 const char * getType(){ return SELFTEST; }; 00102 const char * getMD5(){ return "74c9372c870a76da4fc2b3973978b898"; }; 00103 00104 }; 00105 00106 class SelfTest { 00107 public: 00108 typedef SelfTestRequest Request; 00109 typedef SelfTestResponse Response; 00110 }; 00111 00112 } 00113 #endif