Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ImgBuffer.h@0:27e403b8981e, 2012-04-28 (annotated)
- Committer:
- stretch
- Date:
- Sat Apr 28 21:09:44 2012 +0000
- Revision:
- 0:27e403b8981e
Initial Public Release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stretch | 0:27e403b8981e | 1 | #ifndef IMGBUFFER_H |
stretch | 0:27e403b8981e | 2 | #define IMGBUFFER_H |
stretch | 0:27e403b8981e | 3 | |
stretch | 0:27e403b8981e | 4 | #define MAX_IMG_BUF 1024 |
stretch | 0:27e403b8981e | 5 | |
stretch | 0:27e403b8981e | 6 | class ImgBuffer { |
stretch | 0:27e403b8981e | 7 | public: |
stretch | 0:27e403b8981e | 8 | ImgBuffer() { |
stretch | 0:27e403b8981e | 9 | write = 0; |
stretch | 0:27e403b8981e | 10 | read = 0; |
stretch | 0:27e403b8981e | 11 | size = MAX_IMG_BUF + 1; |
stretch | 0:27e403b8981e | 12 | }; |
stretch | 0:27e403b8981e | 13 | |
stretch | 0:27e403b8981e | 14 | bool isFull() { |
stretch | 0:27e403b8981e | 15 | return ((write + 1) % size == read); |
stretch | 0:27e403b8981e | 16 | }; |
stretch | 0:27e403b8981e | 17 | |
stretch | 0:27e403b8981e | 18 | bool isEmpty() { |
stretch | 0:27e403b8981e | 19 | return (read == write); |
stretch | 0:27e403b8981e | 20 | }; |
stretch | 0:27e403b8981e | 21 | |
stretch | 0:27e403b8981e | 22 | void queue(uint8_t k) { |
stretch | 0:27e403b8981e | 23 | if (isFull()) { |
stretch | 0:27e403b8981e | 24 | read++; |
stretch | 0:27e403b8981e | 25 | read %= size; |
stretch | 0:27e403b8981e | 26 | } |
stretch | 0:27e403b8981e | 27 | buf[write++] = k; |
stretch | 0:27e403b8981e | 28 | write %= size; |
stretch | 0:27e403b8981e | 29 | } |
stretch | 0:27e403b8981e | 30 | |
stretch | 0:27e403b8981e | 31 | uint16_t available() { |
stretch | 0:27e403b8981e | 32 | return (write >= read) ? write - read : size - read + write; |
stretch | 0:27e403b8981e | 33 | }; |
stretch | 0:27e403b8981e | 34 | |
stretch | 0:27e403b8981e | 35 | bool dequeue(uint8_t * c) { |
stretch | 0:27e403b8981e | 36 | if (!isEmpty()) { |
stretch | 0:27e403b8981e | 37 | *c = buf[read++]; |
stretch | 0:27e403b8981e | 38 | read %= size; |
stretch | 0:27e403b8981e | 39 | } |
stretch | 0:27e403b8981e | 40 | return(!isEmpty()); |
stretch | 0:27e403b8981e | 41 | }; |
stretch | 0:27e403b8981e | 42 | |
stretch | 0:27e403b8981e | 43 | void clear() { |
stretch | 0:27e403b8981e | 44 | read = write; |
stretch | 0:27e403b8981e | 45 | }; |
stretch | 0:27e403b8981e | 46 | |
stretch | 0:27e403b8981e | 47 | private: |
stretch | 0:27e403b8981e | 48 | volatile uint16_t write; |
stretch | 0:27e403b8981e | 49 | volatile uint16_t read; |
stretch | 0:27e403b8981e | 50 | uint16_t size; |
stretch | 0:27e403b8981e | 51 | uint8_t buf[MAX_IMG_BUF + 1]; |
stretch | 0:27e403b8981e | 52 | }; |
stretch | 0:27e403b8981e | 53 | |
stretch | 0:27e403b8981e | 54 | #endif |