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

299 lines
8.5 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 <dirent.h> //to load files located on the atca
#include <string.h> // to compare strings
OBJECT_DLL(AdvancedConfigurator)
class AdvancedConfigurator: public GCReferenceContainer, public HttpInterface, public MessageHandler{
OBJECT_DLL_STUFF(AdvancedConfigurator)
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
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 focus_on_t_form_bool;
bool focus_on_y_form_bool;
float box_display_point_x;
bool edit_main;
bool edit_control;
bool edit_general;
bool end_discharge_after_unsuccess_bool;
FString Description;
FString header_colour;
FString colour1;
FString colour2;
FString colour3;
FString colour4;
FString colour5;
FString footer_colour;
FString selected_load_directory;
FString selected_load_file;
FString selected_save_directory;
FString selected_save_file;
FString dummy_fstring;
FString default_config_file_path;
FString config_files_directory;
//MARTe configuration
int thread_priority;
int run_on_cpu;
//Main
int usec_pre_pulse_time;
int maximum_inversion_usectime;
FString tomography_file_to_load;
int tomography_n_channels;
int *tomography_online_channels;
float iron_core_saturation_value;
float iron_core_dangerous_value;
int time_between_online_and_discharge;
float puffing_duration_in_puffing_feedback_in_ms;
float maximum_idle_time_in_puffing_feedback_in_ms;
float minimum_idle_time_in_puffing_feedback_in_ms;
float puffing_feedback_usec_change_percentage_by_cycle;
int puffing_feedback_mode;
// +control settings
// PID_horizontal
float horizontalPS_P;
float horizontalPS_I;
float horizontalPS_D;
// PID_vertical =
float verticalPS_P;
float verticalPS_I;
float verticalPS_D;
// PID_primary
float primaryPS_P;
float primaryPS_I;
float primaryPS_D;
FString control_file_to_load;
int puffing_mode; //0-> 0ff 1->time-windows, percentage output, 2->time windows with feedback, 3-> absolute time, out percentage, 4-> open loop up to time windows (use absolute timing waveform until the end of breakdown), then feedback
// +waveform_primary
// waveform_mode_1_positive
int primary_breakdown_vector_size;
float *primary_breakdown_index_vector;
float *primary_breakdown_data_vector;
// waveform_mode_1_negative
int primary_breakdown_negative_vector_size;
float *primary_breakdown_negative_index_vector;
float *primary_breakdown_negative_data_vector;
// waveform_mode_2_positive
int primary_inversion_positive_vector_size;
float *primary_inversion_positive_index_vector;
float *primary_inversion_positive_data_vector;
// waveform_mode_2_negative
int primary_inversion_negative_vector_size;
float *primary_inversion_negative_index_vector;
float *primary_inversion_negative_data_vector;
// +waveform_vertical
// waveform_mode_1_positive
int vertical_breakdown_vector_size;
float *vertical_breakdown_index_vector;
float *vertical_breakdown_data_vector;
// waveform_mode_1_negative
int vertical_breakdown_negative_vector_size;
float *vertical_breakdown_negative_index_vector;
float *vertical_breakdown_negative_data_vector;
// waveform_mode_2_positive
int vertical_inversion_positive_vector_size;
float *vertical_inversion_positive_index_vector;
float *vertical_inversion_positive_data_vector;
// waveform_mode_2_negative
int vertical_inversion_negative_vector_size;
float *vertical_inversion_negative_index_vector;
float *vertical_inversion_negative_data_vector;
// +waveform_horizontal
// waveform_mode_1_positive
int horizontal_breakdown_vector_size;
float *horizontal_breakdown_index_vector;
float *horizontal_breakdown_data_vector;
// waveform_mode_1_negative
int horizontal_breakdown_negative_vector_size;
float *horizontal_breakdown_negative_index_vector;
float *horizontal_breakdown_negative_data_vector;
// waveform_mode_2_positive
int horizontal_inversion_positive_vector_size;
float *horizontal_inversion_positive_index_vector;
float *horizontal_inversion_positive_data_vector;
// waveform_mode_2_negative
int horizontal_inversion_negative_vector_size;
float *horizontal_inversion_negative_index_vector;
float *horizontal_inversion_negative_data_vector;
// +waveform_toroidal
// waveform_mode_1_positive
int toroidal_1_p_vector_size;
float *toroidal_1_p_index_vector;
float *toroidal_1_p_data_vector;
// +waveform_puffing
// waveform_mode_1_positive
int puffing_1_p_vector_size;
float *puffing_1_p_index_vector;
float *puffing_1_p_data_vector;
// waveform_mode_1_negative
int puffing_1_n_vector_size;
float *puffing_1_n_index_vector;
float *puffing_1_n_data_vector;
// waveform_mode_2_positive
int puffing_2_p_vector_size;
float *puffing_2_p_index_vector;
float *puffing_2_p_data_vector;
// waveform_mode_2_negative
int puffing_2_n_vector_size;
float *puffing_2_n_index_vector;
float *puffing_2_n_data_vector;
// waveform_mode_2_negative
int puffing_absolute_time_vector_size;
float *puffing_absolute_time_index_vector;
float *puffing_absolute_time_data_vector;
// maximum and minimum waveform values
float primary_1_p_max_value;
float primary_1_p_min_value;
float primary_2_p_max_value;
float primary_2_p_min_value;
float vertical_1_p_max_value;
float vertical_1_p_min_value;
float vertical_2_p_max_value;
float vertical_2_p_min_value;
float horizontal_1_p_max_value;
float horizontal_1_p_min_value;
float horizontal_2_p_max_value;
float horizontal_2_p_min_value;
float toroidal_1_p_max_value;
float toroidal_1_p_min_value;
float puffing_1_p_max_value;
float puffing_1_p_min_value;
float puffing_2_p_max_value;
float puffing_2_p_min_value;
// +FACommunicator_vertical
FString verticalPS_UARTPortAddress;
float verticalPS_PointOfZeroCurrent;
float verticalPS_CurrentStep;
// +FACommunicator_horizontal
FString horizontalPS_UARTPortAddress;
float horizontalPS_PointOfZeroCurrent;
float horizontalPS_CurrentStep;
// +FACommunicator_primary
FString primaryPS_UARTPortAddress;
float primaryPS_PointOfZeroCurrent;
float primaryPS_CurrentStep;
SVGGraphicSupport *graphics_support;
public:
/** the main entry point for HttpInterface */
virtual bool ProcessHttpMessage(HttpStream &hStream);
/** the default constructor */
AdvancedConfigurator(){
}
~AdvancedConfigurator(){
}
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
};
#endif