Fabio Fumi / Mbed 2 deprecated send_to_sharp

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers serial_file.cpp Source File

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 }