mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-02 00:26:45 +00:00
API: expand board stackup serialization
This commit is contained in:
parent
ee7323dc42
commit
7db75e4f50
api/proto/board
pcbnew
qa/tests/api
@ -61,14 +61,40 @@ message BoardStackupCopperLayer
|
||||
|
||||
}
|
||||
|
||||
enum BoardStackupLayerType
|
||||
{
|
||||
BSLT_UNKNOWN = 0;
|
||||
BSLT_COPPER = 1;
|
||||
BSLT_DIELECTRIC = 2;
|
||||
BSLT_SILKSCREEN = 3;
|
||||
BSLT_SOLDERMASK = 4;
|
||||
BSLT_SOLDERPASTE = 5;
|
||||
BSLT_UNDEFINED = 7;
|
||||
}
|
||||
|
||||
message BoardStackupDielectricProperties
|
||||
{
|
||||
double epsilon_r = 1;
|
||||
double loss_tangent = 2;
|
||||
string material_name = 3;
|
||||
kiapi.common.types.Distance thickness = 4;
|
||||
}
|
||||
|
||||
message BoardStackupDielectricLayer
|
||||
{
|
||||
// A single dielectric slot (between copper layers) can be made up of multiple physical layers
|
||||
repeated BoardStackupDielectricProperties layer = 1;
|
||||
}
|
||||
|
||||
message BoardStackupLayer
|
||||
{
|
||||
kiapi.common.types.Distance thickness = 1;
|
||||
kiapi.board.types.BoardLayer layer = 2;
|
||||
bool enabled = 3;
|
||||
oneof item {
|
||||
BoardStackupCopperLayer copper = 4;
|
||||
}
|
||||
BoardStackupLayerType type = 4;
|
||||
BoardStackupDielectricLayer dielectric = 5;
|
||||
kiapi.common.types.Color color = 6;
|
||||
string material_name = 7;
|
||||
}
|
||||
|
||||
message BoardStackup
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <api/board/board_commands.pb.h>
|
||||
#include <wx/wx.h>
|
||||
|
||||
#include <board_stackup_manager/board_stackup.h>
|
||||
#include <padstack.h>
|
||||
#include <pcb_dimension.h>
|
||||
#include <pcb_track.h>
|
||||
@ -766,4 +767,42 @@ RATSNEST_MODE FromProtoEnum( commands::RatsnestDisplayMode aValue )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
BoardStackupLayerType ToProtoEnum( BOARD_STACKUP_ITEM_TYPE aValue )
|
||||
{
|
||||
switch( aValue )
|
||||
{
|
||||
case BS_ITEM_TYPE_UNDEFINED: return BoardStackupLayerType::BSLT_UNDEFINED;
|
||||
case BS_ITEM_TYPE_COPPER: return BoardStackupLayerType::BSLT_COPPER;
|
||||
case BS_ITEM_TYPE_DIELECTRIC: return BoardStackupLayerType::BSLT_DIELECTRIC;
|
||||
case BS_ITEM_TYPE_SOLDERPASTE: return BoardStackupLayerType::BSLT_SOLDERPASTE;
|
||||
case BS_ITEM_TYPE_SOLDERMASK: return BoardStackupLayerType::BSLT_SOLDERMASK;
|
||||
case BS_ITEM_TYPE_SILKSCREEN: return BoardStackupLayerType::BSLT_SILKSCREEN;
|
||||
|
||||
default:
|
||||
wxCHECK_MSG( false, BoardStackupLayerType::BSLT_UNKNOWN,
|
||||
"Unhandled case in ToProtoEnum<BOARD_STACKUP_ITEM_TYPE>");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
BOARD_STACKUP_ITEM_TYPE FromProtoEnum( BoardStackupLayerType aValue )
|
||||
{
|
||||
switch( aValue )
|
||||
{
|
||||
case BoardStackupLayerType::BSLT_UNDEFINED: return BS_ITEM_TYPE_UNDEFINED;
|
||||
case BoardStackupLayerType::BSLT_COPPER: return BS_ITEM_TYPE_COPPER;
|
||||
case BoardStackupLayerType::BSLT_DIELECTRIC: return BS_ITEM_TYPE_DIELECTRIC;
|
||||
case BoardStackupLayerType::BSLT_SOLDERPASTE: return BS_ITEM_TYPE_SOLDERPASTE;
|
||||
case BoardStackupLayerType::BSLT_SOLDERMASK: return BS_ITEM_TYPE_SOLDERMASK;
|
||||
case BoardStackupLayerType::BSLT_SILKSCREEN: return BS_ITEM_TYPE_SILKSCREEN;
|
||||
|
||||
default:
|
||||
wxCHECK_MSG( false, BS_ITEM_TYPE_UNDEFINED,
|
||||
"Unhandled case in FromProtoEnum<BoardStackupLayerType>" );
|
||||
}
|
||||
}
|
||||
|
||||
// Adding something new here? Add it to test_api_enums.cpp!
|
||||
|
@ -425,28 +425,44 @@ bool BOARD_STACKUP::operator==( const BOARD_STACKUP& aOther ) const
|
||||
|
||||
void BOARD_STACKUP::Serialize( google::protobuf::Any& aContainer ) const
|
||||
{
|
||||
kiapi::board::BoardStackup stackup;
|
||||
using namespace kiapi::board;
|
||||
BoardStackup stackup;
|
||||
|
||||
for( const BOARD_STACKUP_ITEM* item : m_list )
|
||||
{
|
||||
kiapi::board::BoardStackupLayer* layer = stackup.mutable_layers()->Add();
|
||||
BoardStackupLayer* layer = stackup.mutable_layers()->Add();
|
||||
|
||||
// TODO dielectric sub-layers
|
||||
layer->mutable_thickness()->set_value_nm( item->GetThickness() );
|
||||
layer->set_layer( ToProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>(
|
||||
item->GetBrdLayerId() ) );
|
||||
layer->set_layer( ToProtoEnum<PCB_LAYER_ID, types::BoardLayer>( item->GetBrdLayerId() ) );
|
||||
layer->set_type(
|
||||
ToProtoEnum<BOARD_STACKUP_ITEM_TYPE, BoardStackupLayerType>( item->GetType() ) );
|
||||
|
||||
switch( item->GetType() )
|
||||
{
|
||||
case BOARD_STACKUP_ITEM_TYPE::BS_ITEM_TYPE_COPPER:
|
||||
case BS_ITEM_TYPE_COPPER:
|
||||
{
|
||||
layer->mutable_copper()->New();
|
||||
layer->set_material_name( "copper" );
|
||||
// (no copper params yet...)
|
||||
break;
|
||||
}
|
||||
|
||||
case BS_ITEM_TYPE_DIELECTRIC:
|
||||
{
|
||||
BoardStackupDielectricLayer* dielectric = layer->mutable_dielectric()->New();
|
||||
|
||||
for( int i = 0; i < item->GetSublayersCount(); ++i )
|
||||
{
|
||||
BoardStackupDielectricProperties* props = dielectric->mutable_layer()->Add();
|
||||
props->set_epsilon_r( item->GetEpsilonR( i ) );
|
||||
props->set_loss_tangent( item->GetLossTangent( i ) );
|
||||
props->set_material_name( item->GetMaterial( i ).ToUTF8() );
|
||||
props->mutable_thickness()->set_value_nm( item->GetThickness( i ) );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -457,7 +473,8 @@ void BOARD_STACKUP::Serialize( google::protobuf::Any& aContainer ) const
|
||||
|
||||
bool BOARD_STACKUP::Deserialize( const google::protobuf::Any& aContainer )
|
||||
{
|
||||
return true;
|
||||
// Read-only for now
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
// Board-specific
|
||||
#include <api/board/board_types.pb.h>
|
||||
#include <api/board/board_commands.pb.h>
|
||||
#include <board_stackup_manager/board_stackup.h>
|
||||
#include <padstack.h>
|
||||
#include <pcb_dimension.h>
|
||||
#include <pcb_track.h>
|
||||
@ -261,4 +262,9 @@ BOOST_AUTO_TEST_CASE( RatsnestDisplayMode )
|
||||
testEnums<RATSNEST_MODE, kiapi::board::commands::RatsnestDisplayMode>();
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE( BoardStackupLayerType )
|
||||
{
|
||||
testEnums<BOARD_STACKUP_ITEM_TYPE, kiapi::board::BoardStackupLayerType>();
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
Loading…
Reference in New Issue
Block a user