configure.ac: add libusb/libusbx support (for xpp)
[dahdi/tools.git] / xpp / hexfile.h
1 /*
2  * Written by Oron Peled <oron@actcom.co.il>
3  * Copyright (C) 2006, 2007, 2008, Xorcom
4  *
5  * All rights reserved.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  */
22
23 #ifndef PARSE_HEXFILE_H
24 #define PARSE_HEXFILE_H
25
26 #include <stdarg.h>
27 #include <stdio.h>
28 #include <stdint.h>
29 #include <sys/param.h>
30 #include <syslog.h>
31 #define PACKED  __attribute__((packed))
32 #define ZERO_SIZE       0
33
34 /* Record types in hexfile */
35 enum {
36         TT_DATA         = 0,
37         TT_EOF          = 1,
38         TT_EXT_SEG      = 2,
39         TT_START_SEG    = 3,
40         TT_EXT_LIN      = 4,
41         TT_START_LIN    = 5,
42         TT_NO_SUCH_TT
43 };
44
45 #pragma pack(1)
46 struct hexline {
47         union {
48                 uint8_t         raw[ZERO_SIZE];
49                 struct content {
50                         struct header {
51                                 uint8_t         ll;     /* len */
52                                 uint16_t        offset; /* offset */
53                                 uint8_t         tt;     /* type */
54                         } PACKED header;
55                         struct tt_data {
56                                 uint8_t         data[ZERO_SIZE];
57                         } tt_data;
58                 } PACKED content;
59         } d;
60 } PACKED;
61 #pragma pack()
62
63 struct hexdata {
64         unsigned int            maxlines;
65         unsigned int            last_line;
66         int                     got_eof;
67         char                    fname[PATH_MAX];
68         char                    version_info[BUFSIZ];
69         struct hexline          *lines[ZERO_SIZE];
70 };
71
72
73 __BEGIN_DECLS
74
75 typedef void (*parse_hexfile_report_func_t)(int level, const char *msg, ...)
76 #ifdef  __GNUC__
77         __attribute__((format(printf,2,3)));
78 #endif
79         ;
80
81 parse_hexfile_report_func_t parse_hexfile_set_reporting(parse_hexfile_report_func_t rf);
82 void free_hexdata(struct hexdata *hexdata);
83 struct hexdata *parse_hexfile(const char *fname, unsigned int maxlines);
84 int dump_hexfile(struct hexdata *hexdata, const char *outfile);
85 int dump_hexfile2(struct hexdata *hexdata, const char *outfile, uint8_t maxwidth);
86 void dump_binary(struct hexdata *hexdata, const char *outfile);
87 void gen_hexline(const uint8_t *data, uint16_t addr, size_t len, FILE *output);
88 int bsd_checksum(struct hexdata *hexdata);
89 __END_DECLS
90
91 #endif