update with altimeter, swimfile.txt endleg.txt, etc see changes_13sep.txt also reset_PI()

Dependencies:   mbed MODSERIAL FATFileSystem

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MbedLogger.hpp Source File

MbedLogger.hpp

00001 #ifndef MBEDLOGGER_HPP
00002 #define MBEDLOGGER_HPP
00003  
00004 #include "mbed.h"
00005 #include <string>
00006 using namespace std;
00007 
00008 #include <vector>
00009 
00010 #include <fstream>
00011 
00012 enum {
00013     HEADER_117,
00014     HEADER_101,
00015     PACKET_NUM,
00016     TOTAL_NUM_PACKETS,
00017     PACKET_SIZE,
00018     END_TRANSMISSION,
00019     TRANSMIT_PACKET_1,
00020     TRANSMIT_PACKET_2,
00021     PACKET_CRC_ONE,
00022     PACKET_CRC_TWO,
00023     RANDOM_CHAR,
00024     COMMAND_ONE,
00025     COMMAND_TWO,
00026     HEADER_1E,
00027     HEADER_1F,
00028     PACKET_NO_1,
00029     PACKET_NO_2,
00030     END_TX_1,
00031     END_TX_2
00032 };
00033 //struct for saving names of log and diag files
00034 //struct logFiles {
00035 //    string diagFile;
00036 //    string logFile;
00037 // };
00038 
00039     
00040 class MbedLogger {
00041 public:
00042     MbedLogger(string file_system_input_string);           //constructor
00043     
00044     void createTestLog();   //test log function
00045     // logFiles logFilesStruct;
00046     
00047     void appendLogFile(int current_state, int option);     //check if you have orphaned file pointers before this (file should not be open already)
00048     void appendDiagFile(char *printf_string, int flushclose);    
00049     //save float array to file (append each time)
00050     void saveDataToFile(int input_state, float *input);
00051     
00052     //REVISED METHOD to save data (same as OpenLog)
00053     void recordData(int current_state);
00054     void recordData_short(int current_state);
00055     void recordData_long(int current_state);
00056     
00057     //print the directory to the screen
00058     void printMbedDirectory();
00059     
00060     //print the current MBED log file
00061     void printCurrentLogFile();
00062     
00063     //transmit data when receive confirmation
00064     void transmitCurrentLogFileLine(bool next_line);
00065     
00066     //transmit data when receive confirmation
00067     //void transmitCurrentLogFile();
00068     
00069     // Create the data packet
00070     void createDataPacket();
00071     
00072     // Transmit the data packet
00073     void transmitDataPacket();
00074     
00075     // read transmit packet from Python program
00076     int readTransmitPacket();
00077     
00078     // REOPEN LINE READER
00079     void reOpenLineReader();
00080     
00081     // OPEN LINE READER
00082     bool openLineReader();
00083     
00084     //read packet
00085     void readPacketInSeries();
00086     
00087     //get the number of packets
00088     int getNumberOfPacketsInCurrentLog();
00089     
00090     // END TRANSMISSION AND CLOSE FILE
00091     void endTransmissionCloseFile();
00092     
00093     //open a file to write to it
00094     void openWriteFile();
00095     
00096     bool checkForIncomingData();
00097 
00098     void endReceiveData();
00099 
00100     void copyFileExample();
00101 
00102     int calcCrcOneArray(int *input_array, int array_length);
00103     int calcCrcTwoArray(int *input_array, int array_length);
00104 
00105     int calcCrcOne();  //used with vector _data_packet, cleaning up later
00106     int calcCrcTwo();  
00107     
00108     int calcCrcOneString (string string_input);
00109 
00110     int calcCrcTwoString (string string_input);
00111     
00112     //NEW for logging actual time
00113     void setLogTime(long int setting_time);              //set a local time
00114 
00115     time_t getSystemTime();          //parse the time to record to the log file
00116     
00117     //NEW
00118     int sendReply();
00119     void sendReplyPacketNumber(int packet_number);
00120     
00121     void resetReplyPacket();
00122     
00123     void openNewMissionFile();
00124     
00125     void setDataCounter(int input_counter);
00126     
00127     void closeIncompleteFile();
00128     
00129     void initializeLogFile();
00130     void initializeDiagFile(int print_diag);  
00131     
00132     int fileTransmitState();
00133     
00134     int testGetFileSize();
00135     
00136     int getFileSize(string filename);
00137     
00138     void createEmptyLog();
00139     
00140     int debugFileState();
00141         
00142     //TICKER AND FUNCTION TO RECEIVE DATA
00143     void activateReceivePacket();
00144     void receiveMissionDataWithTicker();
00145     
00146     void closeLogFile();    //this sets pointer to null and checks if it is closed otherwise
00147     void closeDiagFile();
00148     
00149     void specifyFileForTransmit(string input_string);
00150     void transmitFileFromDirectory(int file_number);
00151     void accessMbedDirectory();
00152     
00153     int getFilePointerState();
00154     void testToggleFilePointer();
00155     
00156     bool isTransmissionComplete();
00157     int currentPacketNumber();
00158     void eraseFile();
00159     
00160     string _received_filename;                  //testing
00161     
00162     void receiveSequenceFile();
00163     void receiveMissionDataWithFSM();           //for use in Finite State Machine
00164     
00165     void openReceiveFile(string filename);      //create a file with an input filename
00166     
00167     void setTransmissionComplete(bool transmit_complete_status);
00168     
00169     void intCreateDataPacket(int data_buffer[],int payload_length);
00170     
00171     int getLogSize();   //used in state machine
00172     
00173     string _heading_string;
00174     string _heading_string2;
00175     string _diag_heading_string;
00176     
00177     void continuouslyTransmitData();
00178     
00179     void continuouslyTransmitDataNoTimer();
00180     
00181     void transmitPacketNumber(int line_or_packet_number);
00182     
00183     void checkForPythonTransmitRequest();
00184     
00185     void fsmTransmitData();
00186     
00187     void setTransmitPacketNumber(int packet_number);
00188     
00189     void createDataPacket(char line_buffer_sent[], int line_length_sent);
00190     
00191     bool endTransmitPacket();   //used to exit FSM with Python
00192     
00193     void blastData();
00194     
00195     void transmitOnePacket();
00196     
00197     void transmitMultiplePackets();
00198         
00199 private:
00200     int _file_number;
00201     
00202     char _file_name[256];   //file name placeholder
00203     char _line_buffer[256]; //line buffer used to read file line by line
00204     
00205     FILE *_fp;              //the log file pointer
00206     FILE *_fp2;             // the diag file pointer
00207     
00208     vector <int> _data_packet;
00209     
00210     std::vector<int>::iterator _it;
00211     
00212     int _current_line_length;
00213     
00214     int _packet_number;
00215     int _total_number_of_packets;
00216     string _log_file_string;    
00217     
00218     int _reply_byte;
00219     int _reply_byte2;
00220     int _reply_byte3;
00221     int _reply_byte4;
00222     int _previous_reply_byte;
00223     
00224     bool _file_transmission;        //breaks out of loop in State Machine
00225     
00226     float _data_log[37];            //for logging all of the data from the outer and inner loops and so on
00227     
00228     int _confirmed_packet_number;
00229     
00230     int _default_timestamp_time;
00231     int _time_set;
00232     
00233     bool _still_transmitting_data;
00234     
00235     int _transmit_counter;
00236     
00237     int _file_transmission_state;   //needed to test out what's going on with receiver
00238     
00239     int _number_of_packets[2];
00240     
00241     Ticker _mbed_transmit_ticker;
00242     Ticker _mbed_receive_ticker;
00243     
00244     volatile bool _mbed_transmit_loop;
00245     volatile bool _mbed_receive_loop;
00246     
00247     string _file_system_string;
00248     string _full_file_path_string;
00249     string _full_diagfile_path_string;
00250     
00251     bool _file_transmission_complete;       //was volatile screwing up the state of this?
00252     
00253     int _log_file_line_counter;
00254     
00255     int _transmit_packet_num;
00256     
00257     bool _fsm_transmit_complete;
00258     
00259     bool _end_transmit_packet;
00260     
00261     bool _end_sequence_transmission;
00262 };
00263  
00264 #endif