Fabio Fumi
/
send_to_sharp
Renamed
serial_file.cpp
- Committer:
- ffxx68
- Date:
- 2022-03-29
- Revision:
- 5:062962db7a48
File content as of revision 5:062962db7a48:
#include "serial_file.h" // file-over-serial implementation, using a circular buffer // between feeder, pushing data received from serial port, // and consumer, pulling and sending to sharp PC // Serial is not buffered on the MBed board // Sharp PC data sending is timed by the bit-handler modulator // Since neither can be stopped, assumptions are: // - feeder must be faster than consumer // - buffer (although circular) limits maximum size to be processed Timer timeout; // volatile because shared among volatile int totBytesReceived; volatile int fileBufReceivePtr; volatile int fileBufSendPtr; volatile int fileReceiveComplete; volatile int fileError; volatile char fileOverSerialBuffer[FILE_BUF_SIZE]; // circular file buffer (for serial get) extern DigitalOut my_led; extern Ticker blink; void fileReceiveInit( void ) { totBytesReceived = 0; fileBufReceivePtr = 0; fileBufSendPtr = 0; fileReceiveComplete = false; fileError = 0; timeout.stop(); timeout.reset(); } char filePullData ( void ) { return ( fileOverSerialBuffer[ ((fileBufSendPtr++)%FILE_BUF_SIZE) ] ); } void filePushData ( char byte ) { fileOverSerialBuffer[ ((fileBufReceivePtr++)%FILE_BUF_SIZE) ] = byte; if ( fileOverSerialBuffer[fileBufReceivePtr] == '0xFF' ) { // terminator char, force receive end fileReceiveComplete = true; fileError = ERR_FILE_TERMINATED; blink.detach( ); my_led = 1; return; } if ( fileBufReceivePtr == fileBufSendPtr ) { // buffer not large enough, feeder reached consumer fileReceiveComplete = true; fileError = ERR_FILE_BUF_FULL; blink.detach( ); my_led = 1; return; } } bool isFilePullComplete( void ) { return ( fileBufSendPtr == fileBufReceivePtr - 1 ) ; }