mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
API: expand board stackup serialization
This commit is contained in:
parent
ee7323dc42
commit
7db75e4f50
@ -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
|
message BoardStackupLayer
|
||||||
{
|
{
|
||||||
kiapi.common.types.Distance thickness = 1;
|
kiapi.common.types.Distance thickness = 1;
|
||||||
kiapi.board.types.BoardLayer layer = 2;
|
kiapi.board.types.BoardLayer layer = 2;
|
||||||
bool enabled = 3;
|
bool enabled = 3;
|
||||||
oneof item {
|
BoardStackupLayerType type = 4;
|
||||||
BoardStackupCopperLayer copper = 4;
|
BoardStackupDielectricLayer dielectric = 5;
|
||||||
}
|
kiapi.common.types.Color color = 6;
|
||||||
|
string material_name = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message BoardStackup
|
message BoardStackup
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <api/board/board_commands.pb.h>
|
#include <api/board/board_commands.pb.h>
|
||||||
#include <wx/wx.h>
|
#include <wx/wx.h>
|
||||||
|
|
||||||
|
#include <board_stackup_manager/board_stackup.h>
|
||||||
#include <padstack.h>
|
#include <padstack.h>
|
||||||
#include <pcb_dimension.h>
|
#include <pcb_dimension.h>
|
||||||
#include <pcb_track.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!
|
// 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
|
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 )
|
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->mutable_thickness()->set_value_nm( item->GetThickness() );
|
||||||
layer->set_layer( ToProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>(
|
layer->set_layer( ToProtoEnum<PCB_LAYER_ID, types::BoardLayer>( item->GetBrdLayerId() ) );
|
||||||
item->GetBrdLayerId() ) );
|
layer->set_type(
|
||||||
|
ToProtoEnum<BOARD_STACKUP_ITEM_TYPE, BoardStackupLayerType>( item->GetType() ) );
|
||||||
|
|
||||||
switch( 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...)
|
// (no copper params yet...)
|
||||||
break;
|
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:
|
default:
|
||||||
// TODO
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -457,7 +473,8 @@ void BOARD_STACKUP::Serialize( google::protobuf::Any& aContainer ) const
|
|||||||
|
|
||||||
bool BOARD_STACKUP::Deserialize( const google::protobuf::Any& aContainer )
|
bool BOARD_STACKUP::Deserialize( const google::protobuf::Any& aContainer )
|
||||||
{
|
{
|
||||||
return true;
|
// Read-only for now
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
// Board-specific
|
// Board-specific
|
||||||
#include <api/board/board_types.pb.h>
|
#include <api/board/board_types.pb.h>
|
||||||
#include <api/board/board_commands.pb.h>
|
#include <api/board/board_commands.pb.h>
|
||||||
|
#include <board_stackup_manager/board_stackup.h>
|
||||||
#include <padstack.h>
|
#include <padstack.h>
|
||||||
#include <pcb_dimension.h>
|
#include <pcb_dimension.h>
|
||||||
#include <pcb_track.h>
|
#include <pcb_track.h>
|
||||||
@ -261,4 +262,9 @@ BOOST_AUTO_TEST_CASE( RatsnestDisplayMode )
|
|||||||
testEnums<RATSNEST_MODE, kiapi::board::commands::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()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user