kitt_platform
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Macros
RequestParam.h
Go to the documentation of this file.
1 #ifndef _ROS_SERVICE_RequestParam_h
2 #define _ROS_SERVICE_RequestParam_h
3 #include <stdint.h>
4 #include <string.h>
5 #include <stdlib.h>
6 #include "ros/msg.h"
7 
8 namespace rosserial_msgs
9 {
10 
11 static const char REQUESTPARAM[] = "rosserial_msgs/RequestParam";
12 
14  {
15  public:
16  const char* name;
17 
19  name("")
20  {
21  }
22 
23  virtual int serialize(unsigned char *outbuffer) const
24  {
25  int offset = 0;
26  uint32_t length_name = strlen(this->name);
27  memcpy(outbuffer + offset, &length_name, sizeof(uint32_t));
28  offset += 4;
29  memcpy(outbuffer + offset, this->name, length_name);
30  offset += length_name;
31  return offset;
32  }
33 
34  virtual int deserialize(unsigned char *inbuffer)
35  {
36  int offset = 0;
37  uint32_t length_name;
38  memcpy(&length_name, (inbuffer + offset), sizeof(uint32_t));
39  offset += 4;
40  for(unsigned int k= offset; k< offset+length_name; ++k){
41  inbuffer[k-1]=inbuffer[k];
42  }
43  inbuffer[offset+length_name-1]=0;
44  this->name = (char *)(inbuffer + offset-1);
45  offset += length_name;
46  return offset;
47  }
48 
49  const char * getType(){ return REQUESTPARAM; };
50  const char * getMD5(){ return "c1f3d28f1b044c871e6eff2e9fc3c667"; };
51 
52  };
53 
55  {
56  public:
57  uint8_t ints_length;
58  int32_t st_ints;
59  int32_t * ints;
60  uint8_t floats_length;
61  float st_floats;
62  float * floats;
63  uint8_t strings_length;
64  char* st_strings;
65  char* * strings;
66 
68  ints_length(0), ints(NULL),
69  floats_length(0), floats(NULL),
70  strings_length(0), strings(NULL)
71  {
72  }
73 
74  virtual int serialize(unsigned char *outbuffer) const
75  {
76  int offset = 0;
77  *(outbuffer + offset++) = ints_length;
78  *(outbuffer + offset++) = 0;
79  *(outbuffer + offset++) = 0;
80  *(outbuffer + offset++) = 0;
81  for( uint8_t i = 0; i < ints_length; i++){
82  union {
83  int32_t real;
84  uint32_t base;
85  } u_intsi;
86  u_intsi.real = this->ints[i];
87  *(outbuffer + offset + 0) = (u_intsi.base >> (8 * 0)) & 0xFF;
88  *(outbuffer + offset + 1) = (u_intsi.base >> (8 * 1)) & 0xFF;
89  *(outbuffer + offset + 2) = (u_intsi.base >> (8 * 2)) & 0xFF;
90  *(outbuffer + offset + 3) = (u_intsi.base >> (8 * 3)) & 0xFF;
91  offset += sizeof(this->ints[i]);
92  }
93  *(outbuffer + offset++) = floats_length;
94  *(outbuffer + offset++) = 0;
95  *(outbuffer + offset++) = 0;
96  *(outbuffer + offset++) = 0;
97  for( uint8_t i = 0; i < floats_length; i++){
98  union {
99  float real;
100  uint32_t base;
101  } u_floatsi;
102  u_floatsi.real = this->floats[i];
103  *(outbuffer + offset + 0) = (u_floatsi.base >> (8 * 0)) & 0xFF;
104  *(outbuffer + offset + 1) = (u_floatsi.base >> (8 * 1)) & 0xFF;
105  *(outbuffer + offset + 2) = (u_floatsi.base >> (8 * 2)) & 0xFF;
106  *(outbuffer + offset + 3) = (u_floatsi.base >> (8 * 3)) & 0xFF;
107  offset += sizeof(this->floats[i]);
108  }
109  *(outbuffer + offset++) = strings_length;
110  *(outbuffer + offset++) = 0;
111  *(outbuffer + offset++) = 0;
112  *(outbuffer + offset++) = 0;
113  for( uint8_t i = 0; i < strings_length; i++){
114  uint32_t length_stringsi = strlen(this->strings[i]);
115  memcpy(outbuffer + offset, &length_stringsi, sizeof(uint32_t));
116  offset += 4;
117  memcpy(outbuffer + offset, this->strings[i], length_stringsi);
118  offset += length_stringsi;
119  }
120  return offset;
121  }
122 
123  virtual int deserialize(unsigned char *inbuffer)
124  {
125  int offset = 0;
126  uint8_t ints_lengthT = *(inbuffer + offset++);
127  if(ints_lengthT > ints_length)
128  this->ints = (int32_t*)realloc(this->ints, ints_lengthT * sizeof(int32_t));
129  offset += 3;
130  ints_length = ints_lengthT;
131  for( uint8_t i = 0; i < ints_length; i++){
132  union {
133  int32_t real;
134  uint32_t base;
135  } u_st_ints;
136  u_st_ints.base = 0;
137  u_st_ints.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0);
138  u_st_ints.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
139  u_st_ints.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
140  u_st_ints.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
141  this->st_ints = u_st_ints.real;
142  offset += sizeof(this->st_ints);
143  memcpy( &(this->ints[i]), &(this->st_ints), sizeof(int32_t));
144  }
145  uint8_t floats_lengthT = *(inbuffer + offset++);
146  if(floats_lengthT > floats_length)
147  this->floats = (float*)realloc(this->floats, floats_lengthT * sizeof(float));
148  offset += 3;
149  floats_length = floats_lengthT;
150  for( uint8_t i = 0; i < floats_length; i++){
151  union {
152  float real;
153  uint32_t base;
154  } u_st_floats;
155  u_st_floats.base = 0;
156  u_st_floats.base |= ((uint32_t) (*(inbuffer + offset + 0))) << (8 * 0);
157  u_st_floats.base |= ((uint32_t) (*(inbuffer + offset + 1))) << (8 * 1);
158  u_st_floats.base |= ((uint32_t) (*(inbuffer + offset + 2))) << (8 * 2);
159  u_st_floats.base |= ((uint32_t) (*(inbuffer + offset + 3))) << (8 * 3);
160  this->st_floats = u_st_floats.real;
161  offset += sizeof(this->st_floats);
162  memcpy( &(this->floats[i]), &(this->st_floats), sizeof(float));
163  }
164  uint8_t strings_lengthT = *(inbuffer + offset++);
165  if(strings_lengthT > strings_length)
166  this->strings = (char**)realloc(this->strings, strings_lengthT * sizeof(char*));
167  offset += 3;
168  strings_length = strings_lengthT;
169  for( uint8_t i = 0; i < strings_length; i++){
170  uint32_t length_st_strings;
171  memcpy(&length_st_strings, (inbuffer + offset), sizeof(uint32_t));
172  offset += 4;
173  for(unsigned int k= offset; k< offset+length_st_strings; ++k){
174  inbuffer[k-1]=inbuffer[k];
175  }
176  inbuffer[offset+length_st_strings-1]=0;
177  this->st_strings = (char *)(inbuffer + offset-1);
178  offset += length_st_strings;
179  memcpy( &(this->strings[i]), &(this->st_strings), sizeof(char*));
180  }
181  return offset;
182  }
183 
184  const char * getType(){ return REQUESTPARAM; };
185  const char * getMD5(){ return "9f0e98bda65981986ddf53afa7a40e49"; };
186 
187  };
188 
189  class RequestParam {
190  public:
193  };
194 
195 }
196 #endif
virtual int serialize(unsigned char *outbuffer) const
Definition: RequestParam.h:74
float st_floats
Definition: RequestParam.h:61
RequestParamResponse()
Definition: RequestParam.h:67
RequestParamResponse Response
Definition: RequestParam.h:192
Definition: RequestParam.h:189
uint8_t strings_length
Definition: RequestParam.h:63
virtual int serialize(unsigned char *outbuffer) const
Definition: RequestParam.h:23
char ** strings
Definition: RequestParam.h:65
virtual int deserialize(unsigned char *inbuffer)
Definition: RequestParam.h:123
const char * getType()
Definition: RequestParam.h:184
RequestParamRequest()
Definition: RequestParam.h:18
int32_t * ints
Definition: RequestParam.h:59
virtual int deserialize(unsigned char *inbuffer)
Definition: RequestParam.h:34
const char * getMD5()
Definition: RequestParam.h:50
float * floats
Definition: RequestParam.h:62
static const char REQUESTPARAM[]
Definition: RequestParam.h:11
int32_t st_ints
Definition: RequestParam.h:58
char * st_strings
Definition: RequestParam.h:64
Definition: RequestParam.h:13
RequestParamRequest Request
Definition: RequestParam.h:191
const char * name
Definition: RequestParam.h:16
uint8_t floats_length
Definition: RequestParam.h:60
uint8_t ints_length
Definition: RequestParam.h:57
Definition: RequestParam.h:54
Definition: msg.h:43
const char * getType()
Definition: RequestParam.h:49
const char * getMD5()
Definition: RequestParam.h:185