You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							421 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							421 lines
						
					
					
						
							14 KiB
						
					
					
				
								/*
							 | 
						|
								 * This program source code file is part of KICAD, a free EDA CAD application.
							 | 
						|
								 *
							 | 
						|
								 * Copyright (C) 1992-2020 Kicad Developers, see AUTHORS.txt for contributors.
							 | 
						|
								 *
							 | 
						|
								 * This program is free software; you can redistribute it and/or
							 | 
						|
								 * modify it under the terms of the GNU General Public License
							 | 
						|
								 * as published by the Free Software Foundation; either version 3
							 | 
						|
								 * of the License, or (at your option) any later version.
							 | 
						|
								 *
							 | 
						|
								 * This program is distributed in the hope that it will be useful,
							 | 
						|
								 * but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						|
								 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						|
								 * GNU General Public License for more details.
							 | 
						|
								 *
							 | 
						|
								 * You should have received a copy of the GNU General Public License along
							 | 
						|
								 * with this program.  If not, see <http://www.gnu.org/licenses/>.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * @file pcb_calculator.h
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#ifndef PCB_CALCULATOR_H
							 | 
						|
								#define PCB_CALCULATOR_H
							 | 
						|
								
							 | 
						|
								#include <pcb_calculator_frame_base.h>
							 | 
						|
								
							 | 
						|
								#include <attenuator_classes.h>
							 | 
						|
								#include <class_regulator_data.h>
							 | 
						|
								#include <transline.h> // Included for SUBST_PRMS_ID definition.
							 | 
						|
								#include <transline_ident.h>
							 | 
						|
								
							 | 
						|
								extern const wxString PcbCalcDataFileExt;
							 | 
						|
								
							 | 
						|
								class PCB_CALCULATOR_SETTINGS;
							 | 
						|
								
							 | 
						|
								/* Class PCB_CALCULATOR_FRAME_BASE
							 | 
						|
								This is the main frame for this application
							 | 
						|
								*/
							 | 
						|
								class PCB_CALCULATOR_FRAME : public PCB_CALCULATOR_FRAME_BASE
							 | 
						|
								{
							 | 
						|
								public:
							 | 
						|
								    REGULATOR_LIST m_RegulatorList;      // the list of known regulator
							 | 
						|
								
							 | 
						|
								private:
							 | 
						|
								    bool m_RegulatorListChanged; // set to true when m_RegulatorList
							 | 
						|
								                                 // was modified, and the corresponging file
							 | 
						|
								                                 // must be rewritten
							 | 
						|
								
							 | 
						|
								    enum                     // Which dimension is controlling the track
							 | 
						|
								    {                        // width / current calculations:
							 | 
						|
								        TW_MASTER_CURRENT,   // the maximum current,
							 | 
						|
								        TW_MASTER_EXT_WIDTH, // the external trace width,
							 | 
						|
								        TW_MASTER_INT_WIDTH  // or the internal trace width?
							 | 
						|
								    } m_TWMode;
							 | 
						|
								
							 | 
						|
								    bool m_TWNested; // Used to stop events caused by setting the answers.
							 | 
						|
								
							 | 
						|
								    enum TRANSLINE_TYPE_ID m_currTransLineType;
							 | 
						|
								    TRANSLINE*             m_currTransLine; // a pointer to the active transline
							 | 
						|
								    // List of translines: ordered like in dialog menu list
							 | 
						|
								    std::vector<TRANSLINE_IDENT*> m_transline_list;
							 | 
						|
								
							 | 
						|
								    ATTENUATOR* m_currAttenuator;
							 | 
						|
								    // List ofattenuators: ordered like in dialog menu list
							 | 
						|
								    std::vector<ATTENUATOR*> m_attenuator_list;
							 | 
						|
								    wxString                 m_lastSelectedRegulatorName; // last regulator name selected
							 | 
						|
								
							 | 
						|
								public:
							 | 
						|
								    PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent );
							 | 
						|
								    ~PCB_CALCULATOR_FRAME();
							 | 
						|
								
							 | 
						|
								private:
							 | 
						|
								    // Event handlers
							 | 
						|
								    void OnClosePcbCalc( wxCloseEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    // These 3 functions are called by the OnPaint event, to draw
							 | 
						|
								    // icons that show the current item on the specific panels
							 | 
						|
								    void OnPaintTranslinePanel( wxPaintEvent& event ) override;
							 | 
						|
								    void OnPaintAttenuatorPanel( wxPaintEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    // Config read-write, virtual from EDA_BASE_FRAME
							 | 
						|
								    void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
							 | 
						|
								    void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
							 | 
						|
								
							 | 
						|
								    // R/W data files:
							 | 
						|
								    bool ReadDataFile();
							 | 
						|
								    bool WriteDataFile();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @return the full filename of the selected pcb_calculator data file
							 | 
						|
								     */
							 | 
						|
								    const wxString GetDataFilename();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Initialize the full filename of the selected pcb_calculator data file
							 | 
						|
								     * force the standard extension of the file (.pcbcalc)
							 | 
						|
								     * @param aFilename = the full filename, with or without extension
							 | 
						|
								     */
							 | 
						|
								    void SetDataFilename( const wxString& aFilename );
							 | 
						|
								
							 | 
						|
								    // Trace width / maximum current capability calculations.
							 | 
						|
								    /**
							 | 
						|
								     * Function TW_Init
							 | 
						|
								     * Read config and init dialog widgets values
							 | 
						|
								     */
							 | 
						|
								    void TW_Init();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * E-Series Resistor calculator Panel
							 | 
						|
								     * Called on calculator start to display markdown formula explanations
							 | 
						|
								     */
							 | 
						|
								    void ES_Init( void );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Called on calculate button and executes all E-series calculations
							 | 
						|
								     *
							 | 
						|
								     */
							 | 
						|
								
							 | 
						|
								    void OnCalculateESeries( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Radio Buttons to select the E-serie for the resistor calculator
							 | 
						|
								     * @param event contains the radio button state
							 | 
						|
								     */
							 | 
						|
								    void OnESerieSelection( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TW_WriteConfig
							 | 
						|
								     * Write Track width parameters in config
							 | 
						|
								     */
							 | 
						|
								    void TW_WriteConfig();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTWParametersChanged
							 | 
						|
								     * Called when the user changes the general parameters (i.e., anything that
							 | 
						|
								     * is not one of the controlling values). This update the calculations.
							 | 
						|
								     */
							 | 
						|
								    void OnTWParametersChanged( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTWCalculateFromCurrent
							 | 
						|
								     * Called when the user changes the desired maximum current. This sets the
							 | 
						|
								     * current as the controlling value and performs the calculations.
							 | 
						|
								     */
							 | 
						|
								    void OnTWCalculateFromCurrent( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTWCalculateFromExtWidth
							 | 
						|
								     * Called when the user changes the desired external trace width. This sets
							 | 
						|
								     * the external width as the controlling value and performs the calculations.
							 | 
						|
								     */
							 | 
						|
								    void OnTWCalculateFromExtWidth( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTWCalculateFromIntWidth
							 | 
						|
								     * Called when the user changes the desired internal trace width. This sets
							 | 
						|
								     * the internal width as the controlling value and performs the calculations.
							 | 
						|
								     */
							 | 
						|
								    void OnTWCalculateFromIntWidth( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTWResetButtonClick
							 | 
						|
								     * Called when the user clicks the reset button. This sets
							 | 
						|
								     * the parameters to their default values.
							 | 
						|
								     */
							 | 
						|
								    void OnTWResetButtonClick( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TWCalculateWidth
							 | 
						|
								     * Calculate track width required based on given current and temperature rise.
							 | 
						|
								     */
							 | 
						|
								    double TWCalculateWidth(
							 | 
						|
								            double aCurrent, double aThickness, double aDeltaT_C, bool aUseInternalLayer );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TWCalculateCurrent
							 | 
						|
								     * Calculate maximum current based on given width and temperature rise.
							 | 
						|
								     */
							 | 
						|
								    double TWCalculateCurrent(
							 | 
						|
								            double aWidth, double aThickness, double aDeltaT_C, bool aUseInternalLayer );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TWDisplayValues
							 | 
						|
								     * Displays the results of a calculation (including resulting values such
							 | 
						|
								     * as the resistance and power loss).
							 | 
						|
								     */
							 | 
						|
								    void TWDisplayValues( double aCurrent, double aExtWidth, double aIntWidth, double aExtThickness,
							 | 
						|
								            double aIntThickness );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TWUpdateModeDisplay
							 | 
						|
								     * Updates the fields to show whether the maximum current, external trace
							 | 
						|
								     * width, or internal trace width is currently the controlling parameter.
							 | 
						|
								     */
							 | 
						|
								    void TWUpdateModeDisplay();
							 | 
						|
								
							 | 
						|
								    // Via size calculations
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function VS_Init
							 | 
						|
								     * Read config and init dialog widgets values
							 | 
						|
								     */
							 | 
						|
								    void VS_Init();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function VS_WriteConfig
							 | 
						|
								     * Write Via Size parameters in config
							 | 
						|
								     */
							 | 
						|
								    void VS_WriteConfig();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnViaCalculate
							 | 
						|
								     * Called when the user changes any value in the via calcultor.
							 | 
						|
								     */
							 | 
						|
								    void OnViaCalculate( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnViaEpsilonR_Button
							 | 
						|
								     */
							 | 
						|
								    void OnViaEpsilonR_Button( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnViaRho_Button
							 | 
						|
								     */
							 | 
						|
								    void OnViaRho_Button( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Update the Error message in Via calculation panel
							 | 
						|
								     */
							 | 
						|
								    void onUpdateViaCalcErrorText( wxUpdateUIEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								    * Function OnViaResetButtonClick
							 | 
						|
								    * Called when the user clicks the reset button. This sets
							 | 
						|
								    * the parameters to their default values.
							 | 
						|
								    */
							 | 
						|
								    void OnViaResetButtonClick( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function VSDisplayValues
							 | 
						|
								     * Displays the results of the calculation.
							 | 
						|
								     */
							 | 
						|
								    void VSDisplayValues( double aViaResistance, double aVoltageDrop, double aPowerLoss,
							 | 
						|
								            double aEstimatedAmpacity, double aThermalResistance, double aCapacitance,
							 | 
						|
								            double aTimeDegradation, double aInductance, double aReactance );
							 | 
						|
								
							 | 
						|
								    // Electrical spacing panel:
							 | 
						|
								    void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void OnElectricalSpacingRefresh( wxCommandEvent& event ) override;
							 | 
						|
								    void ElectricalSpacingUpdateData( double aUnitScale );
							 | 
						|
								
							 | 
						|
								    // Transline functions:
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTranslineSelection
							 | 
						|
								     * Called on new transmission line selection
							 | 
						|
								    */
							 | 
						|
								    void OnTranslineSelection( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTransLineResetButtonClick
							 | 
						|
								     * Called when the user clicks the reset button. This sets
							 | 
						|
								     * the parameters to their default values.
							 | 
						|
								    */
							 | 
						|
								    void OnTransLineResetButtonClick( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTranslineAnalyse
							 | 
						|
								     * Run a new analyse for the current transline with current parameters
							 | 
						|
								     * and displays the electrical parameters
							 | 
						|
								     */
							 | 
						|
								    void OnTranslineAnalyse( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTranslineSynthetize
							 | 
						|
								     * Run a new synthezis for the current transline with current parameters
							 | 
						|
								     * and displays the geometrical parameters
							 | 
						|
								     */
							 | 
						|
								    void OnTranslineSynthetize( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTranslineEpsilonR_Button
							 | 
						|
								     * Shows a list of current relative dielectric constant(Er)
							 | 
						|
								     * and set the selected value in main dialog frame
							 | 
						|
								     */
							 | 
						|
								    void OnTranslineEpsilonR_Button( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTranslineTanD_Button
							 | 
						|
								     * Shows a list of current dielectric loss factor (tangent delta)
							 | 
						|
								     * and set the selected value in main dialog frame
							 | 
						|
								     */
							 | 
						|
								    void OnTranslineTanD_Button( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function OnTranslineRho_Button
							 | 
						|
								     * Shows a list of current Specific resistance list (rho)
							 | 
						|
								     * and set the selected value in main dialog frame
							 | 
						|
								     */
							 | 
						|
								    void OnTranslineRho_Button( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TranslineTypeSelection
							 | 
						|
								     * Must be called after selection of a new transline.
							 | 
						|
								     * Update all values, labels and tool tips of parameters needed
							 | 
						|
								     * by the new transline
							 | 
						|
								     * Irrelevant parameters texts are blanked.
							 | 
						|
								     * @param aType = the TRANSLINE_TYPE_ID of the new selected transline
							 | 
						|
								    */
							 | 
						|
								    void TranslineTypeSelection( enum TRANSLINE_TYPE_ID aType );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function TransfDlgDataToTranslineParams
							 | 
						|
								     * Read values entered in dialog frame, and transfert these
							 | 
						|
								     * values in current transline parameters, converted in normalized units
							 | 
						|
								     */
							 | 
						|
								    void TransfDlgDataToTranslineParams();
							 | 
						|
								
							 | 
						|
								    // Color Code panel
							 | 
						|
								    void OnToleranceSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void ToleranceSelection( int aSelection );
							 | 
						|
								
							 | 
						|
								    // Attenuators Panel
							 | 
						|
								    void OnAttenuatorSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void SetAttenuator( unsigned aIdx );
							 | 
						|
								    void OnCalculateAttenuator( wxCommandEvent& event ) override;
							 | 
						|
								    void TransfPanelDataToAttenuator();
							 | 
						|
								    void TransfAttenuatorDataToPanel();
							 | 
						|
								    void TransfAttenuatorResultsToPanel();
							 | 
						|
								
							 | 
						|
								    // Regulators Panel
							 | 
						|
								    void OnRegulatorCalcButtonClick( wxCommandEvent& event ) override;
							 | 
						|
								    void OnRegulatorResetButtonClick( wxCommandEvent& event ) override;
							 | 
						|
								    void OnRegulTypeSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void OnRegulatorSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void OnDataFileSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void OnAddRegulator( wxCommandEvent& event ) override;
							 | 
						|
								    void OnEditRegulator( wxCommandEvent& event ) override;
							 | 
						|
								    void OnRemoveRegulator( wxCommandEvent& event ) override;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function RegulatorPageUpdate:
							 | 
						|
								     * Update the regulator page dialog display:
							 | 
						|
								     * enable the current regulator drawings and the formula used for calculations
							 | 
						|
								     */
							 | 
						|
								    void RegulatorPageUpdate();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SelectLastSelectedRegulator
							 | 
						|
								     * select in choice box the last selected regulator
							 | 
						|
								     * (name in m_lastSelectedRegulatorName)
							 | 
						|
								     * and update the displayed values.
							 | 
						|
								     * if m_lastSelectedRegulatorName is empty, just calls
							 | 
						|
								     * RegulatorPageUpdate()
							 | 
						|
								     */
							 | 
						|
								    void SelectLastSelectedRegulator();
							 | 
						|
								
							 | 
						|
								    void RegulatorsSolve();
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Write regulators parameters in config
							 | 
						|
								     * @param aCfg is the config settings
							 | 
						|
								     */
							 | 
						|
								    void Regulators_WriteConfig( PCB_CALCULATOR_SETTINGS* aCfg );
							 | 
						|
								
							 | 
						|
								public:
							 | 
						|
								    // Read/write params values and results
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SetPrmValue
							 | 
						|
								     * Read/write params values and results
							 | 
						|
								     * @param aPrmId = param id to write
							 | 
						|
								     * @param aValue = valmue to write
							 | 
						|
								     */
							 | 
						|
								    void SetPrmValue( enum PRMS_ID aPrmId, double aValue );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SetResult
							 | 
						|
								     * Puts the text into the given result line.
							 | 
						|
								     * @param aLineNumber = the line (0 to 5) wher to display the text
							 | 
						|
								     * @param aText = the text to display
							 | 
						|
								     */
							 | 
						|
								    void SetResult( int aLineNumber, const wxString& aText );
							 | 
						|
								
							 | 
						|
								    /** Function SetPrgmBgColor
							 | 
						|
								     *  Set the background color of a parameter
							 | 
						|
								     *  @param aPrmId = param id to set
							 | 
						|
								     *  @param aCol = new color
							 | 
						|
								     */
							 | 
						|
								    void SetPrmBgColor( enum PRMS_ID aPrmId, const KIGFX::COLOR4D* aCol );
							 | 
						|
								    /**
							 | 
						|
								     * Function GetPrmValue
							 | 
						|
								     * Returns a param value.
							 | 
						|
								     * @param aPrmId = param id to write
							 | 
						|
								     * @return the value always in normalized unit (meter, Hz, Ohm, radian)
							 | 
						|
								     */
							 | 
						|
								    double GetPrmValue( enum PRMS_ID aPrmId );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function IsPrmSelected
							 | 
						|
								     * @return true if the param aPrmId is selected
							 | 
						|
								     * Has meaning only for params that have a radio button
							 | 
						|
								     */
							 | 
						|
								    bool IsPrmSelected( enum PRMS_ID aPrmId );
							 | 
						|
								
							 | 
						|
								    // Board classes panel:
							 | 
						|
								    void OnBoardClassesUnitsSelection( wxCommandEvent& event ) override;
							 | 
						|
								    void BoardClassesUpdateData( double aUnitScale );
							 | 
						|
								
							 | 
						|
								    // Calculator doesn't host a tool framework
							 | 
						|
								    wxWindow* GetToolCanvas() const override
							 | 
						|
								    {
							 | 
						|
								        return nullptr;
							 | 
						|
								    }
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								extern const wxString DataFileNameExt;
							 | 
						|
								
							 | 
						|
								#endif // PCB_CALCULATOR_H
							 |