aboutsummaryrefslogtreecommitdiffstats
path: root/lcmtype/pose_t.cpp
diff options
context:
space:
mode:
authorWe-unite <3205135446@qq.com>2024-06-13 18:19:08 +0800
committerWe-unite <3205135446@qq.com>2024-06-15 14:26:58 +0800
commit1fb859960b3e9c17a78754c6321da85f6b7b01b6 (patch)
treea0ac5866cc6a1677bc73d2f033a877172920cece /lcmtype/pose_t.cpp
parent7eba07d667cf1a7613fed1170e884a3a43123fe1 (diff)
downloadWheelCtrl-1fb859960b3e9c17a78754c6321da85f6b7b01b6.tar.gz
WheelCtrl-1fb859960b3e9c17a78754c6321da85f6b7b01b6.zip
add ROBOT_CONTROL, divide udp2lcm and serial
Diffstat (limited to 'lcmtype/pose_t.cpp')
-rw-r--r--lcmtype/pose_t.cpp325
1 files changed, 325 insertions, 0 deletions
diff --git a/lcmtype/pose_t.cpp b/lcmtype/pose_t.cpp
new file mode 100644
index 0000000..ef71a92
--- /dev/null
+++ b/lcmtype/pose_t.cpp
@@ -0,0 +1,325 @@
1/** THIS IS AN AUTOMATICALLY GENERATED FILE. DO NOT MODIFY
2 * BY HAND!!
3 *
4 * Generated by lcm-gen
5 **/
6
7#include "pose_t.h"
8#include <string.h>
9
10static int __pose_t_hash_computed;
11static int64_t __pose_t_hash;
12
13int64_t __pose_t_hash_recursive(const __lcm_hash_ptr *p) {
14 const __lcm_hash_ptr *fp;
15 for (fp = p; fp != NULL; fp = fp->parent)
16 if (fp->v == __pose_t_get_hash)
17 return 0;
18
19 const __lcm_hash_ptr cp = {p, (void *)__pose_t_get_hash};
20 (void)cp;
21
22 int64_t hash = 0x170b77d82958082fLL + __int64_t_hash_recursive(&cp) +
23 __double_hash_recursive(&cp) + __double_hash_recursive(&cp) +
24 __double_hash_recursive(&cp) + __double_hash_recursive(&cp) +
25 __double_hash_recursive(&cp);
26
27 return (hash << 1) + ((hash >> 63) & 1);
28}
29
30int64_t __pose_t_get_hash(void) {
31 if (!__pose_t_hash_computed) {
32 __pose_t_hash = __pose_t_hash_recursive(NULL);
33 __pose_t_hash_computed = 1;
34 }
35
36 return __pose_t_hash;
37}
38
39int __pose_t_encode_array(void *buf, int offset, int maxlen, const pose_t *p,
40 int elements) {
41 int pos = 0, thislen, element;
42
43 for (element = 0; element < elements; element++) {
44
45 thislen = __int64_t_encode_array(buf, offset + pos, maxlen - pos,
46 &(p[element].utime), 1);
47 if (thislen < 0)
48 return thislen;
49 else
50 pos += thislen;
51
52 thislen = __double_encode_array(buf, offset + pos, maxlen - pos,
53 p[element].pos, 3);
54 if (thislen < 0)
55 return thislen;
56 else
57 pos += thislen;
58
59 thislen = __double_encode_array(buf, offset + pos, maxlen - pos,
60 p[element].vel, 3);
61 if (thislen < 0)
62 return thislen;
63 else
64 pos += thislen;
65
66 thislen = __double_encode_array(buf, offset + pos, maxlen - pos,
67 p[element].orientation, 4);
68 if (thislen < 0)
69 return thislen;
70 else
71 pos += thislen;
72
73 thislen = __double_encode_array(buf, offset + pos, maxlen - pos,
74 p[element].rotation_rate, 3);
75 if (thislen < 0)
76 return thislen;
77 else
78 pos += thislen;
79
80 thislen = __double_encode_array(buf, offset + pos, maxlen - pos,
81 p[element].accel, 3);
82 if (thislen < 0)
83 return thislen;
84 else
85 pos += thislen;
86 }
87 return pos;
88}
89
90int pose_t_encode(void *buf, int offset, int maxlen, const pose_t *p) {
91 int pos = 0, thislen;
92 int64_t hash = __pose_t_get_hash();
93
94 thislen = __int64_t_encode_array(buf, offset + pos, maxlen - pos, &hash, 1);
95 if (thislen < 0)
96 return thislen;
97 else
98 pos += thislen;
99
100 thislen = __pose_t_encode_array(buf, offset + pos, maxlen - pos, p, 1);
101 if (thislen < 0)
102 return thislen;
103 else
104 pos += thislen;
105
106 return pos;
107}
108
109int __pose_t_encoded_array_size(const pose_t *p, int elements) {
110 int size = 0, element;
111 for (element = 0; element < elements; element++) {
112
113 size += __int64_t_encoded_array_size(&(p[element].utime), 1);
114
115 size += __double_encoded_array_size(p[element].pos, 3);
116
117 size += __double_encoded_array_size(p[element].vel, 3);
118
119 size += __double_encoded_array_size(p[element].orientation, 4);
120
121 size += __double_encoded_array_size(p[element].rotation_rate, 3);
122
123 size += __double_encoded_array_size(p[element].accel, 3);
124 }
125 return size;
126}
127
128int pose_t_encoded_size(const pose_t *p) {
129 return 8 + __pose_t_encoded_array_size(p, 1);
130}
131
132int __pose_t_decode_array(const void *buf, int offset, int maxlen, pose_t *p,
133 int elements) {
134 int pos = 0, thislen, element;
135
136 for (element = 0; element < elements; element++) {
137
138 thislen = __int64_t_decode_array(buf, offset + pos, maxlen - pos,
139 &(p[element].utime), 1);
140 if (thislen < 0)
141 return thislen;
142 else
143 pos += thislen;
144
145 thislen = __double_decode_array(buf, offset + pos, maxlen - pos,
146 p[element].pos, 3);
147 if (thislen < 0)
148 return thislen;
149 else
150 pos += thislen;
151
152 thislen = __double_decode_array(buf, offset + pos, maxlen - pos,
153 p[element].vel, 3);
154 if (thislen < 0)
155 return thislen;
156 else
157 pos += thislen;
158
159 thislen = __double_decode_array(buf, offset + pos, maxlen - pos,
160 p[element].orientation, 4);
161 if (thislen < 0)
162 return thislen;
163 else
164 pos += thislen;
165
166 thislen = __double_decode_array(buf, offset + pos, maxlen - pos,
167 p[element].rotation_rate, 3);
168 if (thislen < 0)
169 return thislen;
170 else
171 pos += thislen;
172
173 thislen = __double_decode_array(buf, offset + pos, maxlen - pos,
174 p[element].accel, 3);
175 if (thislen < 0)
176 return thislen;
177 else
178 pos += thislen;
179 }
180 return pos;
181}
182
183int __pose_t_decode_array_cleanup(pose_t *p, int elements) {
184 int element;
185 for (element = 0; element < elements; element++) {
186
187 __int64_t_decode_array_cleanup(&(p[element].utime), 1);
188
189 __double_decode_array_cleanup(p[element].pos, 3);
190
191 __double_decode_array_cleanup(p[element].vel, 3);
192
193 __double_decode_array_cleanup(p[element].orientation, 4);
194
195 __double_decode_array_cleanup(p[element].rotation_rate, 3);
196
197 __double_decode_array_cleanup(p[element].accel, 3);
198 }
199 return 0;
200}
201
202int pose_t_decode(const void *buf, int offset, int maxlen, pose_t *p) {
203 int pos = 0, thislen;
204 int64_t hash = __pose_t_get_hash();
205
206 int64_t this_hash;
207 thislen =
208 __int64_t_decode_array(buf, offset + pos, maxlen - pos, &this_hash, 1);
209 if (thislen < 0)
210 return thislen;
211 else
212 pos += thislen;
213 if (this_hash != hash)
214 return -1;
215
216 thislen = __pose_t_decode_array(buf, offset + pos, maxlen - pos, p, 1);
217 if (thislen < 0)
218 return thislen;
219 else
220 pos += thislen;
221
222 return pos;
223}
224
225int pose_t_decode_cleanup(pose_t *p) {
226 return __pose_t_decode_array_cleanup(p, 1);
227}
228
229int __pose_t_clone_array(const pose_t *p, pose_t *q, int elements) {
230 int element;
231 for (element = 0; element < elements; element++) {
232
233 __int64_t_clone_array(&(p[element].utime), &(q[element].utime), 1);
234
235 __double_clone_array(p[element].pos, q[element].pos, 3);
236
237 __double_clone_array(p[element].vel, q[element].vel, 3);
238
239 __double_clone_array(p[element].orientation, q[element].orientation, 4);
240
241 __double_clone_array(p[element].rotation_rate, q[element].rotation_rate,
242 3);
243
244 __double_clone_array(p[element].accel, q[element].accel, 3);
245 }
246 return 0;
247}
248
249pose_t *pose_t_copy(const pose_t *p) {
250 pose_t *q = (pose_t *)malloc(sizeof(pose_t));
251 __pose_t_clone_array(p, q, 1);
252 return q;
253}
254
255void pose_t_destroy(pose_t *p) {
256 __pose_t_decode_array_cleanup(p, 1);
257 free(p);
258}
259
260int pose_t_publish(lcm_t *lc, const char *channel, const pose_t *p) {
261 int max_data_size = pose_t_encoded_size(p);
262 uint8_t *buf = (uint8_t *)malloc(max_data_size);
263 if (!buf)
264 return -1;
265 int data_size = pose_t_encode(buf, 0, max_data_size, p);
266 if (data_size < 0) {
267 free(buf);
268 return data_size;
269 }
270 int status = lcm_publish(lc, channel, buf, data_size);
271 free(buf);
272 return status;
273}
274
275struct _pose_t_subscription_t {
276 pose_t_handler_t user_handler;
277 void *userdata;
278 lcm_subscription_t *lc_h;
279};
280static void pose_t_handler_stub(const lcm_recv_buf_t *rbuf, const char *channel,
281 void *userdata) {
282 int status;
283 pose_t p;
284 memset(&p, 0, sizeof(pose_t));
285 status = pose_t_decode(rbuf->data, 0, rbuf->data_size, &p);
286 if (status < 0) {
287 fprintf(stderr, "error %d decoding pose_t!!!\n", status);
288 return;
289 }
290
291 pose_t_subscription_t *h = (pose_t_subscription_t *)userdata;
292 h->user_handler(rbuf, channel, &p, h->userdata);
293
294 pose_t_decode_cleanup(&p);
295}
296
297pose_t_subscription_t *pose_t_subscribe(lcm_t *lcm, const char *channel,
298 pose_t_handler_t f, void *userdata) {
299 pose_t_subscription_t *n =
300 (pose_t_subscription_t *)malloc(sizeof(pose_t_subscription_t));
301 n->user_handler = f;
302 n->userdata = userdata;
303 n->lc_h = lcm_subscribe(lcm, channel, pose_t_handler_stub, n);
304 if (n->lc_h == NULL) {
305 fprintf(stderr, "couldn't reg pose_t LCM handler!\n");
306 free(n);
307 return NULL;
308 }
309 return n;
310}
311
312int pose_t_subscription_set_queue_capacity(pose_t_subscription_t *subs,
313 int num_messages) {
314 return lcm_subscription_set_queue_capacity(subs->lc_h, num_messages);
315}
316
317int pose_t_unsubscribe(lcm_t *lcm, pose_t_subscription_t *hid) {
318 int status = lcm_unsubscribe(lcm, hid->lc_h);
319 if (0 != status) {
320 fprintf(stderr, "couldn't unsubscribe pose_t_handler %p!\n", hid);
321 return -1;
322 }
323 free(hid);
324 return 0;
325}