Numworks Epsilon
1.4.1
Graphing Calculator Operating System
ringbuf.h
Go to the documentation of this file.
1
/*
2
* This file is part of the MicroPython project, http://micropython.org/
3
*
4
* The MIT License (MIT)
5
*
6
* Copyright (c) 2016 Paul Sokolovsky
7
*
8
* Permission is hereby granted, free of charge, to any person obtaining a copy
9
* of this software and associated documentation files (the "Software"), to deal
10
* in the Software without restriction, including without limitation the rights
11
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
* copies of the Software, and to permit persons to whom the Software is
13
* furnished to do so, subject to the following conditions:
14
*
15
* The above copyright notice and this permission notice shall be included in
16
* all copies or substantial portions of the Software.
17
*
18
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
* THE SOFTWARE.
25
*/
26
#ifndef MICROPY_INCLUDED_PY_RINGBUF_H
27
#define MICROPY_INCLUDED_PY_RINGBUF_H
28
29
typedef
struct
_ringbuf_t
{
30
uint8_t
*
buf
;
31
uint16_t
size
;
32
uint16_t
iget
;
33
uint16_t
iput
;
34
}
ringbuf_t
;
35
36
// Static initialization:
37
// byte buf_array[N];
38
// ringbuf_t buf = {buf_array, sizeof(buf_array)};
39
40
// Dynamic initialization. This creates root pointer!
41
#define ringbuf_alloc(r, sz) \
42
{ \
43
(r)->buf = m_new(uint8_t, sz); \
44
(r)->size = sz; \
45
(r)->iget = (r)->iput = 0; \
46
}
47
48
static
inline
int
ringbuf_get(
ringbuf_t
*r) {
49
if
(r->
iget
== r->
iput
) {
50
return
-1;
51
}
52
uint8_t
v = r->
buf
[r->
iget
++];
53
if
(r->
iget
>= r->
size
) {
54
r->
iget
= 0;
55
}
56
return
v;
57
}
58
59
static
inline
int
ringbuf_put(
ringbuf_t
*r,
uint8_t
v) {
60
uint32_t
iput_new = r->
iput
+ 1;
61
if
(iput_new >= r->
size
) {
62
iput_new = 0;
63
}
64
if
(iput_new == r->
iget
) {
65
return
-1;
66
}
67
r->
buf
[r->
iput
] = v;
68
r->
iput
= iput_new;
69
return
0;
70
}
71
72
#endif // MICROPY_INCLUDED_PY_RINGBUF_H
_ringbuf_t::iget
uint16_t iget
Definition:
ringbuf.h:32
_ringbuf_t::buf
uint8_t * buf
Definition:
ringbuf.h:30
_ringbuf_t
Definition:
ringbuf.h:29
uint16_t
unsigned short uint16_t
Definition:
stdint.h:5
uint8_t
unsigned char uint8_t
Definition:
stdint.h:4
_ringbuf_t::iput
uint16_t iput
Definition:
ringbuf.h:33
_ringbuf_t::size
uint16_t size
Definition:
ringbuf.h:31
uint32_t
unsigned int uint32_t
Definition:
stdint.h:6
ringbuf_t
struct _ringbuf_t ringbuf_t
epsilon
python
src
py
ringbuf.h
Generated by
1.8.14