A library to send and receive packets over serial, uses MODSERIAL

Dependents:   SimpleSerialProtocolExample SerialFileReceiver

Revision:
2:43794e0b738f
Parent:
1:98ad30934a71
Child:
3:5caff50e14a7
--- a/Protocol.h	Wed Aug 27 17:35:30 2014 +0000
+++ b/Protocol.h	Thu Sep 18 17:37:04 2014 +0000
@@ -7,6 +7,7 @@
 #include "mbed.h"
 #include "MODSERIAL.h"
 #include "Packet.h"
+#include "Codec.h"
 #include "FPointer.h"
 #include "Ringbuffer.h"
 
@@ -26,7 +27,8 @@
     Protocol(PinName tx, PinName rx, PinName led_pin);
     virtual ~Protocol();
 
-    virtual void initialise(uint32_t baud) {
+    virtual void initialise(uint32_t baud, ICodec* stream_codec) {
+        codec = stream_codec;
         MODSERIAL::baud(baud);
     }
     
@@ -67,17 +69,10 @@
         _transmit_callback.push_back(TimerData(frequency, callback));
     }
 
-    virtual void sendPacket(Packet* packet) {
-        if (packet!=0) {
-            send(255);
-            send(127);
-            send(packet->_size);
-            for (int i = 0; i < packet->_size; i++) {
-                send(packet->_data[i]);
-            }
-            send(checksum(packet->_data,  packet->_size));
-        }
-    }
+    virtual void send(Packet* packet);
+
+    void transmit();
+    void receive();
 
     DigitalOut _receive_led;
     Packet _packet;
@@ -86,10 +81,6 @@
     Timer _receive_timeout;
     Timer _throttle_transfer;
     
-    void send();
-    virtual void receive();
-    static uint8_t checksum(uint8_t* packet, uint16_t packet_size);
-
     struct TimerData {
         TimerData(float frequency, FPointer callback) {
             _timer.start();
@@ -108,18 +99,10 @@
         FPointer _callback;
     };
 
-    uint8_t _header[2];
-    uint8_t _header_read;
-    uint8_t _data_read;
-    uint8_t _footer[4];
-    uint8_t _footer_read;
-    uint8_t _state;
-    uint8_t _last_byte;
-
-
     RingBuffer _send_buffer;
     std::map<uint8_t, std::vector<FPointer> > _callback;
     std::vector<TimerData> _transmit_callback;
+    ICodec* codec;
 };
 
 }