-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #422 from dariuszzbyrad/refactor-boardinfo
Refactor BoardInfoHelper and Improve Board Detection Mechanism
- Loading branch information
Showing
15 changed files
with
1,379 additions
and
131 deletions.
There are no files selected for viewing
90 changes: 90 additions & 0 deletions
90
pi4j-core/src/main/java/com/pi4j/boardinfo/datareader/BoardCodeReader.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
package com.pi4j.boardinfo.datareader; | ||
|
||
/*- | ||
* #%L | ||
* ********************************************************************** | ||
* ORGANIZATION : Pi4J | ||
* PROJECT : Pi4J :: LIBRARY :: Java Library (CORE) | ||
* FILENAME : BoardCodeReader.java | ||
* | ||
* This file is part of the Pi4J project. More information about | ||
* this project can be found here: https://pi4j.com/ | ||
* ********************************************************************** | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* #L% | ||
*/ | ||
|
||
import com.pi4j.boardinfo.util.command.CommandResult; | ||
import com.pi4j.util.StringUtil; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.FileReader; | ||
import java.io.IOException; | ||
|
||
import static com.pi4j.boardinfo.util.command.CommandResult.failure; | ||
import static com.pi4j.boardinfo.util.command.CommandResult.success; | ||
|
||
/** | ||
* This class reads the board model code from the file system, specifically | ||
* from the `/proc/device-tree/model` file on Raspberry Pi systems. | ||
*/ | ||
public class BoardCodeReader { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(BoardCodeReader.class); | ||
private static String modelFilePath = "/proc/device-tree/model"; | ||
|
||
/** | ||
* Sets the file path for testing purposes. | ||
* | ||
* @param path The file path to be used. | ||
*/ | ||
public static void setModelFilePath(String path) { | ||
modelFilePath = path; | ||
} | ||
|
||
/** | ||
* Reads the board model code from the file system. | ||
* | ||
* @return A {@link CommandResult} containing: | ||
* - {@code success}: true if the file was read successfully, false otherwise. | ||
* - {@code outputMessage}: the content of the model file (trimmed). | ||
* - {@code errorMessage}: any error message encountered during the process. | ||
*/ | ||
public static CommandResult getBoardCode() { | ||
String outputMessage = StringUtil.EMPTY; | ||
String errorMessage = StringUtil.EMPTY; | ||
|
||
try (BufferedReader reader = new BufferedReader(new FileReader(modelFilePath))) { | ||
StringBuilder content = new StringBuilder(); | ||
String line; | ||
|
||
while ((line = reader.readLine()) != null) { | ||
content.append(line); | ||
} | ||
|
||
outputMessage = content.toString().trim(); | ||
} catch (IOException ex) { | ||
errorMessage = "IOException: " + ex.getMessage(); | ||
logger.error("Failed to read the board model from '{}': {}", modelFilePath, errorMessage); | ||
} | ||
|
||
if (!errorMessage.isEmpty()) { | ||
return failure(errorMessage); | ||
} | ||
|
||
return success(outputMessage); | ||
} | ||
} |
93 changes: 93 additions & 0 deletions
93
pi4j-core/src/main/java/com/pi4j/boardinfo/datareader/CpuInfoReader.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
package com.pi4j.boardinfo.datareader; | ||
|
||
/*- | ||
* #%L | ||
* ********************************************************************** | ||
* ORGANIZATION : Pi4J | ||
* PROJECT : Pi4J :: LIBRARY :: Java Library (CORE) | ||
* FILENAME : CpuInfoReader.java | ||
* | ||
* This file is part of the Pi4J project. More information about | ||
* this project can be found here: https://pi4j.com/ | ||
* ********************************************************************** | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* #L% | ||
*/ | ||
import com.pi4j.boardinfo.util.command.CommandResult; | ||
import com.pi4j.util.StringUtil; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.FileReader; | ||
import java.io.IOException; | ||
|
||
import static com.pi4j.boardinfo.util.command.CommandResult.failure; | ||
import static com.pi4j.boardinfo.util.command.CommandResult.success; | ||
|
||
/** | ||
* This class reads CPU information from the file system, specifically | ||
* the `/proc/cpuinfo` file on Linux systems, to extract the CPU revision. | ||
*/ | ||
public class CpuInfoReader { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(CpuInfoReader.class); | ||
private static String cpuInfoFilePath = "/proc/cpuinfo"; | ||
|
||
/** | ||
* Sets the CPU info file path for testing purposes. | ||
* | ||
* @param path The file path to be used. | ||
*/ | ||
public static void setCpuInfoFilePath(String path) { | ||
cpuInfoFilePath = path; | ||
} | ||
|
||
/** | ||
* Reads the CPU revision from the `/proc/cpuinfo` file. | ||
* | ||
* @return A {@link CommandResult} containing: | ||
* - {@code success}: true if the revision was successfully extracted, false otherwise. | ||
* - {@code outputMessage}: the CPU revision value. | ||
* - {@code errorMessage}: any error message encountered during the process. | ||
*/ | ||
public static CommandResult getCpuRevision() { | ||
String outputMessage = StringUtil.EMPTY; | ||
String errorMessage = StringUtil.EMPTY; | ||
|
||
try (BufferedReader reader = new BufferedReader(new FileReader(cpuInfoFilePath))) { | ||
String line; | ||
// Read file line by line to locate the "Revision" entry. | ||
while ((line = reader.readLine()) != null) { | ||
if (!line.startsWith("Revision")) { | ||
continue; // Skip lines that do not start with "Revision" | ||
} | ||
String[] parts = line.split(":"); | ||
if (parts.length > 1) { | ||
outputMessage = parts[1].trim(); // Extract and trim the revision value. | ||
} | ||
break; // No need to process further once "Revision" is found. | ||
} | ||
} catch (IOException ex) { | ||
errorMessage = "IOException: " + ex.getMessage(); | ||
logger.error("Failed to read the CPU revision from '{}': {}", cpuInfoFilePath, errorMessage); | ||
} | ||
|
||
if (!errorMessage.isEmpty() || outputMessage.isEmpty()) { | ||
return failure(errorMessage.isEmpty() ? "CPU revision not found in file" : errorMessage); | ||
} | ||
|
||
return success(outputMessage); | ||
} | ||
} |
93 changes: 93 additions & 0 deletions
93
pi4j-core/src/main/java/com/pi4j/boardinfo/datareader/MemInfoReader.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
package com.pi4j.boardinfo.datareader; | ||
|
||
/*- | ||
* #%L | ||
* ********************************************************************** | ||
* ORGANIZATION : Pi4J | ||
* PROJECT : Pi4J :: LIBRARY :: Java Library (CORE) | ||
* FILENAME : MemInfoReader.java | ||
* | ||
* This file is part of the Pi4J project. More information about | ||
* this project can be found here: https://pi4j.com/ | ||
* ********************************************************************** | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* #L% | ||
*/ | ||
|
||
import com.pi4j.boardinfo.util.command.CommandResult; | ||
import com.pi4j.util.StringUtil; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.FileReader; | ||
import java.io.IOException; | ||
|
||
import static com.pi4j.boardinfo.util.command.CommandResult.failure; | ||
import static com.pi4j.boardinfo.util.command.CommandResult.success; | ||
|
||
/** | ||
* This class reads memory information from the file system, specifically | ||
* the `/proc/meminfo` file on Linux systems, to extract the total memory. | ||
*/ | ||
public class MemInfoReader { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(MemInfoReader.class); | ||
private static String memInfoFilePath = "/proc/meminfo"; | ||
|
||
/** | ||
* Sets the memory info file path for testing purposes. | ||
* | ||
* @param path The file path to be used. | ||
*/ | ||
public static void setMemInfoFilePath(String path) { | ||
memInfoFilePath = path; | ||
} | ||
|
||
/** | ||
* Reads the memory information file and extracts the "MemTotal" entry. | ||
* | ||
* @return A {@link CommandResult} containing: | ||
* - {@code success}: true if the "MemTotal" entry is found and valid. | ||
* - {@code outputMessage}: the value of the "MemTotal" entry (trimmed). | ||
* - {@code errorMessage}: an error message if the entry is not found or if reading fails. | ||
*/ | ||
public static CommandResult getMemTotal() { | ||
String errorMessage = StringUtil.EMPTY; | ||
String memTotalLine = StringUtil.EMPTY; | ||
|
||
try (BufferedReader reader = new BufferedReader(new FileReader(memInfoFilePath))) { | ||
String line; | ||
while ((line = reader.readLine()) != null) { | ||
if (!line.startsWith("MemTotal:")) { | ||
continue; // Skip lines that don't start with "MemTotal:" | ||
} | ||
memTotalLine = line.trim(); | ||
break; // No need to process further once "MemTotal:" is found | ||
} | ||
} catch (IOException ex) { | ||
errorMessage = "IOException: " + ex.getMessage(); | ||
logger.error("Failed to read memory information from '{}': {}", memInfoFilePath, errorMessage); | ||
} | ||
|
||
if (!errorMessage.isEmpty()) { | ||
return failure(errorMessage); | ||
} | ||
if (memTotalLine.isEmpty()) { | ||
return failure("MemTotal entry not found in memory information file."); | ||
} | ||
|
||
return success(memTotalLine); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.