|
4 | 4 | */ |
5 | 5 |
|
6 | 6 | /* |
7 | | - * Copyright (c) 2023 Tilen MAJERLE |
| 7 | + * Copyright (c) 2024 Tilen MAJERLE |
8 | 8 | * |
9 | 9 | * Permission is hereby granted, free of charge, to any person |
10 | 10 | * obtaining a copy of this software and associated documentation |
|
29 | 29 | * This file is part of LwRB - Lightweight ring buffer library. |
30 | 30 | * |
31 | 31 | * Author: Tilen MAJERLE <[email protected]> |
32 | | - * Version: v3.1.0 |
| 32 | + * Version: v3.2.0 |
33 | 33 | */ |
34 | 34 | #ifndef LWRB_HDR_H |
35 | 35 | #define LWRB_HDR_H |
@@ -99,25 +99,30 @@ typedef void (*lwrb_evt_fn)(struct lwrb* buff, lwrb_evt_type_t evt, lwrb_sz_t bp |
99 | 99 | typedef struct lwrb { |
100 | 100 | uint8_t* buff; /*!< Pointer to buffer data. Buffer is considered initialized when `buff != NULL` and `size > 0` */ |
101 | 101 | lwrb_sz_t size; /*!< Size of buffer data. Size of actual buffer is `1` byte less than value holds */ |
102 | | - lwrb_sz_atomic_t r; /*!< Next read pointer. Buffer is considered empty when `r == w` and full when `w == r - 1` */ |
103 | | - lwrb_sz_atomic_t w; /*!< Next write pointer. Buffer is considered empty when `r == w` and full when `w == r - 1` */ |
104 | | - lwrb_evt_fn evt_fn; /*!< Pointer to event callback function */ |
| 102 | + lwrb_sz_atomic_t r_ptr; /*!< Next read pointer. |
| 103 | + Buffer is considered empty when `r == w` and full when `w == r - 1` */ |
| 104 | + lwrb_sz_atomic_t w_ptr; /*!< Next write pointer. |
| 105 | + Buffer is considered empty when `r == w` and full when `w == r - 1` */ |
| 106 | + lwrb_evt_fn evt_fn; /*!< Pointer to event callback function */ |
| 107 | + void* arg; /*!< Event custom user argument */ |
105 | 108 | } lwrb_t; |
106 | 109 |
|
107 | 110 | uint8_t lwrb_init(lwrb_t* buff, void* buffdata, lwrb_sz_t size); |
108 | 111 | uint8_t lwrb_is_ready(lwrb_t* buff); |
109 | 112 | void lwrb_free(lwrb_t* buff); |
110 | 113 | void lwrb_reset(lwrb_t* buff); |
111 | 114 | void lwrb_set_evt_fn(lwrb_t* buff, lwrb_evt_fn fn); |
| 115 | +void lwrb_set_arg(lwrb_t* buff, void* arg); |
| 116 | +void* lwrb_get_arg(lwrb_t* buff); |
112 | 117 |
|
113 | 118 | /* Read/Write functions */ |
114 | 119 | lwrb_sz_t lwrb_write(lwrb_t* buff, const void* data, lwrb_sz_t btw); |
115 | 120 | lwrb_sz_t lwrb_read(lwrb_t* buff, void* data, lwrb_sz_t btr); |
116 | 121 | lwrb_sz_t lwrb_peek(const lwrb_t* buff, lwrb_sz_t skip_count, void* data, lwrb_sz_t btp); |
117 | 122 |
|
118 | 123 | /* Extended read/write functions */ |
119 | | -uint8_t lwrb_write_ex(lwrb_t* buff, const void* data, lwrb_sz_t btw, lwrb_sz_t* bw, uint16_t flags); |
120 | | -uint8_t lwrb_read_ex(lwrb_t* buff, void* data, lwrb_sz_t btr, lwrb_sz_t* br, uint16_t flags); |
| 124 | +uint8_t lwrb_write_ex(lwrb_t* buff, const void* data, lwrb_sz_t btw, lwrb_sz_t* bwritten, uint16_t flags); |
| 125 | +uint8_t lwrb_read_ex(lwrb_t* buff, void* data, lwrb_sz_t btr, lwrb_sz_t* bread, uint16_t flags); |
121 | 126 |
|
122 | 127 | /* Buffer size information */ |
123 | 128 | lwrb_sz_t lwrb_get_free(const lwrb_t* buff); |
|
0 commit comments