Fix #4881 (#4884)
[opentx.git] / radio / src / dmafifo.h
blob74226d1d87ac5d2340b43cfe648d6a521c83ccb3
1 /*
2 * Copyright (C) OpenTX
4 * Based on code named
5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
21 #ifndef _DMA_FIFO_H_
22 #define _DMA_FIFO_H_
24 #include "definitions.h"
26 template <int N>
27 class DMAFifo
29 public:
30 DMAFifo(DMA_Stream_TypeDef * stream):
31 stream(stream),
32 ridx(0)
36 void clear()
38 ridx = 0;
41 uint32_t size()
43 return N;
46 uint8_t last(int index)
48 return fifo[(2*N - stream->NDTR - index) & (N-1)];
51 bool isEmpty()
53 #if defined(SIMU)
54 return true;
55 #endif
56 return (ridx == N - stream->NDTR);
59 bool pop(uint8_t & element)
61 if (isEmpty()) {
62 return false;
64 else {
65 element = fifo[ridx];
66 ridx = (ridx+1) & (N-1);
67 return true;
71 uint8_t * buffer()
73 return fifo;
76 protected:
77 uint8_t fifo[N];
78 DMA_Stream_TypeDef * stream;
79 volatile uint32_t ridx;
82 #endif // _DMA_FIFO_H_