Dependencies:   keypad SDHCFileSystem TextLCD mbed FPointer wave_player

Committer:
daryl2110
Date:
Mon Feb 20 07:32:56 2012 +0000
Revision:
0:57ece500234e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daryl2110 0:57ece500234e 1 //******************************************************************************
daryl2110 0:57ece500234e 2 //*
daryl2110 0:57ece500234e 3 //* FULLNAME: Single-Chip Microcontroller Real-Time Operating System
daryl2110 0:57ece500234e 4 //*
daryl2110 0:57ece500234e 5 //* NICKNAME: scmRTOS
daryl2110 0:57ece500234e 6 //*
daryl2110 0:57ece500234e 7 //* PURPOSE: User Suport Library Source
daryl2110 0:57ece500234e 8 //*
daryl2110 0:57ece500234e 9 //* Version: 3.10
daryl2110 0:57ece500234e 10 //*
daryl2110 0:57ece500234e 11 //* $Revision: 256 $
daryl2110 0:57ece500234e 12 //* $Date:: 2010-01-22 #$
daryl2110 0:57ece500234e 13 //*
daryl2110 0:57ece500234e 14 //* Copyright (c) 2003-2010, Harry E. Zhurov
daryl2110 0:57ece500234e 15 //*
daryl2110 0:57ece500234e 16 //* Permission is hereby granted, free of charge, to any person
daryl2110 0:57ece500234e 17 //* obtaining a copy of this software and associated documentation
daryl2110 0:57ece500234e 18 //* files (the "Software"), to deal in the Software without restriction,
daryl2110 0:57ece500234e 19 //* including without limitation the rights to use, copy, modify, merge,
daryl2110 0:57ece500234e 20 //* publish, distribute, sublicense, and/or sell copies of the Software,
daryl2110 0:57ece500234e 21 //* and to permit persons to whom the Software is furnished to do so,
daryl2110 0:57ece500234e 22 //* subject to the following conditions:
daryl2110 0:57ece500234e 23 //*
daryl2110 0:57ece500234e 24 //* The above copyright notice and this permission notice shall be included
daryl2110 0:57ece500234e 25 //* in all copies or substantial portions of the Software.
daryl2110 0:57ece500234e 26 //*
daryl2110 0:57ece500234e 27 //* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
daryl2110 0:57ece500234e 28 //* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
daryl2110 0:57ece500234e 29 //* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
daryl2110 0:57ece500234e 30 //* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
daryl2110 0:57ece500234e 31 //* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
daryl2110 0:57ece500234e 32 //* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
daryl2110 0:57ece500234e 33 //* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
daryl2110 0:57ece500234e 34 //*
daryl2110 0:57ece500234e 35 //* =================================================================
daryl2110 0:57ece500234e 36 //* See http://scmrtos.sourceforge.net for documentation, latest
daryl2110 0:57ece500234e 37 //* information, license and contact details.
daryl2110 0:57ece500234e 38 //* =================================================================
daryl2110 0:57ece500234e 39 //*
daryl2110 0:57ece500234e 40 //******************************************************************************
daryl2110 0:57ece500234e 41
daryl2110 0:57ece500234e 42 #include <usrlib.h>
daryl2110 0:57ece500234e 43 #include <commdefs.h>
daryl2110 0:57ece500234e 44
daryl2110 0:57ece500234e 45 using namespace usr;
daryl2110 0:57ece500234e 46
daryl2110 0:57ece500234e 47 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 48 //
daryl2110 0:57ece500234e 49 /// Circular buffer function-member description
daryl2110 0:57ece500234e 50 //
daryl2110 0:57ece500234e 51 //
daryl2110 0:57ece500234e 52 //
daryl2110 0:57ece500234e 53 TCbuf::TCbuf(byte* const Address, const byte Size) :
daryl2110 0:57ece500234e 54 buf(Address),
daryl2110 0:57ece500234e 55 size(Size),
daryl2110 0:57ece500234e 56 count(0),
daryl2110 0:57ece500234e 57 first(0),
daryl2110 0:57ece500234e 58 last(0)
daryl2110 0:57ece500234e 59 {
daryl2110 0:57ece500234e 60 }
daryl2110 0:57ece500234e 61 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 62 bool TCbuf::write(const byte* data, const byte Count)
daryl2110 0:57ece500234e 63 {
daryl2110 0:57ece500234e 64 if( Count > (size - count) )
daryl2110 0:57ece500234e 65 return false;
daryl2110 0:57ece500234e 66
daryl2110 0:57ece500234e 67 for(byte i = 0; i < Count; i++)
daryl2110 0:57ece500234e 68 push(*(data++));
daryl2110 0:57ece500234e 69
daryl2110 0:57ece500234e 70 return true;
daryl2110 0:57ece500234e 71 }
daryl2110 0:57ece500234e 72 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 73 void TCbuf::read(byte* data, const byte Count)
daryl2110 0:57ece500234e 74 {
daryl2110 0:57ece500234e 75 byte N = Count <= count ? Count : count;
daryl2110 0:57ece500234e 76
daryl2110 0:57ece500234e 77 for(byte i = 0; i < N; i++)
daryl2110 0:57ece500234e 78 data[i] = pop();
daryl2110 0:57ece500234e 79 }
daryl2110 0:57ece500234e 80 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 81 byte TCbuf::get_byte(const byte index) const
daryl2110 0:57ece500234e 82 {
daryl2110 0:57ece500234e 83 byte x = first + index;
daryl2110 0:57ece500234e 84
daryl2110 0:57ece500234e 85 if(x < size)
daryl2110 0:57ece500234e 86 return buf[x];
daryl2110 0:57ece500234e 87 else
daryl2110 0:57ece500234e 88 return buf[x - size];
daryl2110 0:57ece500234e 89 }
daryl2110 0:57ece500234e 90
daryl2110 0:57ece500234e 91 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 92 bool TCbuf::put(const byte item)
daryl2110 0:57ece500234e 93 {
daryl2110 0:57ece500234e 94 if(count == size)
daryl2110 0:57ece500234e 95 return false;
daryl2110 0:57ece500234e 96
daryl2110 0:57ece500234e 97 push(item);
daryl2110 0:57ece500234e 98 return true;
daryl2110 0:57ece500234e 99 }
daryl2110 0:57ece500234e 100 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 101 byte TCbuf::get()
daryl2110 0:57ece500234e 102 {
daryl2110 0:57ece500234e 103 if(count)
daryl2110 0:57ece500234e 104 return pop();
daryl2110 0:57ece500234e 105 else
daryl2110 0:57ece500234e 106 return 0;
daryl2110 0:57ece500234e 107 }
daryl2110 0:57ece500234e 108 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 109 //
daryl2110 0:57ece500234e 110 /// \note
daryl2110 0:57ece500234e 111 /// For internal purposes.
daryl2110 0:57ece500234e 112 /// Use this function with care - it doesn't perform free size check.
daryl2110 0:57ece500234e 113 //
daryl2110 0:57ece500234e 114 void TCbuf::push(const byte item)
daryl2110 0:57ece500234e 115 {
daryl2110 0:57ece500234e 116 buf[last] = item;
daryl2110 0:57ece500234e 117 last++;
daryl2110 0:57ece500234e 118 count++;
daryl2110 0:57ece500234e 119
daryl2110 0:57ece500234e 120 if(last == size)
daryl2110 0:57ece500234e 121 last = 0;
daryl2110 0:57ece500234e 122 }
daryl2110 0:57ece500234e 123 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 124 //
daryl2110 0:57ece500234e 125 /// \note
daryl2110 0:57ece500234e 126 /// For internal purposes.
daryl2110 0:57ece500234e 127 /// Use this function with care - it doesn't perform free size check.
daryl2110 0:57ece500234e 128 //
daryl2110 0:57ece500234e 129 byte TCbuf::pop()
daryl2110 0:57ece500234e 130 {
daryl2110 0:57ece500234e 131 byte item = buf[first];
daryl2110 0:57ece500234e 132
daryl2110 0:57ece500234e 133 count--;
daryl2110 0:57ece500234e 134 first++;
daryl2110 0:57ece500234e 135 if(first == size)
daryl2110 0:57ece500234e 136 first = 0;
daryl2110 0:57ece500234e 137
daryl2110 0:57ece500234e 138 return item;
daryl2110 0:57ece500234e 139 }
daryl2110 0:57ece500234e 140 //------------------------------------------------------------------------------