Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
serial_file.cpp
00001 #include "serial_file.h" 00002 // file-over-serial implementation, using a circular buffer 00003 // between feeder, pushing data received from serial port, 00004 // and consumer, pulling and sending to sharp PC 00005 // Serial is not buffered on the MBed board 00006 // Sharp PC data sending is timed by the bit-handler modulator 00007 // Since neither can be stopped, assumptions are: 00008 // - feeder must be faster than consumer 00009 // - buffer (although circular) limits maximum size to be processed 00010 00011 Timer timeout; 00012 00013 // volatile because shared among 00014 volatile int totBytesReceived; 00015 volatile int fileBufReceivePtr; 00016 volatile int fileBufSendPtr; 00017 volatile int fileReceiveComplete; 00018 volatile int fileError; 00019 volatile char fileOverSerialBuffer[FILE_BUF_SIZE]; // circular file buffer (for serial get) 00020 00021 extern DigitalOut my_led; 00022 extern Ticker blink; 00023 00024 void fileReceiveInit( void ) { 00025 00026 totBytesReceived = 0; 00027 fileBufReceivePtr = 0; 00028 fileBufSendPtr = 0; 00029 fileReceiveComplete = false; 00030 fileError = 0; 00031 timeout.stop(); 00032 timeout.reset(); 00033 00034 } 00035 00036 char filePullData ( void ) { 00037 return ( fileOverSerialBuffer[ ((fileBufSendPtr++)%FILE_BUF_SIZE) ] ); 00038 } 00039 00040 void filePushData ( char byte ) { 00041 fileOverSerialBuffer[ ((fileBufReceivePtr++)%FILE_BUF_SIZE) ] = byte; 00042 if ( fileOverSerialBuffer[fileBufReceivePtr] == '0xFF' ) { // terminator char, force receive end 00043 fileReceiveComplete = true; 00044 fileError = ERR_FILE_TERMINATED; 00045 blink.detach( ); 00046 my_led = 1; 00047 return; 00048 } 00049 if ( fileBufReceivePtr == fileBufSendPtr ) { // buffer not large enough, feeder reached consumer 00050 fileReceiveComplete = true; 00051 fileError = ERR_FILE_BUF_FULL; 00052 blink.detach( ); 00053 my_led = 1; 00054 return; 00055 } 00056 } 00057 00058 bool isFilePullComplete( void ) { 00059 return ( fileBufSendPtr == fileBufReceivePtr - 1 ) ; 00060 }
Generated on Sat Jul 16 2022 05:01:30 by
1.7.2