1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
97
98
99
103
104
105
108
109
110
113
114
115
122
123
124
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/* ... */
/* ... */
#ifndef HCI_DUMP_H
#define HCI_DUMP_H
#include <stdint.h>
#include <stdarg.h>
#include "btstack_bool.h"
#ifdef __AVR__
#include <avr/pgmspace.h>
#endif
#if defined __cplusplus
extern "C" {
#endif
#define HCI_DUMP_LOG_LEVEL_DEBUG 0
#define HCI_DUMP_LOG_LEVEL_INFO 1
#define HCI_DUMP_LOG_LEVEL_ERROR 2
#define HCI_DUMP_HEADER_SIZE_PACKETLOGGER 13
#define HCI_DUMP_HEADER_SIZE_BLUEZ 13
#define HCI_DUMP_HEADER_SIZE_BTSNOOP 24
#define HCI_DUMP_MAX_MESSAGE_LEN 256
7 defines
typedef enum {
HCI_DUMP_INVALID = 0,
HCI_DUMP_BLUEZ,
HCI_DUMP_PACKETLOGGER,
HCI_DUMP_BTSNOOP,
...} hci_dump_format_t;
typedef struct {
void (*reset)(void);
void (*log_packet)(uint8_t packet_type, uint8_t in, uint8_t *packet, uint16_t len);
void (*log_message)(int log_level, const char * format, va_list argptr);
#ifdef __AVR__ \
void (*log_message_P)(int log_level, PGM_P * format, va_list argptr);
#endif
...} hci_dump_t;
/* ... */
void hci_dump_init(const hci_dump_t * hci_dump_impl);
/* ... */
void hci_dump_enable_packet_log(bool enabled);
/* ... */
void hci_dump_enable_log_level(int log_level, int enable);
/* ... */
void hci_dump_set_max_packets(int packets);
/* ... */
void hci_dump_packet(uint8_t packet_type, uint8_t in, uint8_t *packet, uint16_t len);
/* ... */
void hci_dump_log(int log_level, const char * format, ...)
#ifdef __GNUC__
__attribute__ ((format (__printf__, 2, 3)))
#endif
;
#ifdef __AVR__
/* ... */
void hci_dump_log_P(int log_level, PGM_P format, ...)
#ifdef __GNUC__
__attribute__ ((format (__printf__, 2, 3)))
#endif
;/* ... */
#endif
/* ... */
void hci_dump_btstack_event(const uint8_t *packet, uint16_t len);
/* ... */
void hci_dump_setup_header_packetlogger(uint8_t * buffer, uint32_t tv_sec, uint32_t tv_us, uint8_t packet_type, uint8_t in, uint16_t len);
/* ... */
void hci_dump_setup_header_bluez(uint8_t * buffer, uint32_t tv_sec, uint32_t tv_us, uint8_t packet_type, uint8_t in, uint16_t len);
/* ... */
void hci_dump_setup_header_btsnoop(uint8_t * buffer, uint32_t ts_usec_high, uint32_t ts_usec_low, uint32_t cumulative_drops, uint8_t packet_type, uint8_t in, uint16_t len);
#if defined __cplusplus
}extern "C" { ... }
#endif/* ... */
#endif