1+ /*
2+ Copyright (c) 2020 Arduino. All right reserved.
3+
4+ This library is free software; you can redistribute it and/or
5+ modify it under the terms of the GNU Lesser General Public
6+ License as published by the Free Software Foundation; either
7+ version 2.1 of the License, or (at your option) any later version.
8+
9+ This library is distributed in the hope that it will be useful,
10+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+ See the GNU Lesser General Public License for more details.
13+
14+ You should have received a copy of the GNU Lesser General Public
15+ License along with this library; if not, write to the Free Software
16+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+ */
18+
19+ #ifdef __cplusplus
20+
21+ #ifndef _SAFE_RING_BUFFER_
22+ #define _SAFE_RING_BUFFER_
23+
24+ #include < api/RingBuffer.h>
25+ #include " sync.h"
26+
27+ namespace arduino {
28+
29+ template <int N>
30+ class SafeRingBufferN : public RingBufferN <N>
31+ {
32+ public:
33+ int read_char ();
34+ void store_char ( uint8_t c ) ;
35+ };
36+
37+ typedef SafeRingBufferN<SERIAL_BUFFER_SIZE> SafeRingBuffer;
38+
39+ template <int N>
40+ int SafeRingBufferN<N>::read_char() {
41+ synchronized {
42+ return RingBufferN<N>::read_char ();
43+ }
44+ }
45+
46+ template <int N>
47+ void SafeRingBufferN<N>::store_char(uint8_t c) {
48+ synchronized {
49+ RingBufferN<N>::store_char (c);
50+ }
51+ }
52+
53+ }
54+
55+ #endif /* _SAFE_RING_BUFFER_ */
56+ #endif /* __cplusplus */
0 commit comments