1 /* $OpenBSD: build.c,v 1.3 2005/05/17 18:48:52 jason Exp $ */
2
3 /*
4 * Copyright (c) 2004 Theo de Raadt <deraadt@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 #include <sys/types.h>
19 #include <sys/uio.h>
20 #include <fcntl.h>
21 #include <sys/param.h>
22
23 #include <dev/usb/ezload.h>
24 #include "uyap_firmware.h"
25 #define FILENAME "uyap"
26
27 int
28 main(int argc, char *argv[])
29 {
30 const struct ezdata *ptr;
31 u_int16_t address;
32 int fd;
33
34 printf("creating %s length %d\n", FILENAME, sizeof uyap_firmware);
35 fd = open(FILENAME, O_WRONLY|O_CREAT|O_TRUNC, 0644);
36 if (fd == -1)
37 err(1, "%s", FILENAME);
38
39 for (ptr = uyap_firmware; ; ptr++) {
40 struct iovec iov[3];
41 u_int8_t length;
42 ssize_t tlen, rlen;
43
44 length = ptr->length;
45 iov[0].iov_base = &length;
46 iov[0].iov_len = 1;
47
48 address = htole16(ptr->address);
49 iov[1].iov_base = &address;
50 iov[1].iov_len = 2;
51
52 iov[2].iov_base = ptr->data;
53 iov[2].iov_len = ptr->length;
54
55 tlen = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len;
56
57 rlen = writev(fd, iov, 3);
58 if (rlen == -1)
59 err(1, "%s", FILENAME);
60 if (rlen != tlen)
61 err(1, "%s: short write", FILENAME);
62
63 if (ptr->length == 0)
64 break;
65 }
66
67 return 0;
68 }