mbed Phone Platform UDP to DAC/ADC test

Dependencies:   mbed

Committer:
okini3939
Date:
Wed Dec 01 14:35:05 2010 +0000
Revision:
0:c0c1269a8f51

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:c0c1269a8f51 1 /*
okini3939 0:c0c1269a8f51 2 * mbed library for RingBuffer
okini3939 0:c0c1269a8f51 3 * Copyright (c) 2010 Hiroshi Suga
okini3939 0:c0c1269a8f51 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:c0c1269a8f51 5 */
okini3939 0:c0c1269a8f51 6
okini3939 0:c0c1269a8f51 7 #include "RingBuffer.h"
okini3939 0:c0c1269a8f51 8
okini3939 0:c0c1269a8f51 9 RingBuffer::RingBuffer (int p_size) {
okini3939 0:c0c1269a8f51 10 size = p_size + 1;
okini3939 0:c0c1269a8f51 11 buf = new char[size];
okini3939 0:c0c1269a8f51 12 addr_w = 0;
okini3939 0:c0c1269a8f51 13 addr_r = 0;
okini3939 0:c0c1269a8f51 14 }
okini3939 0:c0c1269a8f51 15
okini3939 0:c0c1269a8f51 16 RingBuffer::~RingBuffer () {
okini3939 0:c0c1269a8f51 17 delete [] buf;
okini3939 0:c0c1269a8f51 18 }
okini3939 0:c0c1269a8f51 19
okini3939 0:c0c1269a8f51 20 int RingBuffer::put (char dat) {
okini3939 0:c0c1269a8f51 21 int next;
okini3939 0:c0c1269a8f51 22
okini3939 0:c0c1269a8f51 23 next = (addr_w + 1) % size;
okini3939 0:c0c1269a8f51 24 if (next == addr_r) {
okini3939 0:c0c1269a8f51 25 return -1;
okini3939 0:c0c1269a8f51 26 }
okini3939 0:c0c1269a8f51 27 buf[addr_w] = dat;
okini3939 0:c0c1269a8f51 28 addr_w = next;
okini3939 0:c0c1269a8f51 29 return dat;
okini3939 0:c0c1269a8f51 30 }
okini3939 0:c0c1269a8f51 31
okini3939 0:c0c1269a8f51 32 int RingBuffer::put (char *dat, int len) {
okini3939 0:c0c1269a8f51 33 int next, i;
okini3939 0:c0c1269a8f51 34
okini3939 0:c0c1269a8f51 35
okini3939 0:c0c1269a8f51 36 for (i = 0; i < len; i ++) {
okini3939 0:c0c1269a8f51 37 next = (addr_w + 1) % size;
okini3939 0:c0c1269a8f51 38 if (next == addr_r) {
okini3939 0:c0c1269a8f51 39 break;
okini3939 0:c0c1269a8f51 40 }
okini3939 0:c0c1269a8f51 41 buf[addr_w] = dat[i];
okini3939 0:c0c1269a8f51 42 addr_w = next;
okini3939 0:c0c1269a8f51 43 }
okini3939 0:c0c1269a8f51 44 return i;
okini3939 0:c0c1269a8f51 45 }
okini3939 0:c0c1269a8f51 46
okini3939 0:c0c1269a8f51 47 int RingBuffer::get (char &dat) {
okini3939 0:c0c1269a8f51 48 if (addr_r == addr_w) {
okini3939 0:c0c1269a8f51 49 return -1;
okini3939 0:c0c1269a8f51 50 }
okini3939 0:c0c1269a8f51 51 dat = buf[addr_r];
okini3939 0:c0c1269a8f51 52 addr_r = (addr_r + 1) % size;
okini3939 0:c0c1269a8f51 53 return 0;
okini3939 0:c0c1269a8f51 54 }
okini3939 0:c0c1269a8f51 55
okini3939 0:c0c1269a8f51 56 int RingBuffer::get (char *dat, int len) {
okini3939 0:c0c1269a8f51 57 int i;
okini3939 0:c0c1269a8f51 58
okini3939 0:c0c1269a8f51 59 for (i = 0; i < len; i ++) {
okini3939 0:c0c1269a8f51 60 if (addr_r == addr_w) {
okini3939 0:c0c1269a8f51 61 break;
okini3939 0:c0c1269a8f51 62 }
okini3939 0:c0c1269a8f51 63 dat[i] = buf[addr_r];
okini3939 0:c0c1269a8f51 64 addr_r = (addr_r + 1) % size;
okini3939 0:c0c1269a8f51 65 }
okini3939 0:c0c1269a8f51 66 return i;
okini3939 0:c0c1269a8f51 67 }
okini3939 0:c0c1269a8f51 68
okini3939 0:c0c1269a8f51 69 int RingBuffer::available () {
okini3939 0:c0c1269a8f51 70 if (addr_w < addr_r) {
okini3939 0:c0c1269a8f51 71 return addr_r - addr_w - 1;
okini3939 0:c0c1269a8f51 72 } else {
okini3939 0:c0c1269a8f51 73 return (size - addr_w) + addr_r - 1;
okini3939 0:c0c1269a8f51 74 }
okini3939 0:c0c1269a8f51 75 }
okini3939 0:c0c1269a8f51 76
okini3939 0:c0c1269a8f51 77 int RingBuffer::use () {
okini3939 0:c0c1269a8f51 78 return size - available() - 1;
okini3939 0:c0c1269a8f51 79 }
okini3939 0:c0c1269a8f51 80
okini3939 0:c0c1269a8f51 81 void RingBuffer::clear () {
okini3939 0:c0c1269a8f51 82 addr_w = 0;
okini3939 0:c0c1269a8f51 83 addr_r = 0;
okini3939 0:c0c1269a8f51 84 }