summaryrefslogtreecommitdiff
path: root/arduino_libs_0022/ByteBuffer/.svn/text-base
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2012-01-18 18:02:10 +0000
committerTim Redfern <tim@eclectronics.org>2012-01-18 18:02:10 +0000
commit8c3efb592b16b672fc353368c04d88d3a32cf1a2 (patch)
tree9cf4887292432c656651012c5370009b4a69cddf /arduino_libs_0022/ByteBuffer/.svn/text-base
parentfe92239d966f0219e8b7caf6335a776938b4e0e3 (diff)
updated previous demo to Arduino 1.0HEADmaster
Diffstat (limited to 'arduino_libs_0022/ByteBuffer/.svn/text-base')
-rwxr-xr-xarduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base205
-rwxr-xr-xarduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base57
2 files changed, 262 insertions, 0 deletions
diff --git a/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base
new file mode 100755
index 0000000..b91a586
--- /dev/null
+++ b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base
@@ -0,0 +1,205 @@
+/*
+ ByteBuffer.cpp - A circular buffer implementation for Arduino
+ Created by Sigurdur Orn, July 19, 2010.
+ */
+
+#include "WProgram.h"
+#include "ByteBuffer.h"
+
+
+ByteBuffer::ByteBuffer(){
+
+}
+
+void ByteBuffer::init(unsigned int buf_length){
+ data = (byte*)malloc(sizeof(byte)*buf_length);
+ float_bytes = (byte*)malloc(sizeof(byte)*8);
+ capacity = buf_length;
+ position = 0;
+ length = 0;
+}
+
+void ByteBuffer::clear(){
+ position = 0;
+ length = 0;
+}
+
+int ByteBuffer::getSize(){
+ return length;
+}
+
+int ByteBuffer::getCapacity(){
+ return capacity;
+}
+
+byte ByteBuffer::peek(unsigned int index){
+ byte b = data[(position+index)%capacity];
+ return b;
+}
+
+int ByteBuffer::put(byte in){
+ if(length < capacity){
+ // save data byte at end of buffer
+ data[(position+length) % capacity] = in;
+ // increment the length
+ length++;
+ return 1;
+ }
+ // return failure
+ return 0;
+}
+
+int ByteBuffer::putInFront(byte in){
+ if(length < capacity){
+ // save data byte at end of buffer
+ if( position == 0 )
+ position = capacity-1;
+ else
+ position = (position-1)%capacity;
+ data[position] = in;
+ // increment the length
+ length++;
+ return 1;
+ }
+ // return failure
+ return 0;
+}
+
+byte ByteBuffer::get(){
+ byte b = 0;
+ if(length > 0){
+ b = data[position];
+ // move index down and decrement length
+ position = (position+1)%capacity;
+ length--;
+ }
+
+ return b;
+}
+
+byte ByteBuffer::getFromBack(){
+ byte b = 0;
+ if(length > 0){
+ b = data[(position+length-1)%capacity];
+ length--;
+ }
+
+ return b;
+}
+
+//
+// Ints
+//
+
+int ByteBuffer::putIntInFront(int in){
+ byte *pointer = (byte *)&in;
+ putInFront(pointer[0]);
+ putInFront(pointer[1]);
+}
+
+int ByteBuffer::putInt(int in){
+ byte *pointer = (byte *)&in;
+ put(pointer[1]);
+ put(pointer[0]);
+}
+
+
+int ByteBuffer::getInt(){
+ int ret;
+ byte *pointer = (byte *)&ret;
+ pointer[1] = get();
+ pointer[0] = get();
+ return ret;
+}
+
+int ByteBuffer::getIntFromBack(){
+ int ret;
+ byte *pointer = (byte *)&ret;
+ pointer[0] = getFromBack();
+ pointer[1] = getFromBack();
+ return ret;
+}
+
+//
+// Longs
+//
+
+int ByteBuffer::putLongInFront(long in){
+ byte *pointer = (byte *)&in;
+ putInFront(pointer[0]);
+ putInFront(pointer[1]);
+ putInFront(pointer[2]);
+ putInFront(pointer[3]);
+}
+
+int ByteBuffer::putLong(long in){
+ byte *pointer = (byte *)&in;
+ put(pointer[3]);
+ put(pointer[2]);
+ put(pointer[1]);
+ put(pointer[0]);
+}
+
+
+long ByteBuffer::getLong(){
+ long ret;
+ byte *pointer = (byte *)&ret;
+ pointer[3] = get();
+ pointer[2] = get();
+ pointer[1] = get();
+ pointer[0] = get();
+ return ret;
+}
+
+long ByteBuffer::getLongFromBack(){
+ long ret;
+ byte *pointer = (byte *)&ret;
+ pointer[0] = getFromBack();
+ pointer[1] = getFromBack();
+ pointer[2] = getFromBack();
+ pointer[3] = getFromBack();
+ return ret;
+}
+
+
+//
+// Floats
+//
+
+int ByteBuffer::putFloatInFront(float in){
+ byte *pointer = (byte *)&in;
+ putInFront(pointer[0]);
+ putInFront(pointer[1]);
+ putInFront(pointer[2]);
+ putInFront(pointer[3]);
+}
+
+int ByteBuffer::putFloat(float in){
+ byte *pointer = (byte *)&in;
+ put(pointer[3]);
+ put(pointer[2]);
+ put(pointer[1]);
+ put(pointer[0]);
+}
+
+float ByteBuffer::getFloat(){
+ float ret;
+ byte *pointer = (byte *)&ret;
+ pointer[3] = get();
+ pointer[2] = get();
+ pointer[1] = get();
+ pointer[0] = get();
+ return ret;
+}
+
+float ByteBuffer::getFloatFromBack(){
+ float ret;
+ byte *pointer = (byte *)&ret;
+ pointer[0] = getFromBack();
+ pointer[1] = getFromBack();
+ pointer[2] = getFromBack();
+ pointer[3] = getFromBack();
+ return ret;
+}
+
+
diff --git a/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base
new file mode 100755
index 0000000..b100c2f
--- /dev/null
+++ b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base
@@ -0,0 +1,57 @@
+/*
+ ByteBuffer.h - A circular buffer implementation for Arduino
+ Created by Sigurdur Orn, July 19, 2010.
+ */
+#ifndef ByteBuffer_h
+#define ByteBuffer_h
+
+#include "WProgram.h"
+
+class ByteBuffer
+{
+public:
+ ByteBuffer();
+
+ void init(unsigned int buf_size);
+
+ void clear();
+ int getSize();
+ int getCapacity();
+
+ int putInFront(byte in);
+ int put(byte in);
+
+ byte get();
+ byte getFromBack();
+
+ byte peek(unsigned int index);
+
+ int putIntInFront(int in);
+ int putInt(int in);
+
+ int putLongInFront(long in);
+ int putLong(long in);
+
+ int getInt();
+ int getIntFromBack();
+
+ long getLong();
+ long getLongFromBack();
+
+ int putFloatInFront(float in);
+ int putFloat(float in);
+
+ float getFloat();
+ float getFloatFromBack();
+
+private:
+ byte* data;
+ byte* float_bytes;
+
+ unsigned int capacity;
+ unsigned int position;
+ unsigned int length;
+};
+
+#endif
+