Files
ISTTOK/epics/css/sys-mng-opi/CSS/MARTe/GAMs/isttokbiblio/MainConfigurator.h
2019-10-21 16:02:55 +01:00

384 lines
11 KiB
C++

/**
* @file allows to configure ISTTOK and upload configuration file to MARTe
*/
#ifndef CFG_UPLOADER_H
#define CFG_UPLOADER_H
#include "Level0.h"
#include "Level1.h"
#include "Level2.h"
#include "Level3.h"
#include "System.h"
#include "HttpStream.h"
#include "HttpInterface.h"
#include "HtmlStream.h"
#include "FString.h"
#include "GCReferenceContainer.h"
#include "CDBExtended.h"
#include "GlobalObjectDataBase.h"
#include "MessageHandler.h"
#include "SVGGraphicSupport.h"
//#include "WaveformFiles.h"
//#include "VectorSupport.h"
#include <dirent.h> //to load files located on the atca
#include <string.h> // to compare strings
OBJECT_DLL(MainConfigurator)
class MainConfigurator: public GCReferenceContainer, public HttpInterface, public MessageHandler{
OBJECT_DLL_STUFF(MainConfigurator)
private:
/** The id of the configuration file entry as received from the http request*/
FString configFileID;
/** The location of MARTe*/
FString marteLocation;
FString cdbString; //string to be uploaded
float Ip_max_threshold_value;
float max_value;
bool *magnetic_probes_bool_vector;
int *timewindows_dropdown_vector;
float *timewindows_time;
bool *timewindows_bool_vector;
int graphic_select;
FString save_filename;
bool save_as_bool;
bool delete_selected_points_bool;
int vector_dim_temp;
float *temp_vector_x;
float *temp_vector_y;
float temp_max_value;
float temp_min_value;
bool already_started;
bool edit_weights;
bool edit_control;
bool edit_timewindows;
bool focus_on_t_form_bool;
bool focus_on_y_form_bool;
float box_display_point_x;
float box_display_point_y;
FString temp_box_string;
FString Description;
int screen_resolution_x;
int screen_resolution_y;
FString header_colour;
FString diagnostics_parameters_colour;
FString control_parameters_colour;
FString time_windows_colour;
FString edit_colour;
FString footer_colour;
FString default_config_file_path;
FString config_files_directory;
FString selected_load_directory;
FString selected_load_file;
FString selected_save_directory;
FString selected_save_file;
FString dummy_fstring;
// MARTe advanced settings
int marte_usec_cycle_time;
int usectime_to_wait_for_starting_operation;
int datacollection_n_of_samples;
// +waveform_primary
// waveform_mode_1_positive
int primary_1_p_vector_size;
float *primary_1_p_index_vector;
float *primary_1_p_data_vector;
float primary_1_p_max_value;
float primary_1_p_min_value;
// waveform_mode_1_negative
int primary_1_n_vector_size;
float *primary_1_n_index_vector;
float *primary_1_n_data_vector;
// waveform_mode_2_positive
int primary_2_p_vector_size;
float *primary_2_p_index_vector;
float *primary_2_p_data_vector;
float primary_2_p_max_value;
float primary_2_p_min_value;
// waveform_mode_2_negative
int primary_2_n_vector_size;
float *primary_2_n_index_vector;
float *primary_2_n_data_vector;
// waveform_mode_3_positive
int primary_breakdown_vector_size;
float *primary_breakdown_index_vector;
float *primary_breakdown_data_vector;
// waveform_mode_3_negative
int primary_inversion_vector_size;
float *primary_inversion_index_vector;
float *primary_inversion_data_vector;
// +waveform_vertical
// waveform_mode_1_positive
int vertical_1_p_vector_size;
float *vertical_1_p_index_vector;
float *vertical_1_p_data_vector;
float vertical_1_p_max_value;
float vertical_1_p_min_value;
// waveform_mode_1_negative
int vertical_1_n_vector_size;
float *vertical_1_n_index_vector;
float *vertical_1_n_data_vector;
// waveform_mode_2_positive
int vertical_2_p_vector_size;
float *vertical_2_p_index_vector;
float *vertical_2_p_data_vector;
float vertical_2_p_max_value;
float vertical_2_p_min_value;
// waveform_mode_2_negative
int vertical_2_n_vector_size;
float *vertical_2_n_index_vector;
float *vertical_2_n_data_vector;
// waveform_mode_3_positive
int vertical_breakdown_vector_size;
float *vertical_breakdown_index_vector;
float *vertical_breakdown_data_vector;
// waveform_mode_3_negative
int vertical_inversion_vector_size;
float *vertical_inversion_index_vector;
float *vertical_inversion_data_vector;
// +waveform_horizontal
// waveform_mode_1_positive
int horizontal_1_p_vector_size;
float *horizontal_1_p_index_vector;
float *horizontal_1_p_data_vector;
float horizontal_1_p_max_value;
float horizontal_1_p_min_value;
// waveform_mode_1_negative
int horizontal_1_n_vector_size;
float *horizontal_1_n_index_vector;
float *horizontal_1_n_data_vector;
// waveform_mode_2_positive
int horizontal_2_p_vector_size;
float *horizontal_2_p_index_vector;
float *horizontal_2_p_data_vector;
float horizontal_2_p_max_value;
float horizontal_2_p_min_value;
// waveform_mode_2_negative
int horizontal_2_n_vector_size;
float *horizontal_2_n_index_vector;
float *horizontal_2_n_data_vector;
// waveform_mode_3_positive
int horizontal_breakdown_vector_size;
float *horizontal_breakdown_index_vector;
float *horizontal_breakdown_data_vector;
// waveform_mode_3_negative
int horizontal_inversion_vector_size;
float *horizontal_inversion_index_vector;
float *horizontal_inversion_data_vector;
// +time_windows
float discharge_time;
int number_of_cycles;
bool first_cycle_positive_bool;
bool auto_breakdown;
// positive_time_windows
int positive_number_of_time_windows;
float *positive_time_windows_values;
int *positive_primary_mode;
int *positive_horizontal_mode;
int *positive_vertical_mode;
// negative_time_windows
int negative_number_of_time_windows;
float *negative_time_windows_values;
int *negative_primary_mode;
int *negative_horizontal_mode;
int *negative_vertical_mode;
// +tomography
bool tomography_radial_bool;
bool tomography_vertical_bool;
// +electric_probes
bool electric_radial_bool;
bool electric_vertical_bool;
// +magnetic_probes
bool magnetic_radial_bool;
bool magnetic_vertical_bool;
// MirnovArrayDescription
int NumberOfProbes;
float *magnetic_Angles;
float *magnetic_Calibration;
// Measurements
int NumberOfMeasurements;
int *ProbeNumbers;
// +sine_probe =
bool sine_vertical_bool;
// +coseno_probe =
bool cosine_radial_bool;
// +hibd =
bool hibd_radial_bool;
bool hibd_vertical_bool;
// +interferometry
bool interferometry_radial_control_bool;
// +machine_protection
float iron_core_saturation_value;
float iron_core_dangerous_value;
// +plasma_parameters
float high_current_threshold_value;
// tomography
float tomography_radial_high_current_weight;
float tomography_radial_low_current_weight;
float tomography_vertical_high_current_weight;
float tomography_vertical_low_current_weight;
// electric_probes
float electric_radial_high_current_weight;
float electric_radial_low_current_weight;
float electric_vertical_high_current_weight;
float electric_vertical_low_current_weight;
// magnetic_probes
float magnetic_radial_high_current_weight;
float magnetic_radial_low_current_weight;
float magnetic_vertical_high_current_weight;
float magnetic_vertical_low_current_weight;
// sine_probe
float sine_vertical_high_current_weight;
float sine_vertical_low_current_weight;
// cosine_probe
float cosine_radial_high_current_weight;
float cosine_radial_low_current_weight;
// hibd
float hibd_radial_high_current_weight;
float hibd_radial_low_current_weight;
float hibd_vertical_high_current_weight;
float hibd_vertical_low_current_weight;
// +controller
// PID_horizontal
float PID_horizontal_proportional_soft;
float PID_horizontal_proportional_normal;
float PID_horizontal_proportional_hard;
float PID_horizontal_integral_soft;
float PID_horizontal_integral_normal;
float PID_horizontal_integral_hard;
float PID_horizontal_derivative_soft;
float PID_horizontal_derivative_normal;
float PID_horizontal_derivative_hard;
// PID_vertical =
float PID_vertical_proportional_soft;
float PID_vertical_proportional_normal;
float PID_vertical_proportional_hard;
float PID_vertical_integral_soft;
float PID_vertical_integral_normal;
float PID_vertical_integral_hard;
float PID_vertical_derivative_soft;
float PID_vertical_derivative_normal;
float PID_vertical_derivative_hard;
// PID_primary
float PID_primary_proportional_soft;
float PID_primary_proportional_normal;
float PID_primary_proportional_hard;
float PID_primary_integral_soft;
float PID_primary_integral_normal;
float PID_primary_integral_hard;
float PID_primary_derivative_soft;
float PID_primary_derivative_normal;
float PID_primary_derivative_hard;
// +FACommunicator_vertical
FString verticalPS_UARTPortAddress;
int verticalPS_SimulationTestNumber;
float verticalPS_PointOfZeroCurrent;
float verticalPS_CurrentStep;
// +FACommunicator_horizontal
FString horizontalPS_UARTPortAddress;
int horizontalPS_SimulationTestNumber;
float horizontalPS_PointOfZeroCurrent;
float horizontalPS_CurrentStep;
// +FACommunicator_primary
FString primaryPS_UARTPortAddress;
int primaryPS_SimulationTestNumber;
float primaryPS_PointOfZeroCurrent;
float primaryPS_CurrentStep;
SVGGraphicSupport *graphics_support;
public:
/** the main entry point for HttpInterface */
virtual bool ProcessHttpMessage(HttpStream &hStream);
/** the default constructor */
MainConfigurator(){
}
~MainConfigurator(){
}
virtual bool ObjectLoadSetup(ConfigurationDataBase & info, StreamInterface * err);
/** save an object content into a set of configs */
virtual bool ObjectSaveSetup( ConfigurationDataBase & info, StreamInterface * err){
GCReferenceContainer::ObjectSaveSetup(info,err);
return HttpInterface::ObjectSaveSetup(info,err);
}
private:
/**Utility method to print the form*/
bool Initialise();
bool PrintHTTPForm(HtmlStream &hmStream); // prints the html steam
bool WriteConfigurationFileWithChanges(char BaseFileFilePath[], char TargetFilePath[]); // writes a config file from the stored variables
bool ReadConfigurationFile(char FilePath[]); // reads a configuration file and saves the data to the correspondent variables
bool DualVectorSort(int vector_dim, float * vector_x, float * vector_y); // sorts 2 vectors based on the vector_x values
virtual bool RemoveRepeatedValues(int * vector_dim, float * vector_x, float * vector_y); // remove repeated values of generic vectors
virtual bool RemoveRepeatedValues(int option); // remove repeated values of a certain waveform (option dependant)
bool MoveToTemp(int option); // used with remove point
bool MoveToTempWithLimits(int option); // used with add point
bool RetrieveFromTemp(int option); // used with remove/add point
bool RemovePoint(int option, int index_to_remove); // remove a point for a certain waveform
bool DisplayPoint(int option, int index_to_display);
bool AddPoint(int option, float point_to_add_x, float point_to_add_y); // add a point to a certain waveform
bool SortTimeWindows(); // sort and remove repeated submited timewindows
};
#endif