summaryrefslogtreecommitdiff
path: root/arduino_libs_0022/SerialManager/.svn
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/SerialManager/.svn
parentfe92239d966f0219e8b7caf6335a776938b4e0e3 (diff)
updated previous demo to Arduino 1.0HEADmaster
Diffstat (limited to 'arduino_libs_0022/SerialManager/.svn')
-rwxr-xr-xarduino_libs_0022/SerialManager/.svn/all-wcprops17
-rwxr-xr-xarduino_libs_0022/SerialManager/.svn/entries144
-rwxr-xr-xarduino_libs_0022/SerialManager/.svn/text-base/SerialManager.cpp.svn-base197
-rwxr-xr-xarduino_libs_0022/SerialManager/.svn/text-base/SerialManager.h.svn-base63
4 files changed, 421 insertions, 0 deletions
diff --git a/arduino_libs_0022/SerialManager/.svn/all-wcprops b/arduino_libs_0022/SerialManager/.svn/all-wcprops
new file mode 100755
index 0000000..e920984
--- /dev/null
+++ b/arduino_libs_0022/SerialManager/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/r/prg/!svn/ver/5369/trunk/arduino/libraries/SerialManager
+END
+SerialManager.h
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/r/prg/!svn/ver/5812/trunk/arduino/libraries/SerialManager/SerialManager.h
+END
+SerialManager.cpp
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/r/prg/!svn/ver/5812/trunk/arduino/libraries/SerialManager/SerialManager.cpp
+END
diff --git a/arduino_libs_0022/SerialManager/.svn/entries b/arduino_libs_0022/SerialManager/.svn/entries
new file mode 100755
index 0000000..a965507
--- /dev/null
+++ b/arduino_libs_0022/SerialManager/.svn/entries
@@ -0,0 +1,144 @@
+10
+
+dir
+5369
+https://svn.media.mit.edu/r/prg/trunk/arduino/libraries/SerialManager
+https://svn.media.mit.edu/r/prg
+
+
+
+2010-07-20T00:55:06.830758Z
+5369
+siggi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+bd000cc4-1869-4481-ad02-c3af97ea9c83
+
+SerialManager.h
+file
+5812
+
+
+
+2010-09-02T16:01:59.000000Z
+81120736a5f09269c146fab073728dcf
+2010-09-02T18:42:42.362483Z
+5812
+siggi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1242
+
+SerialPacketHandler.cpp
+file
+5812
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+deleted
+
+SerialManager.cpp
+file
+5812
+
+
+
+2010-09-02T16:02:09.000000Z
+d7812d43c015d22e6970f3b8884d9b37
+2010-09-02T18:42:42.362483Z
+5812
+siggi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4793
+
+SerialPacketHandler.h
+file
+5812
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+deleted
+
diff --git a/arduino_libs_0022/SerialManager/.svn/text-base/SerialManager.cpp.svn-base b/arduino_libs_0022/SerialManager/.svn/text-base/SerialManager.cpp.svn-base
new file mode 100755
index 0000000..ed06dbc
--- /dev/null
+++ b/arduino_libs_0022/SerialManager/.svn/text-base/SerialManager.cpp.svn-base
@@ -0,0 +1,197 @@
+/*
+ SerialManager.cpp - Library for doing packetized serial comm with Arduinos.
+ Created by Sigurdur Orn, May 23, 2010.
+ */
+
+#include "WProgram.h"
+#include "SerialManager.h"
+#include "ByteBuffer.h"
+
+
+SerialManager::SerialManager(unsigned int in_buf_size, unsigned int out_buf_size){
+ serial_in_checksum = 0;
+
+ incoming_buffer = (ByteBuffer*)malloc(sizeof(ByteBuffer));
+ outgoing_buffer = (ByteBuffer*)malloc(sizeof(ByteBuffer));
+ temp_buffer = (ByteBuffer*)malloc(sizeof(ByteBuffer));
+
+ incoming_buffer->init(in_buf_size);
+ outgoing_buffer->init(out_buf_size);
+ temp_buffer->init(10);
+
+ byte1 = 0;
+ byte2 = 0;
+ byte3 = 0;
+ byte4 = 0;
+
+ handlePacketFunction = 0;
+}
+
+void SerialManager::init(int serial_port, int baud_rate){
+ _serial_port = serial_port;
+
+ if( serial_port == 0)
+ Serial.begin(baud_rate);
+#if defined(__AVR_ATmega1280__)
+ else if( serial_port == 1)
+ Serial1.begin(baud_rate);
+ else if( serial_port == 2)
+ Serial2.begin(baud_rate);
+ else if( serial_port == 3)
+ Serial3.begin(baud_rate);
+#endif
+}
+
+
+
+bool SerialManager::isBusySending(){
+ return ( outgoing_buffer->getSize() > 0 );
+}
+
+// Sends a single byte
+int SerialManager::sendSerialByte(byte b){
+ return outgoing_buffer->put(b);
+}
+
+// Sends a packet with a header and a checksum
+int SerialManager::sendSerialPacket(ByteBuffer* packet_buffer){
+ // Copy buffer and calc checksum
+ byte checksum = 0;
+ while( packet_buffer->getSize() > 0 ){
+ byte b = packet_buffer->get();
+ outgoing_buffer->put(b);
+ checksum += b;
+ }
+
+ outgoing_buffer->put( checksum );
+ outgoing_buffer->put( 1 );
+ outgoing_buffer->put( 2 );
+ outgoing_buffer->put( 3 );
+ outgoing_buffer->put( 4 );
+
+ return 0;
+}
+
+// Sends a raw packet with no header or checksum
+int SerialManager::sendRawSerial(ByteBuffer* packet_buffer){
+ while( packet_buffer->getSize() > 0 ){
+ byte b = packet_buffer->get();
+ outgoing_buffer->put(b);
+ }
+
+ return 0;
+}
+
+void SerialManager::update(){
+
+ // If we have received stuff
+ if( _serial_port == 0 ){
+ while( Serial.available() != 0 ) {
+ byte incoming = Serial.read();
+ handleIncomingByte(incoming);
+ }
+ }
+
+#if defined(__AVR_ATmega1280__)
+ else if( _serial_port == 1 ){
+ while( Serial1.available() != 0 ) {
+ byte incoming = Serial1.read();
+ handleIncomingByte(incoming);
+ }
+ }
+ else if( _serial_port == 2 ){
+ while( Serial2.available() != 0 ) {
+ byte incoming = Serial2.read();
+ handleIncomingByte(incoming);
+ }
+ }
+ else if( _serial_port == 3 ){
+ while( Serial3.available() != 0 ) {
+ byte incoming = Serial3.read();
+ handleIncomingByte(incoming);
+ }
+ }
+#endif
+
+
+ // If we should be sending stuff
+ if( outgoing_buffer->getSize() > 0 ){
+ // If serial port not currently busy
+ if( _serial_port == 0 )
+ if(((UCSRA) & (1 << UDRE)) ) Serial.write( outgoing_buffer->get() );
+
+#if defined(__AVR_ATmega1280__)
+ else if( _serial_port == 1 )
+ if(((UCSRA1) & (1 << UDRE1)) ) Serial1.write( outgoing_buffer->get() );
+ else if( _serial_port == 2 )
+ if(((UCSRA2) & (1 << UDRE2)) ) Serial2.write( outgoing_buffer->get() );
+ else if( _serial_port == 3 )
+ if(((UCSRA3) & (1 << UDRE3)) ) Serial3.write( outgoing_buffer->get() );
+#endif
+ }
+}
+
+void SerialManager::setPacketHandler(void (*packetHandlerFunction)(ByteBuffer*)){
+ handlePacketFunction = packetHandlerFunction;
+}
+
+
+void SerialManager::handleIncomingByte(byte incoming){
+
+ // If buffer overflows then reset (we could do something smarter here)
+// if( incoming_buffer->getSize() == incoming_buffer->getCapacity() ){
+// incoming_buffer->clear();
+// }
+
+ incoming_buffer->put( incoming );
+ serial_in_checksum += incoming;
+
+ byte1 = byte2;
+ byte2 = byte3;
+ byte3 = byte4;
+ byte4 = incoming;
+
+ // If we have a full packet ready
+ if( byte1==1 && byte2==2 && byte3==3 && byte4==4 ){
+ // Remove header from buffer
+ incoming_buffer->getFromBack();
+ incoming_buffer->getFromBack();
+ incoming_buffer->getFromBack();
+ incoming_buffer->getFromBack();
+
+ byte checksum_received = incoming_buffer->getFromBack();
+
+ // Remove the whole header from the calculated checksum
+ serial_in_checksum -= checksum_received + 10;
+
+ // If checksums don't match, then do something ()
+ if( checksum_received != serial_in_checksum ){
+ temp_buffer->clear();
+ temp_buffer->put(123);
+ temp_buffer->put(234);
+ temp_buffer->put( checksum_received );
+ temp_buffer->put( serial_in_checksum );
+ sendSerialPacket(temp_buffer);
+ }
+
+ // We have a successful packet
+ else{
+
+ if( handlePacketFunction != 0 )
+ handlePacketFunction(incoming_buffer);
+ else
+ handlePacketDefault(incoming_buffer);
+ }
+
+ // Clear variables
+ incoming_buffer->clear();
+ serial_in_checksum = 0;
+ }
+
+}
+
+void SerialManager::handlePacketDefault(ByteBuffer* packet){
+ // We could do something here like send the data to the host again for debug
+ // Or just do nothing
+ return;
+}
diff --git a/arduino_libs_0022/SerialManager/.svn/text-base/SerialManager.h.svn-base b/arduino_libs_0022/SerialManager/.svn/text-base/SerialManager.h.svn-base
new file mode 100755
index 0000000..dcbdba6
--- /dev/null
+++ b/arduino_libs_0022/SerialManager/.svn/text-base/SerialManager.h.svn-base
@@ -0,0 +1,63 @@
+/*
+ SerialManager.h - Library for doing packetized serial comm with Arduinos.
+ Created by Sigurdur Orn, May 23, 2010.
+ */
+#ifndef SerialManager_h
+#define SerialManager_h
+
+#include "ByteBuffer.h"
+#include "WProgram.h"
+
+typedef void (*voidFuncPtr)(ByteBuffer*);
+
+#if defined(__AVR_ATmega8__)
+ #define UCSRA UCSRA
+ #define UDRE UDRE
+#else
+ #define UCSRA UCSR0A
+ #define UDRE UDRE0
+#endif
+
+#if defined(__AVR_ATmega1280__)
+ #define UCSRA1 UCSR1A
+ #define UDRE1 UDRE1
+ #define UCSRA2 UCSR2A
+ #define UDRE2 UDRE2
+ #define UCSRA3 UCSR3A
+ #define UDRE3 UDRE3
+#endif
+
+
+class SerialManager
+{
+public:
+ SerialManager(unsigned int in_buf_size, unsigned int out_buf_size);
+ void init(int serial_port, int baud_rate);
+ void setPacketHandler(void (*rx_func)(ByteBuffer*));
+
+ void update();
+ bool isBusySending();
+
+ int sendSerialByte(byte b);
+ int sendSerialPacket(ByteBuffer* packet);
+ int sendRawSerial(ByteBuffer* packet);
+
+private:
+ void handleIncomingByte(byte incoming);
+ void handlePacketDefault(ByteBuffer* packet);
+
+ voidFuncPtr handlePacketFunction;
+
+ byte _serial_port;
+ ByteBuffer* incoming_buffer;
+ ByteBuffer* outgoing_buffer;
+ ByteBuffer* temp_buffer;
+ byte serial_in_checksum;
+ byte byte1;
+ byte byte2;
+ byte byte3;
+ byte byte4;
+};
+
+#endif
+