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
Config_File_IO/ConfigFileIO.cpp
- Committer:
- tnhnrl
- Date:
- 2017-11-21
- Revision:
- 17:7c16b5671d0e
File content as of revision 17:7c16b5671d0e:
#include "ConfigFileIO.hpp" #include "StaticDefs.hpp" // This set of functions is all about the configuration file io, both to read, set, and save // todo: update write PID because there are now more gains // todo: back-check this file matches the list of parameters //Files that are present on the MBED are cleared and rewritten /* ************************** SETUP FILE SYSTEM ************************** */ // constructor ConfigFileIO::ConfigFileIO() { //LocalFileSystem local("local"); //not working in the class } void ConfigFileIO::saveNeutralPositions(float float_nbp_value, float float_nb_battpos_value) { ConfigFile write_neutral_cfg; //write to the config file char nbp_buffer[50]; sprintf(nbp_buffer, "%f", float_nbp_value); if (!write_neutral_cfg.setValue("neutral_buoyancy_engine_position_mm", nbp_buffer)) { pc().printf("\nFailure to set a value!"); } else { pc().printf("NET BUOYANCY (buoyancy engine position) CONFIG written!. \n\r"); } char nb_battpos_value[50]; sprintf(nb_battpos_value, "%f", float_nb_battpos_value); if (!write_neutral_cfg.setValue("neutral_buoyancy_battery_motor_position_mm", nb_battpos_value)) { pc().printf("\nFailure to set a value!"); } else { pc().printf("NET BUOYANCY (batt motor position) CONFIG written!. \n\r"); } //SAVE THE DATA! pc().printf("Saving Neutral Buoyancy Positions!"); if (!write_neutral_cfg.write("/local/neutral.cfg")) { pc().printf("\n\rERROR: (SAVE)Failure to write neutral.cfg file."); } else { pc().printf("\n\r(SAVE) Successful save."); } } void ConfigFileIO::loadNeutralPositions() { //reads neutral.cfg ConfigFile read_neutral_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) char * string_neutral_buoyancy_engine_position_mm = "neutral_buoyancy_engine_position_mm"; char * string_neutral_buoyancy_battery_motor_position_mm = "neutral_buoyancy_battery_motor_position_mm"; char * startup_delay_config = "startup_delay_neutral"; //not using this 10/11/2017 char * string_config_neutral_depth_ft = "neutral_dive_depth_ft"; char value[BUFSIZ]; //something like size 4096 float config_file_wait_setting_neutral; //you can set the delay in the config file! //read configuration file stored on MBED if (!read_neutral_cfg.read("/local/neutral.cfg")) { pc().printf("\n\rERROR:Failure to read neutral.cfg file."); } else pc().printf("Successfully read neutral.cfg file.\n\r"); //Read values from config file if (read_neutral_cfg.getValue(string_neutral_buoyancy_engine_position_mm, &value[0], sizeof(value))) { pc().printf("\n\r%s = %s", string_neutral_buoyancy_engine_position_mm, value); ////xbee().printf("\n\r%s = %s", string_neutral_buoyancy_engine_position_mm, value); _neutral_bce_pos_mm = atof(value); //global for now } if (read_neutral_cfg.getValue(string_neutral_buoyancy_battery_motor_position_mm, &value[0], sizeof(value))) { pc().printf("\n\r%s = %s", string_neutral_buoyancy_battery_motor_position_mm, value); ////xbee().printf("\n\r%s = %s", string_neutral_buoyancy_battery_motor_position_mm, value); _neutral_batt_pos_mm = atof(value); //global for now } } float ConfigFileIO::getBattPos() { return _neutral_batt_pos_mm; } float ConfigFileIO::getBCEPos() { return _neutral_bce_pos_mm; } //// load data on command //void ConfigFileIO::load() { // load_manual_position_PID_gains_from_config_file(); // load_auto_PID_gains_from_config_file(); // load_timers_from_config_file(); // // //add rest of loading functions // //load_initial_config_position //} // //void ConfigFileIO::write_to_config_neutral_buoyancy_position_mm(float float_nbp_value, float float_nb_battpos_value) { // ConfigFile write_neutral_cfg; //write to the config file // // char nbp_buffer[50]; // sprintf(nbp_buffer, "%f", float_nbp_value); // // if (!write_neutral_cfg.setValue("neutral_buoyancy_engine_position_mm", nbp_buffer)) { // pc().printf("\nFailure to set a value!"); // ////////xbee().printf("\nFailure to set a value!"); // } // else { // pc().printf("\n*********** NET BUOYANCY (buoyancy engine position) CONFIG written!. *****************"); // ////xbee().printf("\n*********** NET BUOYANCY (buoyancy engine position) CONFIG written!. *****************"); // } // // char nb_battpos_value[50]; // sprintf(nb_battpos_value, "%f", float_nb_battpos_value); // // if (!write_neutral_cfg.setValue("neutral_buoyancy_battery_motor_position_mm", nb_battpos_value)) { // pc().printf("\nFailure to set a value!"); // ////xbee().printf("\nFailure to set a value!"); // } // else { // pc().printf("\n*********** NET BUOYANCY (batt motor position) CONFIG written!. *****************"); // ////xbee().printf("\n*********** NET BUOYANCY (batt motor position) CONFIG written!. *****************"); // } // // //SAVE THE DATA! // // pc().printf("$$$$$$$$$$$$$$ SAVING THE DATA NOW! $$$$$$$$$$$$$$"); // //xbee().printf("$$$$$$$$$$$$$$ SAVING THE DATA NOW! $$$$$$$$$$$$$$"); // // if (!write_neutral_cfg.write("/local/neutral.cfg")) { // pc().printf("\n\rERROR: (SAVE)Failure to write neutral.cfg file."); // ////xbee().printf("\n\rERROR: (SAVE)Failure to write neutral.cfg file."); // } // else { // pc().printf("\n\r(SAVE) Successful save."); // ////xbee().printf("\n\r(SAVE) Successful save."); // } //} // //void ConfigFileIO::load_neutral_config() { //reads neutral.cfg // ConfigFile read_neutral_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\rRead NEUTRAL Config File Function"); // //xbee().printf("\n\rRead NEUTRAL Config File Function"); // // char * string_neutral_buoyancy_engine_position_mm = "neutral_buoyancy_engine_position_mm"; // char * string_neutral_buoyancy_battery_motor_position_mm = "neutral_buoyancy_battery_motor_position_mm"; // char * startup_delay_config = "startup_delay_neutral"; //not using this 10/11/2017 // char * string_config_neutral_depth_ft = "neutral_dive_depth_ft"; // // char value[BUFSIZ]; //something like size 4096 // // float config_file_wait_setting_neutral; //you can set the delay in the config file! // // //read configuration file stored on MBED // if (!read_neutral_cfg.read("/local/neutral.cfg")) { // pc().printf("\n\rERROR:Failure to read neutral.cfg file."); // ////xbee().printf("\n\rERROR:Failure to read neutral.cfg file."); // } // // //READ THE VALUES FROM THE FILES // if (read_neutral_cfg.getValue(string_neutral_buoyancy_engine_position_mm, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", string_neutral_buoyancy_engine_position_mm, value); // ////xbee().printf("\n\r%s = %s", string_neutral_buoyancy_engine_position_mm, value); // neutral_bce_position_mm = atof(value); //global for now // } // // if (read_neutral_cfg.getValue(string_neutral_buoyancy_battery_motor_position_mm, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", string_neutral_buoyancy_battery_motor_position_mm, value); // ////xbee().printf("\n\r%s = %s", string_neutral_buoyancy_battery_motor_position_mm, value); // neutral_batt_position_mm = atof(value); //global for now // } // // if (read_neutral_cfg.getValue(string_config_neutral_depth_ft, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", string_config_neutral_depth_ft, value); // ////xbee().printf("\n\r%s = %s", string_config_neutral_depth_ft, value); // neutral_depth_cmd = atof(value); //global for now // } // // if (read_neutral_cfg.getValue(startup_delay_config, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", startup_delay_config, value); // ////xbee().printf("\n\r%s = %s", startup_delay_config, value); // config_file_wait_setting_neutral = atof(value); //global for now // } // // wait(config_file_wait_setting_neutral); //delay the rest of the program so user can check data //} // ////this depth is manually changed by the user ////write the neutral dive depth to the neutral.cfg or neutral config file ////not allowing modification of position FOR NOW 10/11/2017 //void ConfigFileIO::write_neutral_dive_depth_in_ft_to_config(float write_neutral_depth_ft) { // ConfigFile write_neutral_cfg; //write to the config file // // char buffer_depth_ft[50]; // sprintf(buffer_depth_ft, "%f", write_neutral_depth_ft); // // /* ***************** convert existing data ***************** */ // char buffer_buoyancy_position[50]; // sprintf(buffer_buoyancy_position, "%f", neutral_bce_position_mm); // // char buffer_battery_position[50]; // sprintf(buffer_battery_position, "%f", neutral_batt_position_mm); // /* ***************** convert existing data ***************** */ // // //write to the file (print error if it didn't work) // // if (!write_neutral_cfg.setValue("neutral_buoyancy_engine_position_mm", buffer_buoyancy_position)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set a value!"); // } // // if (!write_neutral_cfg.setValue("neutral_buoyancy_battery_motor_position_mm", buffer_battery_position)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set a value!"); // } // // if (!write_neutral_cfg.setValue("neutral_dive_depth_ft", buffer_depth_ft)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set a value!"); // } // // //SAVE THE DATA! // if (!write_neutral_cfg.write("/local/neutral.cfg")) // { // pc().printf("\nERROR: (SAVE) Failure to write neutral.cfg file."); // ////xbee().printf("\nERROR: (SAVE) Failure to write neutral.cfg file."); // } // else // { // pc().printf("\n(SAVE) Successful save."); // } //} // //// write_dive_cycle_config(max_dive_depth_in_feet,pitch_angle,net_buoyancy,dive_time_force); //void ConfigFileIO::write_dive_cycle_config(float depth_feet, float pitch_deg, float buoyancy, float dive_time) { // ConfigFile write_divecyc_cfg; //write to the config file // // char char_depth_feet[50]; // sprintf(char_depth_feet, "%f", depth_feet); // // char char_pitch_deg[50]; // sprintf(char_pitch_deg, "%f", pitch_deg); // // char char_buoyancy[50]; // sprintf(char_buoyancy, "%f", buoyancy); // // char char_dive_time[50]; // sprintf(char_dive_time, "%f", dive_time); // // float startup_delay = 0.1; // char char_startup_delay[50]; // sprintf(char_startup_delay, "%f", startup_delay); // // //write to the file (print error if it didn't work) // // if (!write_divecyc_cfg.setValue("dive_cycle_depth_cmd", char_depth_feet)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set dive_cycle_depth_cmd value!"); // } // // if (!write_divecyc_cfg.setValue("dive_cycle_pitch_cmd", char_pitch_deg)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set dive_cycle_pitch_cmd value!"); // } // // if (!write_divecyc_cfg.setValue("dive_cycle_net_buoyancy_cmd", char_buoyancy)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set dive_cycle_net_buoyancy_cmd value!"); // } // // if (!write_divecyc_cfg.setValue("emergency_surface_delay", char_dive_time)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set emergency_surface_delay value!"); // } // // if (!write_divecyc_cfg.setValue("startup_delay_dive", char_startup_delay)) { //writes Neutral_Buoyancy=4.0 //psi // pc().printf("\nFailure to set startup_delay_dive value!"); // } // // //SAVE THE DATA! // if (!write_divecyc_cfg.write("/local/neutral.cfg")) // { // pc().printf("\nERROR: (SAVE) Failure to write neutral.cfg file."); // ////xbee().printf("\nERROR: (SAVE) Failure to write neutral.cfg file."); // } // else // { // pc().printf("\n(SAVE) Successful save."); // } //} // //void ConfigFileIO::load_dive_cycle_config() { //reads divecyc.cfg // ConfigFile dive_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\rRead DIVE CYCLE Config File Function"); // //xbee().printf("\n\rRead DIVE CYCLE Config File Function"); // // char * string_max_depth_config_value = "dive_cycle_depth_cmd"; // char * string_dive_cycle_pitch_angle_config_value = "dive_cycle_pitch_cmd"; // char * string_dive_cycle_net_buoyancy_input_mL = "dive_cycle_net_buoyancy_cmd"; // char * startup_delay_config = "startup_delay_dive"; // // char value1[BUFSIZ]; //something like size 4096 // char value2[BUFSIZ]; //something like size 4096 // char value3[BUFSIZ]; //something like size 4096 // char value4[BUFSIZ]; //something like size 4096 // char value5[BUFSIZ]; //something like size 4096 // // float config_file_wait_setting_dive; //you can set the delay in the config file! // // //read configuration file stored on MBED // if (!dive_cfg.read("/local/divecyc.cfg")) { // pc().printf("\nERROR:Failure to read a configuration file."); // ////xbee().printf("\nERROR:Failure to read a configuration file."); // } // // //READ THE VALUES FROM THE FILES // if (dive_cfg.getValue(string_max_depth_config_value, &value1[0], sizeof(value1))) { // pc().printf("\n\r%s = %s", string_max_depth_config_value, value1); // ////xbee().printf("\n\r%s = %s", string_max_depth_config_value, value1); // dive_cycle_depth_cmd = atof(value1); // } // // if (dive_cfg.getValue(string_dive_cycle_pitch_angle_config_value, &value2[0], sizeof(value2))) { // pc().printf("\n\r%s = %s", string_dive_cycle_pitch_angle_config_value, value2); // ////xbee().printf("\n\r%s = %s", string_dive_cycle_pitch_angle_config_value, value2); // dive_cycle_pitch_cmd = atof(value2); // } // // if (dive_cfg.getValue(string_dive_cycle_net_buoyancy_input_mL, &value3[0], sizeof(value3))) { // pc().printf("\n\r%s = %s", string_dive_cycle_net_buoyancy_input_mL, value3); // ////xbee().printf("\n\r%s = %s", string_dive_cycle_net_buoyancy_input_mL, value3); // dive_cycle_net_buoyancy_cmd = atof(value3); // } //} // //void ConfigFileIO::load_initial_config_position() { //reads starting.cfg // ConfigFile starting_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\rRead Starting Config File Function"); // //xbee().printf("\n\rRead Starting Config File Function"); // // /* values that the motors go to when they start */ // char * positionCmd_config = "bce_setPoint"; // char * battery_positionCmd_config = "batt_setPoint"; // /* values that the motors go to when they start */ // // char * depth_setPoint_config = "depth_setPoint"; //pressure_PSI_setPoint // char * depth_controller_deadband_config = "depth_deadband"; // char * DIVE_DEPTH_config = "DIVE_DEPTH"; //config file has DIVE_DEPTH=0.0 // // char value[BUFSIZ]; //something like size 4096 // // //read configuration file stored on MBED // if (!starting_cfg.read("/local/starting.cfg")) { // pc().printf("\n\rERROR:Failure to read starting.cfg file."); // ////xbee().printf("\n\rERROR:Failure to read starting.cfg file."); // } // // //READ THE VALUES FROM THE FILES // if (starting_cfg.getValue(positionCmd_config, &value[0], sizeof(value))) { // pc().printf("%\n\rs=%s", positionCmd_config, value); // ////xbee().printf("\n\r%s = %s", positionCmd_config, value); // bce_setPoint = atof(value); // } // // if (starting_cfg.getValue(battery_positionCmd_config, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", battery_positionCmd_config, value); // ////xbee().printf("\n\r%s = %s", battery_positionCmd_config, value); // batt_setPoint = atof(value); //THIS IS WHERE YOU SET THE STUFF IN THE STARTUP // } // // if (starting_cfg.getValue(depth_setPoint_config, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", depth_setPoint_config, value); // ////xbee().printf("\n\r%s = %s", depth_setPoint_config, value); // depth_setPoint = atof(value); // } // // if (starting_cfg.getValue(depth_controller_deadband_config, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", depth_controller_deadband_config, value); // ////xbee().printf("\n\r%s = %s", depth_controller_deadband_config, value); // depth_deadband = atof(value); // //this is not coverted to PSI, do that later // } // // if (starting_cfg.getValue(DIVE_DEPTH_config, &value[0], sizeof(value))) { // pc().printf("\n\r%s = %s", DIVE_DEPTH_config, value); // ////xbee().printf("\n\r%s = %s", DIVE_DEPTH_config, value); // dive_cycle_depth_cmd = atof(value); //write this from the config file // } // // //READ THE VALUES FROM THE FILES // pc().printf("\n\n\rReading from starting.cfg"); // pc().printf("\n\r(STARTING) Buoyancy_Engine_pos: %3.3f BATT_pos: %3.3f", bce_setPoint, batt_setPoint); // pc().printf("\n\r(STARTING) Pressure setPoint: %3.3f (deadband: %3.3f)(STARTING)", depth_setPoint, depth_deadband); // // //xbee().printf("\n\n\rReading from starting.cfg"); // //xbee().printf("\n\r(STARTING) Buoyancy_Engine_pos: %3.3f BATT_pos: %3.3f", bce_setPoint, batt_setPoint); // //xbee().printf("\n\r(STARTING) Pressure setPoint: %3.3f (deadband: %3.3f)(STARTING)", depth_setPoint, depth_deadband); //} // //void ConfigFileIO::load_auto_PID_gains_from_config_file() { // int gain_counter = 0; // // //PID.cfg // ConfigFile read_PID_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\n\rReading AUTO_PID.cfg File Function"); // //xbee().printf("\n\n\rReading AUTO_PID.cfg File Function"); // // char * string_BE_P_value = "depth_controller_P"; // char * string_BE_I_value = "depth_controller_I"; // char * string_BE_D_value = "depth_controller_D"; // // char * string_BATT_P_value = "pitch_controller_P"; // char * string_BATT_I_value = "pitch_controller_I"; // char * string_BATT_D_value = "pitch_controller_D"; // // char value[BUFSIZ]; //something like size 4096 // // float float_BE_P_value; // float float_BE_I_value; // float float_BE_D_value; // // float float_BATT_P_value; // float float_BATT_I_value; // float float_BATT_D_value; // // //read configuration file stored on MBED // if (!read_PID_cfg.read("/local/AUTO_PID.cfg")) // { // pc().printf("\n\rERROR: Failure to read AUTO_PID.cfg file."); // ////xbee().printf("\n\rERROR: Failure to read AUTO_PID.cfg file."); // gain_counter++; // } // // //READ THE VALUES FROM THE FILES // if (read_PID_cfg.getValue(string_BE_P_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BE_P_value, value); // ////xbee().printf("\n\r%s = %s", string_BE_P_value, value); // float_BE_P_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BE_I_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BE_I_value, value); // ////xbee().printf("\n\r%s = %s", string_BE_I_value, value); // float_BE_I_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BE_D_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BE_D_value, value); // ////xbee().printf("\n\r%s = %s", string_BE_D_value, value); // float_BE_D_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BATT_P_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BATT_P_value, value); // ////xbee().printf("\n\r%s = %s", string_BATT_P_value, value); // float_BATT_P_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BATT_I_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BATT_I_value, value); // ////xbee().printf("\n\r%s = %s", string_BATT_I_value, value); // float_BATT_I_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BATT_D_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BATT_D_value, value); // ////xbee().printf("\n\r%s = %s", string_BATT_D_value, value); // float_BATT_D_value = atof(value); // gain_counter++; // } // // /* set these global parameters from the config file */ // depth_controller_P = float_BE_P_value; // depth_controller_I = float_BE_I_value; // depth_controller_D = float_BE_D_value; // // pitch_controller_P = float_BATT_P_value; // pitch_controller_I = float_BATT_I_value; // pitch_controller_D = float_BATT_D_value; // // if (gain_counter != 6) { // pc().printf("\b\rAUTO_PID gain settings have not been properly loaded!"); // ////xbee().printf("\n\rAUTO_PID gain settings have not been properly loaded!"); // wait(3); //test against watchdog... // } // // else { // pc().printf("\n\rAUTO_PID gain settings loaded."); // ////xbee().printf("\n\rAUTO_PID gain settings loaded."); // } //} // //// from "PID.cfg" //void ConfigFileIO::load_manual_position_PID_gains_from_config_file() { // int gain_counter = 0; // // //PID.cfg // ConfigFile read_PID_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\n\rReading MAN_PID.cfg File Function"); // //xbee().printf("\n\n\rReading MAN_PID.cfg File Function"); // // char * string_BE_P_value = "buoyancy_engine_P"; // char * string_BE_I_value = "buoyancy_engine_I"; // char * string_BE_D_value = "buoyancy_engine_D"; // // char * string_BATT_P_value = "battery_P"; // char * string_BATT_I_value = "battery_I"; // char * string_BATT_D_value = "battery_D"; // // char value[BUFSIZ]; //something like size 4096 // // float float_BE_P_value; // float float_BE_I_value; // float float_BE_D_value; // // float float_BATT_P_value; // float float_BATT_I_value; // float float_BATT_D_value; // // //read configuration file stored on MBED // if (!read_PID_cfg.read("/local/MAN_PID.cfg")) // { // pc().printf("\n\rERROR: Failure to read MAN_PID.cfg file."); // ////xbee().printf("\n\rERROR: Failure to read MAN_PID.cfg file."); // gain_counter++; // } // // //READ THE VALUES FROM THE FILES // if (read_PID_cfg.getValue(string_BE_P_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BE_P_value, value); // ////xbee().printf("\n\r%s = %s", string_BE_P_value, value); // float_BE_P_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BE_I_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BE_I_value, value); // ////xbee().printf("\n\r%s = %s", string_BE_I_value, value); // float_BE_I_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BE_D_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BE_D_value, value); // ////xbee().printf("\n\r%s = %s", string_BE_D_value, value); // float_BE_D_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BATT_P_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BATT_P_value, value); // ////xbee().printf("\n\r%s = %s", string_BATT_P_value, value); // float_BATT_P_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BATT_I_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BATT_I_value, value); // ////xbee().printf("\n\r%s = %s", string_BATT_I_value, value); // float_BATT_I_value = atof(value); // gain_counter++; // } // // if (read_PID_cfg.getValue(string_BATT_D_value, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", string_BATT_D_value, value); // ////xbee().printf("\n\r%s = %s", string_BATT_D_value, value); // float_BATT_D_value = atof(value); // gain_counter++; // } // // /* set these global parameters from the config file */ // bce_position_P = float_BE_P_value; // bce_position_I = float_BE_I_value; // bce_position_D = float_BE_D_value; // // batt_position_P = float_BATT_P_value; // batt_position_I = float_BATT_I_value; // batt_position_D = float_BATT_D_value; // // if (gain_counter != 6) { // pc().printf("\b\rMAN_PID gain settings have not been properly loaded!"); // ////xbee().printf("\n\rMAN_PID gain settings have not been properly loaded!"); // wait(3); //test against watchdog... // } // // else { // pc().printf("\n\rMAN_PID gain settings loaded."); // ////xbee().printf("\n\rMAN_PID gain settings loaded."); // } //} // // ////write only the automated PID control gains //void ConfigFileIO::write_manual_position_PID_values_to_config(float battP, float battI, float battD, float beP, float beI, float beD) { // ConfigFile write_PID_cfg; //write to pid.cfg file // // pc().printf("\n\rCONFIG FILE IO write_manual_position_PID_values_to_config\n"); // // char char_battP[50]; // sprintf(char_battP, "%0.5f", battP); // char char_battI[50]; // sprintf(char_battI, "%0.5f", battI); // char char_battD[50]; // sprintf(char_battD, "%0.5f", battD); // // char char_beP[50]; // sprintf(char_beP, "%0.5f", beP); // char char_beI[50]; // sprintf(char_beI, "%0.5f", beI); // char char_beD[50]; // sprintf(char_beD, "%0.5f", beD); // // if (!write_PID_cfg.setValue("buoyancy_engine_P", char_beP)) // { // pc().printf("\nFailure to set buoyancy_engine_P value!"); // } // // if (!write_PID_cfg.setValue("buoyancy_engine_I", char_beI)) // { // pc().printf("\nFailure to set buoyancy_engine_I value!"); // } // // if (!write_PID_cfg.setValue("buoyancy_engine_D", char_beD)) // { // pc().printf("\nFailure to set buoyancy_engine_D value!"); // } // // if (!write_PID_cfg.setValue("battery_P", char_battP)) // { // pc().printf("\nFailure to set battery_P value!"); // } // // if (!write_PID_cfg.setValue("battery_I", char_battI)) // { // pc().printf("\nFailure to set battery_I value!"); // } // // if (!write_PID_cfg.setValue("battery_D", char_battD)) // { // pc().printf("\nFailure to set battery_D value!"); // } // // /* ************** SAVE TO PID.cfg ************** */ // if (!write_PID_cfg.write("/local/MAN_PID.cfg")) { // pc().printf("\nERROR: (SAVE) Failure to write MAN_PID.cfg file."); // ////xbee().printf("\nERROR: (SAVE) Failure to write MAN_PID.cfg file."); // } // // else { // pc().printf("\nMAN_PID.cfg save successful."); // ////xbee().printf("\nMAN_PID.cfg save successful."); // } // /* ************** SAVE TO PID.cfg ************** */ //} // //void ConfigFileIO::write_auto_PID_values_to_config(float battP, float battI, float battD, float beP, float beI, float beD) { // ConfigFile write_PID_cfg; //write to pid.cfg file // // pc().printf("\n\rCONFIG FILE IO write_auto_PID_values_to_config\n"); // // char char_battP[50]; // sprintf(char_battP, "%0.5f", battP); // char char_battI[50]; // sprintf(char_battI, "%0.5f", battI); // char char_battD[50]; // sprintf(char_battD, "%0.5f", battD); // // char char_beP[50]; // sprintf(char_beP, "%0.5f", beP); // char char_beI[50]; // sprintf(char_beI, "%0.5f", beI); // char char_beD[50]; // sprintf(char_beD, "%0.5f", beD); // // if (!write_PID_cfg.setValue("depth_controller_P", char_beP)) // { // pc().printf("\nFailure to set depth_controller_P value!"); // } // // if (!write_PID_cfg.setValue("depth_controller_I", char_beI)) // { // pc().printf("\nFailure to set depth_controller_I value!"); // } // // if (!write_PID_cfg.setValue("depth_controller_D", char_beD)) // { // pc().printf("\nFailure to set depth_controller_D value!"); // } // // if (!write_PID_cfg.setValue("pitch_controller_P", char_battP)) // { // pc().printf("\nFailure to set pitch_controller_P value!"); // } // // if (!write_PID_cfg.setValue("pitch_controller_I", char_battI)) // { // pc().printf("\nFailure to set pitch_controller_I value!"); // } // // if (!write_PID_cfg.setValue("pitch_controller_D", char_battD)) // { // pc().printf("\nFailure to set pitch_controller_D value!"); // } // // /* ************** SAVE TO PID.cfg ************** */ // if (!write_PID_cfg.write("/local/AUTO_PID.cfg")) { // pc().printf("\n\rERROR: (SAVE) Failure to write AUTO_PID.cfg file."); // ////xbee().printf("\n\rERROR: (SAVE) Failure to write AUTO_PID.cfg file."); // } // // else { // pc().printf("\n\rAUTO_PID.cfg save successful."); // ////xbee().printf("\n\rAUTO_PID.cfg save successful."); // } // /* ************** SAVE TO PID.cfg ************** */ //} // //void ConfigFileIO::write_timers_to_config_file(float force, float neutral, float dive) { // //timers.cfg file // ConfigFile write_TIMERS_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // char char_force[50]; // sprintf(char_force, "%0.5f", force); //convert the float values into char values // // char char_neutral[50]; // sprintf(char_neutral, "%0.5f", neutral); //convert the float values into char values // // char char_dive[50]; // sprintf(char_dive, "%0.5f", dive); //convert the float values into char values // // if (!write_TIMERS_cfg.setValue("timed_emergency_surface_seconds", char_force)) // { // pc().printf("\n\rFailure to set timed_emergency_surface_seconds value!"); // ////xbee().printf("\n\rFailure to set timed_emergency_surface_seconds value!"); // } // // if (!write_TIMERS_cfg.setValue("timed_neutral_emergency_surface_seconds", char_neutral)) // { // pc().printf("\n\rFailure to set timed_neutral_emergency_surface_seconds value!"); // ////xbee().printf("\n\rFailure to set timed_neutral_emergency_surface_seconds value!"); // } // // if (!write_TIMERS_cfg.setValue("timed_dive_emergency_surface_seconds", char_dive)) // { // pc().printf("\n\rFailure to set timed_dive_emergency_surface_seconds value!"); // ////xbee().printf("\n\rFailure to set timed_dive_emergency_surface_seconds value!"); // } // // /* ************** SAVE TO timers.cfg ************** */ // if (!write_TIMERS_cfg.write("/local/timers.cfg")) { // pc().printf("\n\rERROR: (SAVE) Failure to write timers.cfg file."); // ////xbee().printf("\n\rERROR: (SAVE) Failure to write timers.cfg file."); // wait(3); //debugging // } // // else { // pc().printf("\n\rtimers.cfg save successful."); // ////xbee().printf("\n\rtimers.cfg save successful."); // } // /* ************** SAVE TO timers.cfg ************** */ //} // //void ConfigFileIO::load_timers_from_config_file() { // //timers.cfg file // ConfigFile read_TIMERS_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\n\rReading timers.cfg file"); // //xbee().printf("\n\n\rReading timers.cfg file"); // // char * timed_emergency_surface_seconds_config = "timed_emergency_surface_seconds"; // char * timed_neutral_emergency_surface_config = "timed_neutral_emergency_surface_seconds"; // char * timed_dive_emergency_surface_config = "timed_dive_emergency_surface_seconds"; // // char value[BUFSIZ]; //set a buffer value, 4096 // // //read configuration file stored on MBED // if (!read_TIMERS_cfg.read("/local/timers.cfg")) // { // pc().printf("\n\rERROR: Failure to read timers.cfg file."); // ////xbee().printf("\n\rERROR: Failure to read timers.cfg file."); // } // else { // pc().printf("\n\rTimers.cfg loaded!"); // ////xbee().printf("\n\rTimers.cfg loaded!"); // } // // int timers_counter = 0; // // if (read_TIMERS_cfg.getValue(timed_emergency_surface_seconds_config, &value[0], sizeof(value))) // { // pc().printf("\n\r%s=%s", timed_emergency_surface_seconds_config, value); // ////xbee().printf("\n\r%s=%s", timed_emergency_surface_seconds_config, value); // emergency_timeout = atof(value); //write this from the config file // timers_counter++; // } // // if (read_TIMERS_cfg.getValue(timed_neutral_emergency_surface_config, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", timed_neutral_emergency_surface_config, value); // ////xbee().printf("\n\r%s = %s", timed_neutral_emergency_surface_config, value); // neutral_timeout = atof(value); //write this from the config file // timers_counter++; // } // // if (read_TIMERS_cfg.getValue(timed_dive_emergency_surface_config, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", timed_dive_emergency_surface_config, value); // ////xbee().printf("\n\r%s = %s", timed_dive_emergency_surface_config, value); // dive_cycle_timeout = atof(value); //write this from the config file // timers_counter++; // } // // if (timers_counter == 3) { // pc().printf("\n\rAll timers loaded successfully!"); // ////xbee().printf("\n\rAll timers loaded successfully!"); // } // else { // pc().printf("\n\rTIMERS NOT LOADED!"); // ////xbee().printf("\n\rTIMERS NOT LOADED!"); // } //} // // //void ConfigFileIO::read_config_file() //{ // ConfigFile read_cfg; //create this object (KEEP THIS LOCAL, do not mess with other config object) // // pc().printf("\n\rRead input.cfg File"); // //xbee().printf("\n\rRead input.cfg File"); // // //Ignore comments in a configuration file. // //Ignore empty lines in a configuration file. // //Keep spaces in side of keys and values. // // char * key1 = "depth_config"; // char * key2 = "pitch_angle_config"; // char * key3 = "net_buoyancy_config"; //// char * key4 = "MyKey"; // // char value[BUFSIZ]; //something like size 4096 // // //read configuration file stored on MBED // if (!read_cfg.read("/local/input.cfg")) // { // pc().printf("\nERROR:Failure to read input.cfg configuration file."); // ////xbee().printf("\nERROR:Failure to read input.cfg configuration file."); // } // // //read the values from the file // if (read_cfg.getValue(key1, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", key1, value); // ////xbee().printf("\n\r%s = %s", key1, value); // depth_setPoint = atof(value); // } // else // { // ////xbee().printf("\n\rERROR: File is blank!"); // pc().printf("\n\rERROR: File is blank!"); // } // // //test the first key, if there is nothing present then the rest will not print either // if (read_cfg.getValue(key2, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", key2, value); // ////xbee().printf("\n\r%s = %s", key2, value); // pitch_setPoint = atof(value); // } // // if (read_cfg.getValue(key3, &value[0], sizeof(value))) // { // pc().printf("\n\r%s = %s", key3, value); // ////xbee().printf("\n\r%s = %s", key3, value); // neutral_bce_position_mm = atof(value); // } //}