update with altimeter, swimfile.txt endleg.txt, etc see changes_13sep.txt also reset_PI()
Dependencies: mbed MODSERIAL FATFileSystem
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
Generated on Wed Jul 13 2022 15:28:17 by 1.7.2