From 6ce99ab5f52d8f4911b4c450d328ffd596f40f47 Mon Sep 17 00:00:00 2001 From: Frank Delporte Date: Fri, 5 Apr 2024 12:01:08 +0200 Subject: [PATCH] #340 Added BoardInfo to Context --- .../src/main/java/com/pi4j/context/Context.java | 16 ++++++++++++++++ .../com/pi4j/context/impl/DefaultContext.java | 15 ++++++++++++++- .../com/pi4j/runtime/impl/DefaultRuntime.java | 5 ----- .../boardinfo/util/BoardModelDetectionTest.java | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/pi4j-core/src/main/java/com/pi4j/context/Context.java b/pi4j-core/src/main/java/com/pi4j/context/Context.java index c5078779..7ee9b77a 100644 --- a/pi4j-core/src/main/java/com/pi4j/context/Context.java +++ b/pi4j-core/src/main/java/com/pi4j/context/Context.java @@ -25,6 +25,10 @@ * #L% */ +import com.pi4j.boardinfo.definition.BoardModel; +import com.pi4j.boardinfo.model.BoardInfo; +import com.pi4j.boardinfo.model.JavaInfo; +import com.pi4j.boardinfo.model.OperatingSystem; import com.pi4j.common.Describable; import com.pi4j.common.Descriptor; import com.pi4j.config.Config; @@ -305,6 +309,18 @@ default T provider(IOType ioType) throws ProviderNotFoundEx throw new ProviderNotFoundException(ioType); } + // ------------------------------------------------------------------------ + // BOARD INFO ACCESSOR METHODS + // ------------------------------------------------------------------------ + + /** + * Return the BoardInfo containing more info about the + * {@link BoardModel}, {@link OperatingSystem}, and {@link JavaInfo}. + * + * @return {@link BoardInfo} + */ + BoardInfo boardInfo(); + // ------------------------------------------------------------------------ // I/O INSTANCE ACCESSOR/CREATOR METHODS // ------------------------------------------------------------------------ diff --git a/pi4j-core/src/main/java/com/pi4j/context/impl/DefaultContext.java b/pi4j-core/src/main/java/com/pi4j/context/impl/DefaultContext.java index af74d71f..7f283338 100644 --- a/pi4j-core/src/main/java/com/pi4j/context/impl/DefaultContext.java +++ b/pi4j-core/src/main/java/com/pi4j/context/impl/DefaultContext.java @@ -25,6 +25,8 @@ * #L% */ +import com.pi4j.boardinfo.model.BoardInfo; +import com.pi4j.boardinfo.util.BoardModelDetection; import com.pi4j.context.Context; import com.pi4j.context.ContextConfig; import com.pi4j.context.ContextProperties; @@ -62,6 +64,7 @@ public class DefaultContext implements Context { private Providers providers = null; private Platforms platforms = null; private Registry registry = null; + private BoardInfo boardInfo = null; /** *

newInstance.

@@ -78,7 +81,7 @@ private DefaultContext(ContextConfig config) { logger.trace("new Pi4J runtime context initialized [config={}]", config); // validate config object exists - if(config == null){ + if(config == null) { throw new LifecycleException("Unable to create new Pi4J runtime context; missing (ContextConfig) config object."); } @@ -100,6 +103,12 @@ private DefaultContext(ContextConfig config) { // create API accessible platforms instance (READ-ONLY ACCESS OBJECT) this.platforms = DefaultPlatforms.newInstance(this.runtime.platforms()); + // detect the board model + this.boardInfo = BoardModelDetection.current(); + logger.info("Detected board model: {}", boardInfo.getBoardModel().getLabel()); + logger.info("Running on: {}", boardInfo.getOperatingSystem()); + logger.info("With Java version: {}", boardInfo.getJavaInfo()); + // initialize runtime now this.runtime.initialize(); @@ -128,6 +137,10 @@ public ContextProperties properties() { @Override public Platforms platforms() { return this.platforms; } + /** {@inheritDoc} */ + @Override + public BoardInfo boardInfo() { return this.boardInfo; } + /** {@inheritDoc} */ @Override public Future submitTask(Runnable task) { diff --git a/pi4j-core/src/main/java/com/pi4j/runtime/impl/DefaultRuntime.java b/pi4j-core/src/main/java/com/pi4j/runtime/impl/DefaultRuntime.java index 664d72aa..1dffb9c0 100644 --- a/pi4j-core/src/main/java/com/pi4j/runtime/impl/DefaultRuntime.java +++ b/pi4j-core/src/main/java/com/pi4j/runtime/impl/DefaultRuntime.java @@ -25,7 +25,6 @@ * #L% */ -import com.pi4j.boardinfo.util.BoardModelDetection; import com.pi4j.context.Context; import com.pi4j.context.ContextConfig; import com.pi4j.event.*; @@ -249,10 +248,6 @@ public boolean isShutdown() { public Runtime initialize() throws InitializeException { logger.info("Initializing Pi4J context/runtime..."); try { - // Output the type of board - var model = BoardModelDetection.getDetectedBoard(); - logger.info("detected board model: {}", model.getBoardModel().getLabel()); - // clear plugins container plugins.clear(); diff --git a/pi4j-core/test/java/com/pi4j/boardinfo/util/BoardModelDetectionTest.java b/pi4j-core/test/java/com/pi4j/boardinfo/util/BoardModelDetectionTest.java index 4882416e..b6108f67 100644 --- a/pi4j-core/test/java/com/pi4j/boardinfo/util/BoardModelDetectionTest.java +++ b/pi4j-core/test/java/com/pi4j/boardinfo/util/BoardModelDetectionTest.java @@ -10,7 +10,7 @@ class BoardModelDetectionTest { @Test void testGetDetectedBoard() { - var detectedBoard = BoardModelDetection.getDetectedBoard(); + var detectedBoard = BoardModelDetection.current(); assertAll( () -> assertEquals(detectedBoard.getOperatingSystem().getName(), System.getProperty("os.name")),