1 // Copyright 2016 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #pragma once
6 
7 #include <zircon/compiler.h>
8 #include <zircon/types.h>
9 
10 #include <stdbool.h>
11 #include <stddef.h>
12 #include <stdint.h>
13 #include <sys/types.h>
14 #include <threads.h>
15 
16 __BEGIN_CDECLS;
17 
18 #ifndef HID_FIFO_SIZE
19 #define HID_FIFO_SIZE 4096
20 #endif
21 #define HID_FIFO_MASK (HID_FIFO_SIZE-1)
22 
23 typedef struct {
24     uint8_t buf[HID_FIFO_SIZE];
25     uint32_t head;
26     uint32_t tail;
27     bool empty;
28     mtx_t lock;
29 } zx_hid_fifo_t;
30 
31 zx_status_t zx_hid_fifo_create(zx_hid_fifo_t** fifo);
32 void zx_hid_fifo_init(zx_hid_fifo_t* fifo);
33 size_t zx_hid_fifo_size(zx_hid_fifo_t* fifo);
34 ssize_t zx_hid_fifo_peek(zx_hid_fifo_t* fifo, void* out);
35 ssize_t zx_hid_fifo_read(zx_hid_fifo_t* fifo, void* buf, size_t len);
36 ssize_t zx_hid_fifo_write(zx_hid_fifo_t* fifo, const void* buf, size_t len);
37 
38 void zx_hid_fifo_dump(zx_hid_fifo_t* fifo);
39 
40 __END_CDECLS;
41