some documentation, info read after changing aperture
[alphamote.git] / foo.c
blob089d14d972dfbb21d939f04842a5dff705a4c807
1 /* This file is generated with usbsnoop2libusb.pl from a usbsnoop log file. */
2 /* Latest version of the script should be in http://iki.fi/lindi/usb/usbsnoop2libusb.pl */
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <assert.h>
7 #include <signal.h>
8 #include <ctype.h>
9 #include <usb.h>
10 #if 0
11 #include <linux/usbdevice_fs.h>
12 #define LIBUSB_AUGMENT
13 #include "libusb_augment.h"
14 #endif
16 struct usb_dev_handle *devh;
18 void release_usb_device(int dummy) {
19 int ret;
20 ret = usb_release_interface(devh, 0);
21 if (!ret)
22 printf("failed to release interface: %d\n", ret);
23 usb_close(devh);
24 if (!ret)
25 printf("failed to close interface: %d\n", ret);
26 exit(1);
29 void list_devices() {
30 struct usb_bus *bus;
31 for (bus = usb_get_busses(); bus; bus = bus->next) {
32 struct usb_device *dev;
34 for (dev = bus->devices; dev; dev = dev->next)
35 printf("0x%04x 0x%04x\n",
36 dev->descriptor.idVendor,
37 dev->descriptor.idProduct);
41 struct usb_device *find_device(int vendor, int product) {
42 struct usb_bus *bus;
44 for (bus = usb_get_busses(); bus; bus = bus->next) {
45 struct usb_device *dev;
47 for (dev = bus->devices; dev; dev = dev->next) {
48 if (dev->descriptor.idVendor == vendor
49 && dev->descriptor.idProduct == product)
50 return dev;
53 return NULL;
56 void print_bytes(char *bytes, int len) {
57 int i;
58 if (len > 0) {
59 for (i=0; i<len; i++) {
60 printf("%02x ", (int)((unsigned char)bytes[i]));
62 printf("\"");
63 for (i=0; i<len; i++) {
64 printf("%c", isprint(bytes[i]) ? bytes[i] : '.');
66 printf("\"");
71 int main(int argc, char **argv) {
72 int ret, vendor, product;
73 struct usb_device *dev;
74 char buf[65535], *endptr;
75 #if 0
76 usb_urb *isourb;
77 struct timeval isotv;
78 char isobuf[32768];
79 #endif
81 usb_init();
82 usb_set_debug(255);
83 usb_find_busses();
84 usb_find_devices();
86 if (argc!=3) {
87 printf("usage: %s vendorID productID\n", argv[0]);
88 printf("ID numbers of currently attached devices:\n");
89 list_devices();
90 exit(1);
92 vendor = strtol(argv[1], &endptr, 16);
93 if (*endptr != '\0') {
94 printf("invalid vendor id\n");
95 exit(1);
97 product = strtol(argv[2], &endptr, 16);
98 if (*endptr != '\0') {
99 printf("invalid product id\n");
100 exit(1);
102 dev = find_device(vendor, product);
103 assert(dev);
105 devh = usb_open(dev);
106 assert(devh);
108 signal(SIGTERM, release_usb_device);
110 ret = usb_get_driver_np(devh, 0, buf, sizeof(buf));
111 printf("usb_get_driver_np returned %d\n", ret);
112 if (ret == 0) {
113 printf("interface 0 already claimed by driver \"%s\", attempting to detach it\n", buf);
114 ret = usb_detach_kernel_driver_np(devh, 0);
115 printf("usb_detach_kernel_driver_np returned %d\n", ret);
117 ret = usb_claim_interface(devh, 0);
118 if (ret != 0) {
119 printf("claim failed with error %d\n", ret);
120 exit(1);
123 ret = usb_set_altinterface(devh, 0);
124 assert(ret >= 0);
126 ret = usb_get_descriptor(devh, 0x0000001, 0x0000000, buf, 0x0000012);
127 printf("1 get descriptor returned %d, bytes: ", ret);
128 print_bytes(buf, ret);
129 printf("\n");
130 usleep(4*1000);
131 ret = usb_get_descriptor(devh, 0x0000002, 0x0000000, buf, 0x0000009);
132 printf("2 get descriptor returned %d, bytes: ", ret);
133 print_bytes(buf, ret);
134 printf("\n");
135 usleep(3*1000);
136 ret = usb_get_descriptor(devh, 0x0000002, 0x0000000, buf, 0x0000027);
137 printf("3 get descriptor returned %d, bytes: ", ret);
138 print_bytes(buf, ret);
139 printf("\n");
140 usleep(4*1000);
141 ret = usb_release_interface(devh, 0);
142 if (ret != 0) printf("failed to release interface before set_configuration: %d\n", ret);
143 ret = usb_set_configuration(devh, 0x0000001);
144 printf("4 set configuration returned %d\n", ret);
145 ret = usb_claim_interface(devh, 0);
146 if (ret != 0) printf("claim after set_configuration failed with error %d\n", ret);
147 ret = usb_set_altinterface(devh, 0);
148 printf("4 set alternate setting returned %d\n", ret);
150 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x02\x10\x00\x00\x00\x00\x01\x00\x00\x00", 0x0000010);
151 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
152 printf("5 bulk write returned %d, bytes: ", ret);
153 print_bytes(buf, ret);
154 printf("\n");
155 usleep(4*1000);
156 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
157 printf("6 bulk read returned %d, bytes: ", ret);
158 print_bytes(buf, ret);
159 printf("\n");
160 usleep(5*1000);
161 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x01\x10\x01\x00\x00\x00", 0x000000c);
162 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
163 printf("7 bulk write returned %d, bytes: ", ret);
164 print_bytes(buf, ret);
165 printf("\n");
166 usleep(1*1000);
167 ret = usb_interrupt_read(devh, 0x00000083, buf, 0x0000008, 1000);
168 printf("8 interrupt read returned %d, bytes: ", ret);
169 print_bytes(buf, ret);
170 printf("\n");
171 usleep(4*1000);
172 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
173 printf("9 bulk read returned %d, bytes: ", ret);
174 print_bytes(buf, ret);
175 printf("\n");
176 usleep(3*1000);
177 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
178 printf("10 bulk read returned %d, bytes: ", ret);
179 print_bytes(buf, ret);
180 printf("\n");
181 usleep(5*1000);
182 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x04\x10\x02\x00\x00\x00", 0x000000c);
183 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
184 printf("11 bulk write returned %d, bytes: ", ret);
185 print_bytes(buf, ret);
186 printf("\n");
187 usleep(4*1000);
188 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
189 printf("12 bulk read returned %d, bytes: ", ret);
190 print_bytes(buf, ret);
191 printf("\n");
192 usleep(4*1000);
193 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
194 printf("13 bulk read returned %d, bytes: ", ret);
195 print_bytes(buf, ret);
196 printf("\n");
197 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x03\x10\x03\x00\x00\x00", 0x000000c);
198 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
199 printf("14 bulk write returned %d, bytes: ", ret);
200 print_bytes(buf, ret);
201 printf("\n");
202 usleep(4*1000);
203 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
204 printf("15 bulk read returned %d, bytes: ", ret);
205 print_bytes(buf, ret);
206 printf("\n");
207 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x02\x10\x00\x00\x00\x00\x01\x00\x00\x00", 0x0000010);
208 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
209 printf("16 bulk write returned %d, bytes: ", ret);
210 print_bytes(buf, ret);
211 printf("\n");
212 usleep(6*1000);
213 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
214 printf("17 bulk read returned %d, bytes: ", ret);
215 print_bytes(buf, ret);
216 printf("\n");
217 usleep(5*1000);
218 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x01\x10\x01\x00\x00\x00", 0x000000c);
219 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
220 printf("18 bulk write returned %d, bytes: ", ret);
221 print_bytes(buf, ret);
222 printf("\n");
223 usleep(3*1000);
224 ret = usb_interrupt_read(devh, 0x00000083, buf, 0x0000008, 1000);
225 printf("19 interrupt read returned %d, bytes: ", ret);
226 print_bytes(buf, ret);
227 printf("\n");
228 usleep(3*1000);
229 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
230 printf("20 bulk read returned %d, bytes: ", ret);
231 print_bytes(buf, ret);
232 printf("\n");
233 usleep(4*1000);
234 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
235 printf("21 bulk read returned %d, bytes: ", ret);
236 print_bytes(buf, ret);
237 printf("\n");
238 usleep(4*1000);
239 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x04\x10\x02\x00\x00\x00", 0x000000c);
240 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
241 printf("22 bulk write returned %d, bytes: ", ret);
242 print_bytes(buf, ret);
243 printf("\n");
244 usleep(8*1000);
245 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
246 printf("23 bulk read returned %d, bytes: ", ret);
247 print_bytes(buf, ret);
248 printf("\n");
249 usleep(4*1000);
250 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
251 printf("24 bulk read returned %d, bytes: ", ret);
252 print_bytes(buf, ret);
253 printf("\n");
254 usleep(17*1000);
255 memcpy(buf, "\x18\x00\x00\x00\x01\x00\x01\x92\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0x0000018);
256 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000018, 1000);
257 printf("25 bulk write returned %d, bytes: ", ret);
258 print_bytes(buf, ret);
259 printf("\n");
260 usleep(10*1000);
261 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
262 printf("26 bulk read returned %d, bytes: ", ret);
263 print_bytes(buf, ret);
264 printf("\n");
265 usleep(9*1000);
266 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
267 printf("27 bulk read returned %d, bytes: ", ret);
268 print_bytes(buf, ret);
269 printf("\n");
270 usleep(10*1000);
271 memcpy(buf, "\x18\x00\x00\x00\x01\x00\x01\x92\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0x0000018);
272 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000018, 1000);
273 printf("28 bulk write returned %d, bytes: ", ret);
274 print_bytes(buf, ret);
275 printf("\n");
276 usleep(4*1000);
277 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
278 printf("29 bulk read returned %d, bytes: ", ret);
279 print_bytes(buf, ret);
280 printf("\n");
281 usleep(4*1000);
282 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
283 printf("30 bulk read returned %d, bytes: ", ret);
284 print_bytes(buf, ret);
285 printf("\n");
286 usleep(4*1000);
287 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x02\x92\x05\x00\x00\x00", 0x000000c);
288 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
289 printf("31 bulk write returned %d, bytes: ", ret);
290 print_bytes(buf, ret);
291 printf("\n");
292 usleep(6*1000);
293 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
294 printf("32 bulk read returned %d, bytes: ", ret);
295 print_bytes(buf, ret);
296 printf("\n");
297 usleep(7*1000);
298 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
299 printf("33 bulk read returned %d, bytes: ", ret);
300 print_bytes(buf, ret);
301 printf("\n");
302 usleep(6*1000);
303 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x03\x92\x06\x00\x00\x00\x01\xd2\x00\x00", 0x0000010);
304 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
305 printf("34 bulk write returned %d, bytes: ", ret);
306 print_bytes(buf, ret);
307 printf("\n");
308 usleep(5*1000);
309 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
310 printf("35 bulk read returned %d, bytes: ", ret);
311 print_bytes(buf, ret);
312 printf("\n");
313 usleep(4*1000);
314 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
315 printf("36 bulk read returned %d, bytes: ", ret);
316 print_bytes(buf, ret);
317 printf("\n");
318 usleep(5*1000);
319 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x03\x92\x07\x00\x00\x00\x03\xd2\x00\x00", 0x0000010);
320 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
321 printf("37 bulk write returned %d, bytes: ", ret);
322 print_bytes(buf, ret);
323 printf("\n");
324 usleep(7*1000);
325 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
326 printf("38 bulk read returned %d, bytes: ", ret);
327 print_bytes(buf, ret);
328 printf("\n");
329 usleep(5*1000);
330 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
331 printf("39 bulk read returned %d, bytes: ", ret);
332 print_bytes(buf, ret);
333 printf("\n");
334 usleep(6*1000);
335 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x03\x92\x08\x00\x00\x00\x05\x50\x00\x00", 0x0000010);
336 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
337 printf("40 bulk write returned %d, bytes: ", ret);
338 print_bytes(buf, ret);
339 printf("\n");
340 usleep(5*1000);
341 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
342 printf("41 bulk read returned %d, bytes: ", ret);
343 print_bytes(buf, ret);
344 printf("\n");
345 usleep(4*1000);
346 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
347 printf("42 bulk read returned %d, bytes: ", ret);
348 print_bytes(buf, ret);
349 printf("\n");
350 usleep(10*1000);
351 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x03\x92\x09\x00\x00\x00\x13\x50\x00\x00", 0x0000010);
352 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
353 printf("43 bulk write returned %d, bytes: ", ret);
354 print_bytes(buf, ret);
355 printf("\n");
356 usleep(4*1000);
357 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
358 printf("44 bulk read returned %d, bytes: ", ret);
359 print_bytes(buf, ret);
360 printf("\n");
361 usleep(4*1000);
362 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
363 printf("45 bulk read returned %d, bytes: ", ret);
364 print_bytes(buf, ret);
365 printf("\n");
366 usleep(6*1000);
367 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x03\x92\x0a\x00\x00\x00\x04\x50\x00\x00", 0x0000010);
368 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
369 printf("46 bulk write returned %d, bytes: ", ret);
370 print_bytes(buf, ret);
371 printf("\n");
372 usleep(5*1000);
373 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
374 printf("47 bulk read returned %d, bytes: ", ret);
375 print_bytes(buf, ret);
376 printf("\n");
377 usleep(6*1000);
378 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
379 printf("48 bulk read returned %d, bytes: ", ret);
380 print_bytes(buf, ret);
381 printf("\n");
382 usleep(5*1000);
383 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x06\x92\x0b\x00\x00\x00\x10\xd2\x00\x00", 0x0000010);
384 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
385 printf("49 bulk write returned %d, bytes: ", ret);
386 print_bytes(buf, ret);
387 printf("\n");
388 usleep(4*1000);
389 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
390 printf("50 bulk read returned %d, bytes: ", ret);
391 print_bytes(buf, ret);
392 printf("\n");
393 usleep(4*1000);
394 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
395 printf("51 bulk read returned %d, bytes: ", ret);
396 print_bytes(buf, ret);
397 printf("\n");
398 usleep(5*1000);
399 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x03\x92\x0c\x00\x00\x00\x11\xd2\x00\x00", 0x0000010);
400 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
401 printf("52 bulk write returned %d, bytes: ", ret);
402 print_bytes(buf, ret);
403 printf("\n");
404 usleep(6*1000);
405 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
406 printf("53 bulk read returned %d, bytes: ", ret);
407 print_bytes(buf, ret);
408 printf("\n");
409 usleep(6*1000);
410 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
411 printf("54 bulk read returned %d, bytes: ", ret);
412 print_bytes(buf, ret);
413 printf("\n");
414 usleep(6*1000);
415 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x06\x92\x0d\x00\x00\x00\x0f\xd2\x00\x00", 0x0000010);
416 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
417 printf("55 bulk write returned %d, bytes: ", ret);
418 print_bytes(buf, ret);
419 printf("\n");
420 usleep(3*1000);
421 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
422 printf("56 bulk read returned %d, bytes: ", ret);
423 print_bytes(buf, ret);
424 printf("\n");
425 usleep(5*1000);
426 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
427 printf("57 bulk read returned %d, bytes: ", ret);
428 print_bytes(buf, ret);
429 printf("\n");
430 usleep(4*1000);
431 memcpy(buf, "\x18\x00\x00\x00\x01\x00\x01\x92\x0e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0x0000018);
432 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000018, 1000);
433 printf("58 bulk write returned %d, bytes: ", ret);
434 print_bytes(buf, ret);
435 printf("\n");
436 usleep(4*1000);
437 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
438 printf("59 bulk read returned %d, bytes: ", ret);
439 print_bytes(buf, ret);
440 printf("\n");
441 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
442 printf("60 bulk read returned %d, bytes: ", ret);
443 print_bytes(buf, ret);
444 printf("\n");
445 // get info (bulk read 62)
446 usleep(6*1000);
447 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x08\x92\x0f\x00\x00\x00", 0x000000c);
448 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
449 printf("61 bulk write returned %d, bytes: ", ret);
450 print_bytes(buf, ret);
451 printf("\n");
452 usleep(4*1000);
453 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
454 printf("62 bulk read returned %d, bytes: ", ret);
455 print_bytes(buf, ret);
456 printf("\n");
457 usleep(4*1000);
458 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
459 printf("63 bulk read returned %d, bytes: ", ret);
460 print_bytes(buf, ret);
461 printf("\n");
462 // 9207: close down aperture
463 usleep(8*1000);
464 memcpy(buf, "\x10\x00\x00\x00\x01\x00\x07\x92\x10\x01\x00\x00\x07\x50\x00\x00", 0x0000010);
465 ret = usb_bulk_write(devh, 0x00000001, buf, 0x0000010, 1000);
466 printf("1147 bulk write returned %d, bytes: ", ret);
467 print_bytes(buf, ret);
468 printf("\n");
469 usleep(4*1000);
470 memcpy(buf, "\x0d\x00\x00\x00\x02\x00\x07\x92\x10\x01\x00\x00\x01", 0x000000d);
471 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000d, 1000);
472 printf("1148 bulk write returned %d, bytes: ", ret);
473 print_bytes(buf, ret);
474 printf("\n");
475 usleep(3*1000);
476 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
477 printf("1149 bulk read returned %d, bytes: ", ret);
478 print_bytes(buf, ret);
479 printf("\n");
481 // get info (bulk read 62)
482 usleep(600*1000);
483 memcpy(buf, "\x0c\x00\x00\x00\x01\x00\x08\x92\x0f\x00\x00\x00", 0x000000c);
484 ret = usb_bulk_write(devh, 0x00000001, buf, 0x000000c, 1000);
485 printf("61 bulk write returned %d, bytes: ", ret);
486 print_bytes(buf, ret);
487 printf("\n");
488 usleep(4*1000);
489 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
490 printf("62 bulk read returned %d, bytes: ", ret);
491 print_bytes(buf, ret);
492 printf("\n");
493 usleep(4*1000);
494 ret = usb_bulk_read(devh, 0x00000082, buf, 0x0000200, 1030);
495 printf("63 bulk read returned %d, bytes: ", ret);
496 print_bytes(buf, ret);
497 printf("\n");
498 printf("\n");
499 ret = usb_release_interface(devh, 0);
500 assert(ret == 0);
501 ret = usb_close(devh);
502 assert(ret == 0);
503 return 0;