A fall-back model for FOO should supply FOO's pin names.
Fixes https://gitlab.com/kicad/code/kicad/issues/13589
This commit is contained in:
parent
47ae8bdb86
commit
959e20f52c
|
@ -1003,12 +1003,12 @@ void SIM_MODEL::createPins( const std::vector<LIB_PIN*>& aSymbolPins )
|
||||||
{
|
{
|
||||||
// Default pin sequence: model pins are the same as symbol pins.
|
// Default pin sequence: model pins are the same as symbol pins.
|
||||||
// Excess model pins are set as Not Connected.
|
// Excess model pins are set as Not Connected.
|
||||||
// Note that intentionally nothing is added if `getPinNames()` returns an empty vector.
|
// Note that intentionally nothing is added if `GetPinNames()` returns an empty vector.
|
||||||
|
|
||||||
// SIM_MODEL pins must be ordered by symbol pin numbers -- this is assumed by the code that
|
// SIM_MODEL pins must be ordered by symbol pin numbers -- this is assumed by the code that
|
||||||
// accesses them.
|
// accesses them.
|
||||||
|
|
||||||
std::vector<std::string> pinNames = getPinNames();
|
std::vector<std::string> pinNames = GetPinNames();
|
||||||
|
|
||||||
for( unsigned modelPinIndex = 0; modelPinIndex < pinNames.size(); ++modelPinIndex )
|
for( unsigned modelPinIndex = 0; modelPinIndex < pinNames.size(); ++modelPinIndex )
|
||||||
{
|
{
|
||||||
|
|
|
@ -475,6 +475,8 @@ public:
|
||||||
m_baseModel = &aBaseModel;
|
m_baseModel = &aBaseModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual std::vector<std::string> GetPinNames() const { return {}; }
|
||||||
|
|
||||||
int GetPinCount() const { return static_cast<int>( m_pins.size() ); }
|
int GetPinCount() const { return static_cast<int>( m_pins.size() ); }
|
||||||
const PIN& GetPin( unsigned aIndex ) const { return m_pins.at( aIndex ); }
|
const PIN& GetPin( unsigned aIndex ) const { return m_pins.at( aIndex ); }
|
||||||
|
|
||||||
|
@ -553,8 +555,6 @@ private:
|
||||||
|
|
||||||
virtual bool requiresSpiceModelLine() const;
|
virtual bool requiresSpiceModelLine() const;
|
||||||
|
|
||||||
virtual std::vector<std::string> getPinNames() const { return {}; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<PARAM> m_params;
|
std::vector<PARAM> m_params;
|
||||||
std::vector<PIN> m_pins;
|
std::vector<PIN> m_pins;
|
||||||
|
|
|
@ -45,9 +45,10 @@ class SIM_MODEL_BEHAVIORAL : public SIM_MODEL
|
||||||
public:
|
public:
|
||||||
SIM_MODEL_BEHAVIORAL( TYPE aType );
|
SIM_MODEL_BEHAVIORAL( TYPE aType );
|
||||||
|
|
||||||
|
std::vector<std::string> GetPinNames() const override { return { "+", "-" }; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool parseValueField( const std::string& aValueField );
|
bool parseValueField( const std::string& aValueField );
|
||||||
std::vector<std::string> getPinNames() const override { return { "+", "-" }; }
|
|
||||||
|
|
||||||
static PARAM::INFO makeParams( std::string aName, std::string aDescription, std::string aUnit );
|
static PARAM::INFO makeParams( std::string aName, std::string aDescription, std::string aUnit );
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,9 +49,9 @@ public:
|
||||||
const PARAM* GetTunerParam() const override { return &GetParam( 0 ); }
|
const PARAM* GetTunerParam() const override { return &GetParam( 0 ); }
|
||||||
bool HasPrimaryValue() const override { return true; }
|
bool HasPrimaryValue() const override { return true; }
|
||||||
|
|
||||||
private:
|
std::vector<std::string> GetPinNames() const override { return { "+", "-" }; }
|
||||||
std::vector<std::string> getPinNames() const override { return { "+", "-" }; }
|
|
||||||
|
|
||||||
|
private:
|
||||||
static PARAM::INFO makeParamInfo( std::string aName, std::string aDescription, std::string aUnit );
|
static PARAM::INFO makeParamInfo( std::string aName, std::string aDescription, std::string aUnit );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -217,7 +217,7 @@ bool SIM_MODEL_NGSPICE::canSilentlyIgnoreParam( const std::string& aParamName )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<std::string> SIM_MODEL_NGSPICE::getPinNames() const
|
std::vector<std::string> SIM_MODEL_NGSPICE::GetPinNames() const
|
||||||
{
|
{
|
||||||
return ModelInfo( getModelType() ).pinNames;
|
return ModelInfo( getModelType() ).pinNames;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,8 @@ public:
|
||||||
void SetParamFromSpiceCode( const std::string& aParamName, const std::string& aValue,
|
void SetParamFromSpiceCode( const std::string& aParamName, const std::string& aValue,
|
||||||
SIM_VALUE_GRAMMAR::NOTATION aNotation ) override;
|
SIM_VALUE_GRAMMAR::NOTATION aNotation ) override;
|
||||||
|
|
||||||
|
std::vector<std::string> GetPinNames() const override;
|
||||||
|
|
||||||
// Protected because it's accessed by QA tests.
|
// Protected because it's accessed by QA tests.
|
||||||
protected:
|
protected:
|
||||||
DEFINE_ENUM_CLASS_WITH_ITERATOR( MODEL_TYPE,
|
DEFINE_ENUM_CLASS_WITH_ITERATOR( MODEL_TYPE,
|
||||||
|
@ -111,8 +113,6 @@ private:
|
||||||
|
|
||||||
bool canSilentlyIgnoreParam( const std::string& aParamName );
|
bool canSilentlyIgnoreParam( const std::string& aParamName );
|
||||||
|
|
||||||
std::vector<std::string> getPinNames() const override;
|
|
||||||
|
|
||||||
MODEL_TYPE getModelType() const;
|
MODEL_TYPE getModelType() const;
|
||||||
bool getIsOtherVariant();
|
bool getIsOtherVariant();
|
||||||
};
|
};
|
||||||
|
|
|
@ -48,9 +48,9 @@ public:
|
||||||
const PARAM* GetTunerParam() const override { return FindParam( "pos" ); }
|
const PARAM* GetTunerParam() const override { return FindParam( "pos" ); }
|
||||||
bool HasPrimaryValue() const override { return true; }
|
bool HasPrimaryValue() const override { return true; }
|
||||||
|
|
||||||
private:
|
std::vector<std::string> GetPinNames() const override { return { "+", "wiper", "-" }; }
|
||||||
std::vector<std::string> getPinNames() const override { return { "+", "wiper", "-" }; }
|
|
||||||
|
|
||||||
|
private:
|
||||||
static const std::vector<PARAM::INFO> makeParamInfos();
|
static const std::vector<PARAM::INFO> makeParamInfos();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -76,9 +76,9 @@ public:
|
||||||
bool HasAutofill() const override { return true; }
|
bool HasAutofill() const override { return true; }
|
||||||
bool HasPrimaryValue() const override { return GetType() == TYPE::V || GetType() == TYPE::I; }
|
bool HasPrimaryValue() const override { return GetType() == TYPE::V || GetType() == TYPE::I; }
|
||||||
|
|
||||||
private:
|
std::vector<std::string> GetPinNames() const override { return { "+", "-" }; }
|
||||||
std::vector<std::string> getPinNames() const override { return { "+", "-" }; }
|
|
||||||
|
|
||||||
|
private:
|
||||||
static const std::vector<PARAM::INFO>& makeParamInfos( TYPE aType );
|
static const std::vector<PARAM::INFO>& makeParamInfos( TYPE aType );
|
||||||
|
|
||||||
static std::vector<PARAM::INFO> makeDcParamInfos( std::string aPrefix, std::string aUnit );
|
static std::vector<PARAM::INFO> makeDcParamInfos( std::string aPrefix, std::string aUnit );
|
||||||
|
|
|
@ -35,16 +35,22 @@ SIM_MODEL_SPICE_FALLBACK::SIM_MODEL_SPICE_FALLBACK( TYPE aType, const std::strin
|
||||||
void SIM_MODEL_SPICE_FALLBACK::SetPinSymbolPinNumber( const std::string& aPinName,
|
void SIM_MODEL_SPICE_FALLBACK::SetPinSymbolPinNumber( const std::string& aPinName,
|
||||||
const std::string& aSymbolPinNumber )
|
const std::string& aSymbolPinNumber )
|
||||||
{
|
{
|
||||||
for( PIN& pin : m_pins )
|
try
|
||||||
{
|
{
|
||||||
if( pin.name == aPinName )
|
SIM_MODEL::SetPinSymbolPinNumber( aPinName, aSymbolPinNumber );
|
||||||
|
}
|
||||||
|
catch( IO_ERROR& )
|
||||||
{
|
{
|
||||||
pin.symbolPinNumber = aSymbolPinNumber;
|
// This is a fall-back, so we won't necessarily know the pin names. If we didn't find
|
||||||
return;
|
// it, then just create a new pin.
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pins.push_back( { aPinName, aSymbolPinNumber } );
|
m_pins.push_back( { aPinName, aSymbolPinNumber } );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> SIM_MODEL_SPICE_FALLBACK::GetPinNames() const
|
||||||
|
{
|
||||||
|
// If we're a fall-back for a paticular model type, then return its pin names
|
||||||
|
std::unique_ptr<SIM_MODEL> model = SIM_MODEL::Create( GetType() );
|
||||||
|
return model->GetPinNames();
|
||||||
|
}
|
|
@ -34,6 +34,8 @@ public:
|
||||||
|
|
||||||
void SetPinSymbolPinNumber( const std::string& aPinName,
|
void SetPinSymbolPinNumber( const std::string& aPinName,
|
||||||
const std::string& aSymbolPinNumber ) override;
|
const std::string& aSymbolPinNumber ) override;
|
||||||
|
|
||||||
|
std::vector<std::string> GetPinNames() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SIM_MODEL_SPICE_FALLBACK_H
|
#endif // SIM_MODEL_SPICE_FALLBACK_H
|
||||||
|
|
|
@ -45,12 +45,12 @@ class SIM_MODEL_SWITCH : public SIM_MODEL
|
||||||
public:
|
public:
|
||||||
SIM_MODEL_SWITCH( TYPE aType );
|
SIM_MODEL_SWITCH( TYPE aType );
|
||||||
|
|
||||||
private:
|
std::vector<std::string> GetPinNames() const override
|
||||||
std::vector<std::string> getPinNames() const override
|
|
||||||
{
|
{
|
||||||
return { "ctrl+", "ctrl-", "no+", "no-" };
|
return { "ctrl+", "ctrl-", "no+", "no-" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
bool requiresSpiceModelLine() const override { return true; }
|
bool requiresSpiceModelLine() const override { return true; }
|
||||||
|
|
||||||
static const std::vector<PARAM::INFO> makeSwVParamInfos();
|
static const std::vector<PARAM::INFO> makeSwVParamInfos();
|
||||||
|
|
|
@ -43,9 +43,9 @@ class SIM_MODEL_TLINE : public SIM_MODEL
|
||||||
public:
|
public:
|
||||||
SIM_MODEL_TLINE( TYPE aType );
|
SIM_MODEL_TLINE( TYPE aType );
|
||||||
|
|
||||||
private:
|
std::vector<std::string> GetPinNames() const override { return { "1+", "1-", "2+", "2-" }; }
|
||||||
std::vector<std::string> getPinNames() const override { return { "1+", "1-", "2+", "2-" }; }
|
|
||||||
|
|
||||||
|
private:
|
||||||
static std::vector<PARAM::INFO> makeZ0ParamInfos();
|
static std::vector<PARAM::INFO> makeZ0ParamInfos();
|
||||||
static std::vector<PARAM::INFO> makeRlgcParamInfos();
|
static std::vector<PARAM::INFO> makeRlgcParamInfos();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue