adding additional features

Committer:
sam_grove
Date:
Wed Jun 26 20:35:10 2013 +0000
Revision:
0:2d90573426d7
add dynamic connection and terminal status feedback to the embedded application

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:2d90573426d7 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
sam_grove 0:2d90573426d7 2 *
sam_grove 0:2d90573426d7 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
sam_grove 0:2d90573426d7 4 * and associated documentation files (the "Software"), to deal in the Software without
sam_grove 0:2d90573426d7 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
sam_grove 0:2d90573426d7 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
sam_grove 0:2d90573426d7 7 * Software is furnished to do so, subject to the following conditions:
sam_grove 0:2d90573426d7 8 *
sam_grove 0:2d90573426d7 9 * The above copyright notice and this permission notice shall be included in all copies or
sam_grove 0:2d90573426d7 10 * substantial portions of the Software.
sam_grove 0:2d90573426d7 11 *
sam_grove 0:2d90573426d7 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
sam_grove 0:2d90573426d7 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
sam_grove 0:2d90573426d7 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
sam_grove 0:2d90573426d7 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
sam_grove 0:2d90573426d7 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
sam_grove 0:2d90573426d7 17 */
sam_grove 0:2d90573426d7 18
sam_grove 0:2d90573426d7 19 #ifndef CIRCBUFFER_H
sam_grove 0:2d90573426d7 20 #define CIRCBUFFER_H
sam_grove 0:2d90573426d7 21
sam_grove 0:2d90573426d7 22 template <class T>
sam_grove 0:2d90573426d7 23 class CircBuffer
sam_grove 0:2d90573426d7 24 {
sam_grove 0:2d90573426d7 25 public:
sam_grove 0:2d90573426d7 26 CircBuffer( int length )
sam_grove 0:2d90573426d7 27 {
sam_grove 0:2d90573426d7 28 write = 0;
sam_grove 0:2d90573426d7 29 read = 0;
sam_grove 0:2d90573426d7 30 size = length + 1;
sam_grove 0:2d90573426d7 31 buf = ( T * )malloc( size * sizeof( T ) );
sam_grove 0:2d90573426d7 32 };
sam_grove 0:2d90573426d7 33
sam_grove 0:2d90573426d7 34 bool isFull()
sam_grove 0:2d90573426d7 35 {
sam_grove 0:2d90573426d7 36 return ( ( write + 1 ) % size == read );
sam_grove 0:2d90573426d7 37 };
sam_grove 0:2d90573426d7 38
sam_grove 0:2d90573426d7 39 bool isEmpty()
sam_grove 0:2d90573426d7 40 {
sam_grove 0:2d90573426d7 41 return ( read == write );
sam_grove 0:2d90573426d7 42 };
sam_grove 0:2d90573426d7 43
sam_grove 0:2d90573426d7 44 void queue( T k )
sam_grove 0:2d90573426d7 45 {
sam_grove 0:2d90573426d7 46 if ( isFull() )
sam_grove 0:2d90573426d7 47 {
sam_grove 0:2d90573426d7 48 read++;
sam_grove 0:2d90573426d7 49 read %= size;
sam_grove 0:2d90573426d7 50 }
sam_grove 0:2d90573426d7 51
sam_grove 0:2d90573426d7 52 buf[write++] = k;
sam_grove 0:2d90573426d7 53 write %= size;
sam_grove 0:2d90573426d7 54 }
sam_grove 0:2d90573426d7 55
sam_grove 0:2d90573426d7 56 uint16_t available()
sam_grove 0:2d90573426d7 57 {
sam_grove 0:2d90573426d7 58 return ( write >= read ) ? write - read : size - read + write;
sam_grove 0:2d90573426d7 59 };
sam_grove 0:2d90573426d7 60
sam_grove 0:2d90573426d7 61 bool dequeue( T *c )
sam_grove 0:2d90573426d7 62 {
sam_grove 0:2d90573426d7 63 bool empty = isEmpty();
sam_grove 0:2d90573426d7 64
sam_grove 0:2d90573426d7 65 if ( !empty )
sam_grove 0:2d90573426d7 66 {
sam_grove 0:2d90573426d7 67 *c = buf[read++];
sam_grove 0:2d90573426d7 68 read %= size;
sam_grove 0:2d90573426d7 69 }
sam_grove 0:2d90573426d7 70
sam_grove 0:2d90573426d7 71 return( !empty );
sam_grove 0:2d90573426d7 72 };
sam_grove 0:2d90573426d7 73
sam_grove 0:2d90573426d7 74 private:
sam_grove 0:2d90573426d7 75 volatile uint16_t write;
sam_grove 0:2d90573426d7 76 volatile uint16_t read;
sam_grove 0:2d90573426d7 77 uint16_t size;
sam_grove 0:2d90573426d7 78 T *buf;
sam_grove 0:2d90573426d7 79 };
sam_grove 0:2d90573426d7 80
sam_grove 0:2d90573426d7 81 #endif
sam_grove 0:2d90573426d7 82