Board Definition
The simulator “board” contains the current state of the simulated system. It is important to store all the state within the board instance as PXT will reuse the same simulator IFrame for multiple runs.vc0
interface BoardDefinition {
visual: BoardImageDefinition | string,
gpioPinBlocks?: string[][],
gpioPinMap: { [pin: string]: string },
groundPins: string[],
threeVoltPins: string[],
fiveVoltPins: string[],
attachPowerOnRight?: boolean,
onboardComponents?: string[]
marginWhenBreadboarding?: [number, number, number, number],
spiPins?: {
MOSI: string,
MISO: string,
SCK: string,
},
i2cPins?: {
SDA: string,
SCL: string,
}
}
interface BoardImageDefinition {
image: string,
outlineImage?: string,
width: number,
height: number,
pinDist: number,
pinBlocks: PinBlockDefinition[],
leds?: LEDDefinition[]
}
Multiple core packages
It is possible to include multiple board definitions within one target.
This is done by using multiple core packages (aka board packages), each corresponding to
a specific board model.
You just set "core": true
in pxt.json
of all the board
packages and include them in bundleddirs
in pxtarget.json
.
Make sure you give them unique (within target) name
properties in pxt.json
,
especially when you’re copying an existing one.
You still have to pick one default in corepkg
in pxtarget.json
.
Users can change the board model of a project by adding a corresponding core package. Any existing core package will be removed.
The second step is setting simulator.dynamicBoardDefinition
in pxtarget.json
to true
, and including board.json
and possibly board.svg
in the
board packages.
The board.json
file in board package contains the BoardDefinition
structure
defined above.
The visual.image
field would typically contain pkg://board.svg
, which will be
expanded to data-URI of the board.svg
. You can also use a URL in /docs/static
.
Typically, different board will have different pinouts. Look here at the bottom about how to handle that.