Mercurial > hg > beaglert
diff include/WriteFile.h @ 153:3b7270949a97
Added WriteFile class to log data to disc in a low priority thread
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Wed, 07 Oct 2015 20:58:53 +0100 |
parents | |
children | f36313cbb55d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/WriteFile.h Wed Oct 07 20:58:53 2015 +0100 @@ -0,0 +1,85 @@ +/* + * WriteMFile.h + * + * Created on: 5 Oct 2015 + * Author: giulio + */ + +#ifndef WRITEMFILE_H_ +#define WRITEMFILE_H_ +#include <BeagleRT.h> +#include <vector> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +class WriteFile { +private: + static AuxiliaryTask writeAllFilesTask; + bool echo; + char *header; + char *footer; + char *stringBuffer; + int stringBufferLength; + int bufferLength; + float* buffer; + int readPointer; + int writePointer; + bool variableOpen; + char* format; + int lineLength; + static int sleepTimeMs; + FILE *file; + void writeLine(); + void writeHeader(); + void writeFooter(); + void allocateAndCopyString(const char* source, char** destination); + void print(const char* string); + void setLineLength(int newLineLength); + std::vector<char *> formatTokens; + static void sanitizeString(char* string); + static void sanitizeString(char* string, int numberOfArguments); + static bool isThreadRunning(); + static bool auxiliaryTaskRunning; + static bool threadShouldExit(); + static bool threadIsExiting; + static bool threadRunning; + static bool staticConstructed; + static void staticConstructor(); + static std::vector<WriteFile *> objAddrs; +public: + WriteFile(); + void setEcho(bool newEcho); + void setFormat(const char* newFormat); + void setHeader(const char* newHeader); + void setFooter(const char* newFooter); + void log(float* array, int length); + void log(float value); + void init(const char* filename); + + /** + * Gets the distance between the write and read pointers of + * the buffer that holds data to be written to disk. + */ + int getOffset(); + + /** + * Inquiries the status of the buffer that holds data to be written to disk. + * + * @return a value between 0 and 1, with 0 being buffer full (writing to disk not fast enough) + * and 1 being buffer empty (writing to disk is fast enough). + */ + float getBufferStatus(); + void writeOutput(); + ~WriteFile(); + static int getNumInstances(); + static void writeAllHeaders(); + static void writeAllFooters(); + static void writeAllOutputs(); + static void startThread(); + static void stopThread(); + static void run(); +}; + +#endif /* WRITEMFILE_H_ */