most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown

Dependencies:   mbed MODSERIAL FATFileSystem

Committer:
tnhnrl
Date:
Mon Jun 18 21:02:55 2018 +0000
Revision:
63:6cb0405fc6e6
Parent:
62:d502889e74f1
Child:
67:c86a4b464682
Version with code updates on multi-dive (still testing) and PID inputs and fixed data transmissions so it's working very quickly now on USB.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tnhnrl 62:d502889e74f1 1 #ifndef MBEDLOGGER_HPP
tnhnrl 62:d502889e74f1 2 #define MBEDLOGGER_HPP
tnhnrl 62:d502889e74f1 3
tnhnrl 62:d502889e74f1 4 #include "mbed.h"
tnhnrl 62:d502889e74f1 5 #include <string>
tnhnrl 62:d502889e74f1 6 using namespace std;
tnhnrl 62:d502889e74f1 7
tnhnrl 62:d502889e74f1 8 #include <vector>
tnhnrl 62:d502889e74f1 9
tnhnrl 62:d502889e74f1 10 enum {
tnhnrl 62:d502889e74f1 11 HEADER_117,
tnhnrl 62:d502889e74f1 12 HEADER_101,
tnhnrl 62:d502889e74f1 13 PACKET_NUM,
tnhnrl 62:d502889e74f1 14 TOTAL_NUM_PACKETS,
tnhnrl 62:d502889e74f1 15 PACKET_SIZE,
tnhnrl 62:d502889e74f1 16 END_TRANSMISSION,
tnhnrl 62:d502889e74f1 17 TRANSMIT_PACKET_1,
tnhnrl 62:d502889e74f1 18 TRANSMIT_PACKET_2,
tnhnrl 62:d502889e74f1 19 PACKET_CRC_ONE,
tnhnrl 62:d502889e74f1 20 PACKET_CRC_TWO,
tnhnrl 62:d502889e74f1 21 RANDOM_CHAR,
tnhnrl 62:d502889e74f1 22 COMMAND_ONE,
tnhnrl 62:d502889e74f1 23 COMMAND_TWO
tnhnrl 62:d502889e74f1 24 };
tnhnrl 62:d502889e74f1 25
tnhnrl 62:d502889e74f1 26 class MbedLogger {
tnhnrl 62:d502889e74f1 27 public:
tnhnrl 62:d502889e74f1 28 MbedLogger(string file_system_input_string); //constructor
tnhnrl 62:d502889e74f1 29
tnhnrl 62:d502889e74f1 30 //test
tnhnrl 62:d502889e74f1 31 void checkForPythonCommand();
tnhnrl 62:d502889e74f1 32
tnhnrl 62:d502889e74f1 33 void createTestLog(); //test log function
tnhnrl 62:d502889e74f1 34
tnhnrl 62:d502889e74f1 35 void appendLogFile(int current_state, int option); //check if you have orphaned file pointers before this (file should not be open already)
tnhnrl 62:d502889e74f1 36
tnhnrl 62:d502889e74f1 37 //save float array to file (append each time)
tnhnrl 62:d502889e74f1 38 void saveDataToFile(int input_state, float *input);
tnhnrl 62:d502889e74f1 39
tnhnrl 62:d502889e74f1 40 //REVISED METHOD to save data (same as OpenLog)
tnhnrl 62:d502889e74f1 41 void recordData(int current_state);
tnhnrl 62:d502889e74f1 42
tnhnrl 62:d502889e74f1 43 //print the directory to the screen
tnhnrl 62:d502889e74f1 44 void printMbedDirectory();
tnhnrl 62:d502889e74f1 45
tnhnrl 62:d502889e74f1 46 //print the current MBED log file
tnhnrl 62:d502889e74f1 47 void printCurrentLogFile();
tnhnrl 62:d502889e74f1 48
tnhnrl 62:d502889e74f1 49 //open file for transmit
tnhnrl 62:d502889e74f1 50 void openFileForTransmit();
tnhnrl 62:d502889e74f1 51
tnhnrl 62:d502889e74f1 52 //transmit data when receive confirmation
tnhnrl 62:d502889e74f1 53 void transmitCurrentLogFileLine(bool next_line);
tnhnrl 62:d502889e74f1 54
tnhnrl 62:d502889e74f1 55 //transmit data when receive confirmation
tnhnrl 62:d502889e74f1 56 //void transmitCurrentLogFile();
tnhnrl 62:d502889e74f1 57
tnhnrl 62:d502889e74f1 58 // Create the data packet
tnhnrl 62:d502889e74f1 59 void createDataPacket();
tnhnrl 62:d502889e74f1 60
tnhnrl 62:d502889e74f1 61 // Transmit the data packet
tnhnrl 62:d502889e74f1 62 void transmitDataPacket();
tnhnrl 62:d502889e74f1 63
tnhnrl 62:d502889e74f1 64 // read transmit packet from Python program
tnhnrl 62:d502889e74f1 65 int readTransmitPacket();
tnhnrl 62:d502889e74f1 66
tnhnrl 62:d502889e74f1 67 // REOPEN LINE READER
tnhnrl 62:d502889e74f1 68 void reOpenLineReader();
tnhnrl 62:d502889e74f1 69
tnhnrl 62:d502889e74f1 70 // OPEN LINE READER
tnhnrl 62:d502889e74f1 71 bool openLineReader();
tnhnrl 62:d502889e74f1 72
tnhnrl 62:d502889e74f1 73 //read packet
tnhnrl 62:d502889e74f1 74 void readPacketInSeries();
tnhnrl 62:d502889e74f1 75
tnhnrl 62:d502889e74f1 76 //get the number of packets
tnhnrl 62:d502889e74f1 77 void getNumberOfPacketsInCurrentLog();
tnhnrl 62:d502889e74f1 78
tnhnrl 62:d502889e74f1 79 // END TRANSMISSION AND CLOSE FILE
tnhnrl 62:d502889e74f1 80 void endTransmissionCloseFile();
tnhnrl 62:d502889e74f1 81
tnhnrl 62:d502889e74f1 82 //open a file to write to it
tnhnrl 62:d502889e74f1 83 void openWriteFile();
tnhnrl 62:d502889e74f1 84
tnhnrl 62:d502889e74f1 85 bool checkForIncomingData();
tnhnrl 62:d502889e74f1 86
tnhnrl 62:d502889e74f1 87 void endReceiveData();
tnhnrl 62:d502889e74f1 88
tnhnrl 62:d502889e74f1 89 void copyFileExample();
tnhnrl 62:d502889e74f1 90
tnhnrl 62:d502889e74f1 91 int calcCrcOneArray(int *input_array, int array_length);
tnhnrl 62:d502889e74f1 92 int calcCrcTwoArray(int *input_array, int array_length);
tnhnrl 62:d502889e74f1 93
tnhnrl 62:d502889e74f1 94 int calcCrcOne(); //used with vector _data_packet, cleaning up later
tnhnrl 62:d502889e74f1 95 int calcCrcTwo();
tnhnrl 62:d502889e74f1 96
tnhnrl 62:d502889e74f1 97 int calcCrcOneString (string string_input);
tnhnrl 62:d502889e74f1 98
tnhnrl 62:d502889e74f1 99 int calcCrcTwoString (string string_input);
tnhnrl 62:d502889e74f1 100
tnhnrl 62:d502889e74f1 101 //NEW for logging actual time
tnhnrl 62:d502889e74f1 102 void setLogTime(); //set a local time
tnhnrl 62:d502889e74f1 103
tnhnrl 62:d502889e74f1 104 int getSystemTime(); //parse the time to record to the log file
tnhnrl 62:d502889e74f1 105
tnhnrl 62:d502889e74f1 106 //NEW
tnhnrl 62:d502889e74f1 107 int sendReply();
tnhnrl 62:d502889e74f1 108 void sendReplyPacketNumber(int packet_number);
tnhnrl 62:d502889e74f1 109
tnhnrl 62:d502889e74f1 110 void resetReplyPacket();
tnhnrl 62:d502889e74f1 111
tnhnrl 62:d502889e74f1 112 void openNewMissionFile();
tnhnrl 62:d502889e74f1 113
tnhnrl 62:d502889e74f1 114 void setDataCounter(int input_counter);
tnhnrl 62:d502889e74f1 115
tnhnrl 62:d502889e74f1 116 void closeIncompleteFile();
tnhnrl 62:d502889e74f1 117
tnhnrl 62:d502889e74f1 118 void initializeLogFile();
tnhnrl 62:d502889e74f1 119
tnhnrl 62:d502889e74f1 120 int fileTransmitState();
tnhnrl 62:d502889e74f1 121
tnhnrl 62:d502889e74f1 122 int testGetFileSize();
tnhnrl 62:d502889e74f1 123
tnhnrl 62:d502889e74f1 124 int getFileSize(string filename);
tnhnrl 62:d502889e74f1 125
tnhnrl 62:d502889e74f1 126 void createEmptyLog();
tnhnrl 62:d502889e74f1 127
tnhnrl 62:d502889e74f1 128 int debugFileState();
tnhnrl 62:d502889e74f1 129
tnhnrl 62:d502889e74f1 130 //TICKER AND FUNCTION TO RECEIVE DATA
tnhnrl 62:d502889e74f1 131 void activateReceivePacket();
tnhnrl 62:d502889e74f1 132 void receiveMissionDataWithTicker();
tnhnrl 62:d502889e74f1 133
tnhnrl 62:d502889e74f1 134 void closeLogFile(); //this sets pointer to null and checks if it is closed otherwise
tnhnrl 62:d502889e74f1 135
tnhnrl 62:d502889e74f1 136 void specifyFileForTransmit(string input_string);
tnhnrl 62:d502889e74f1 137 void transmitFileFromDirectory(int file_number);
tnhnrl 62:d502889e74f1 138 void accessMbedDirectory();
tnhnrl 62:d502889e74f1 139
tnhnrl 62:d502889e74f1 140 int getFilePointerState();
tnhnrl 62:d502889e74f1 141 void testToggleFilePointer();
tnhnrl 62:d502889e74f1 142
tnhnrl 62:d502889e74f1 143 int getNumberOfPackets();
tnhnrl 62:d502889e74f1 144
tnhnrl 62:d502889e74f1 145 void readTransmitPacketOneChar();
tnhnrl 62:d502889e74f1 146
tnhnrl 62:d502889e74f1 147 bool isTransmissionComplete();
tnhnrl 62:d502889e74f1 148 int currentPacketNumber();
tnhnrl 62:d502889e74f1 149 void eraseFile();
tnhnrl 62:d502889e74f1 150
tnhnrl 62:d502889e74f1 151 string _received_filename; //testing
tnhnrl 62:d502889e74f1 152
tnhnrl 62:d502889e74f1 153 void receiveMissionDataWithFSM(); //for use in Finite State Machine
tnhnrl 62:d502889e74f1 154
tnhnrl 62:d502889e74f1 155 void openReceiveFile(string filename); //create a file with an input filename
tnhnrl 62:d502889e74f1 156
tnhnrl 62:d502889e74f1 157 void setTransmissionComplete(bool transmit_complete_status);
tnhnrl 62:d502889e74f1 158
tnhnrl 62:d502889e74f1 159 void sendStatus();
tnhnrl 62:d502889e74f1 160
tnhnrl 62:d502889e74f1 161 void intCreateDataPacket(int data_buffer[],int payload_length);
tnhnrl 63:6cb0405fc6e6 162
tnhnrl 63:6cb0405fc6e6 163 int getLogSize(); //used in state machine
tnhnrl 62:d502889e74f1 164
tnhnrl 62:d502889e74f1 165 private:
tnhnrl 62:d502889e74f1 166 int _file_number;
tnhnrl 62:d502889e74f1 167
tnhnrl 62:d502889e74f1 168 char _file_name[256]; //file name placeholder
tnhnrl 62:d502889e74f1 169 char _line_buffer[256]; //line buffer used to read file line by line
tnhnrl 62:d502889e74f1 170
tnhnrl 62:d502889e74f1 171 FILE *_fp; //the file is a class member variable
tnhnrl 62:d502889e74f1 172
tnhnrl 62:d502889e74f1 173 vector <int> _data_packet;
tnhnrl 62:d502889e74f1 174
tnhnrl 62:d502889e74f1 175 std::vector<int>::iterator _it;
tnhnrl 62:d502889e74f1 176
tnhnrl 62:d502889e74f1 177 int _current_line_length;
tnhnrl 62:d502889e74f1 178
tnhnrl 62:d502889e74f1 179 int _packet_number;
tnhnrl 62:d502889e74f1 180 int _total_number_of_packets;
tnhnrl 62:d502889e74f1 181 string _log_file_string;
tnhnrl 62:d502889e74f1 182
tnhnrl 62:d502889e74f1 183 int _reply_byte;
tnhnrl 62:d502889e74f1 184 int _reply_byte2;
tnhnrl 62:d502889e74f1 185 int _reply_byte3;
tnhnrl 62:d502889e74f1 186 int _reply_byte4;
tnhnrl 62:d502889e74f1 187 int _previous_reply_byte;
tnhnrl 62:d502889e74f1 188
tnhnrl 62:d502889e74f1 189 bool _file_transmission; //breaks out of loop in State Machine
tnhnrl 62:d502889e74f1 190
tnhnrl 62:d502889e74f1 191 float _data_log[11]; //for logging all of the data from the outer and inner loops and so on
tnhnrl 62:d502889e74f1 192
tnhnrl 62:d502889e74f1 193 int _confirmed_packet_number;
tnhnrl 62:d502889e74f1 194
tnhnrl 62:d502889e74f1 195 bool _still_transmitting_data;
tnhnrl 62:d502889e74f1 196
tnhnrl 62:d502889e74f1 197 int _transmit_counter;
tnhnrl 62:d502889e74f1 198
tnhnrl 62:d502889e74f1 199 int _file_transmission_state; //needed to test out what's going on with receiver
tnhnrl 62:d502889e74f1 200
tnhnrl 62:d502889e74f1 201 int _number_of_packets[2];
tnhnrl 62:d502889e74f1 202
tnhnrl 62:d502889e74f1 203 Ticker _mbed_transmit_ticker;
tnhnrl 62:d502889e74f1 204 Ticker _mbed_receive_ticker;
tnhnrl 62:d502889e74f1 205
tnhnrl 62:d502889e74f1 206 volatile bool _mbed_transmit_loop;
tnhnrl 62:d502889e74f1 207 volatile bool _mbed_receive_loop;
tnhnrl 62:d502889e74f1 208
tnhnrl 62:d502889e74f1 209 string _file_system_string;
tnhnrl 62:d502889e74f1 210 string _full_file_path_string;
tnhnrl 62:d502889e74f1 211
tnhnrl 62:d502889e74f1 212 bool _file_transmission_complete; //was volatile screwing up the state of this?
tnhnrl 63:6cb0405fc6e6 213
tnhnrl 63:6cb0405fc6e6 214 int _log_file_line_counter;
tnhnrl 62:d502889e74f1 215 };
tnhnrl 62:d502889e74f1 216
tnhnrl 62:d502889e74f1 217 #endif