Board Auto-detection
- Default behaviour in BaseNativeDeviceFactory is to inspect the local device and auto-discover capabilities
lookupBoardInfo(): BoardInfo (extends BoardPinInfo)
BoardInfoProvider#lookup(LocalSystemInfo)
method for detecting a new board at runtime based on LocalSystemInfoServiceLoader
implementation that loads all declared board info providers on startup (from classpath) -LocalBoardInfoUtil.resolveLocalBoardInfo
BoardInfo
class responsible for defining the board’s physical connectivity - returned from theBoardInfoProvider
lookup method- Allows full control of the board layout from within Java code, example
PiBRev1BoardInfo
- Allows full control of the board layout from within Java code, example
GenericLinuxArmBoardInfo
for loading the board definition file by reading/proc/device-tree/compatible
- Preferred approach for Linux SBCs - extend GenericLinuxArmBoardInfo which loads layout information from a simple text file
- Format of the file is multiple values separated by NULL character (\0), each value optionally comma separated into multiple parts. Typically
<<Board vendor>>, <<Board model>>
+<<CPU vendor>>, <<CPU model>>
- Attempt to resolve by combining parts, give example, e.g.
hardkernel,odroid-c2^@amlogic,meson-gxbb^@
→hardkernel_ordriod-c2
,hardkernel
,amlogic_meson-gxbb
,amlogic
- Location and format of the board def file
- The Raspberry Pi
PiBoardInfo
class extendsGenericLinuxArmBoardInfo
and overrides populateBoardPinInfo so that it can be reused by the remote PigpioJ provider
- If this fails to correctly identify the board and populate physical connectivity discovery will be attempted via GPIO character device names. This will only work if the GPIOs are named correctly, i.e. GPIO1, GPIO2, etc, which is often not the case.
- The
BaseNativeDeviceFactory.lookupBoardInfo()
method can be overridden as is the case for the following providers:- Firmata
- PigpioJ
- Remote
- Mock
- With the exception of the Mock provider, all of these support connecting to a remotely attached device, hence cannot simply inspect the locally attached device. For example, you could be running on a Windows desktop from within an IDE connecting to a micro-controller over a serial connection.
Adding Support for a new Linux ARM SBC
TBD