A library to send and receive packets over serial, uses MODSERIAL
Dependents: SimpleSerialProtocolExample SerialFileReceiver
Diff: Protocol.h
- 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; }; }