USB device stack - modified

Dependents:   shaun_larada

Fork of USBDevice by mbed official

Committer:
setcom_001
Date:
Mon Jul 22 21:16:27 2013 +0000
Revision:
12:a9671b78d24e
docs update

Who changed what in which revision?

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