A library to send and receive packets over serial, uses MODSERIAL
Dependents: SimpleSerialProtocolExample SerialFileReceiver
Diff: Protocol.h
- Revision:
- 1:98ad30934a71
- Parent:
- 0:1639507580d5
- Child:
- 2:43794e0b738f
--- a/Protocol.h Thu Jun 28 21:19:58 2012 +0000 +++ b/Protocol.h Wed Aug 27 17:35:30 2014 +0000 @@ -19,29 +19,19 @@ enum { PACKET_START, HEADER_RECEIVE, - HEADER_DECODE, DATA_RECEIVE, - FOOTER_RECEIVE, DATA_VALIDATE, - PACKET_VALID, - PACKET_RESET }; - Timer testDma; - uint32_t testDmaTime; - Protocol(PinName tx, PinName rx, PinName led_pin); virtual ~Protocol(); - virtual void initialise() { - MODSERIAL::baud(115200); + virtual void initialise(uint32_t baud) { + MODSERIAL::baud(baud); } - void update(); + virtual void update(); - int printf( const char * format, ...); - int puts( const char * str); - int putc( int character); void send(uint8_t byte); void blockUntilTxEmpty(); @@ -65,19 +55,18 @@ return _send_buffer.available(); } - template<class T> void receiveCallback(uint8_t type, T* item, void (T::*method)(Packet*)) { + template<class T> void receiveCallback(uint8_t type, T* item, void (T::*method)(Protocol*, Packet*)) { FPointer callback; callback.attach(item, (void (T::*)(Packet*))method); _callback[type].push_back(callback); } - template<class T> void transmitCallback(float frequency, T* item, void (T::*method)(Packet*)) { + template<class T> void transmitCallback(float frequency, T* item, void (T::*method)(Protocol*, Packet*)) { FPointer callback; callback.attach(item, (void (T::*)(Packet*))method); _transmit_callback.push_back(TimerData(frequency, callback)); } -protected: virtual void sendPacket(Packet* packet) { if (packet!=0) { send(255); @@ -127,8 +116,6 @@ uint8_t _state; uint8_t _last_byte; - bool _transfer_in_progress; - uint8_t _dma_buffer[SEND_CHUNK_SIZE]; RingBuffer _send_buffer; std::map<uint8_t, std::vector<FPointer> > _callback;