diff options
author | 2024-06-13 18:19:08 +0800 | |
---|---|---|
committer | 2024-06-15 14:26:58 +0800 | |
commit | 1fb859960b3e9c17a78754c6321da85f6b7b01b6 (patch) | |
tree | a0ac5866cc6a1677bc73d2f033a877172920cece /lcmtype/pose_t.cpp | |
parent | 7eba07d667cf1a7613fed1170e884a3a43123fe1 (diff) | |
download | WheelCtrl-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.cpp | 325 |
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 | |||
10 | static int __pose_t_hash_computed; | ||
11 | static int64_t __pose_t_hash; | ||
12 | |||
13 | int64_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 | |||
30 | int64_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 | |||
39 | int __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 | |||
90 | int 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 | |||
109 | int __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 | |||
128 | int pose_t_encoded_size(const pose_t *p) { | ||
129 | return 8 + __pose_t_encoded_array_size(p, 1); | ||
130 | } | ||
131 | |||
132 | int __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 | |||
183 | int __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 | |||
202 | int 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 | |||
225 | int pose_t_decode_cleanup(pose_t *p) { | ||
226 | return __pose_t_decode_array_cleanup(p, 1); | ||
227 | } | ||
228 | |||
229 | int __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 | |||
249 | pose_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 | |||
255 | void pose_t_destroy(pose_t *p) { | ||
256 | __pose_t_decode_array_cleanup(p, 1); | ||
257 | free(p); | ||
258 | } | ||
259 | |||
260 | int 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 | |||
275 | struct _pose_t_subscription_t { | ||
276 | pose_t_handler_t user_handler; | ||
277 | void *userdata; | ||
278 | lcm_subscription_t *lc_h; | ||
279 | }; | ||
280 | static 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 | |||
297 | pose_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 | |||
312 | int 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 | |||
317 | int 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 | } | ||