WarpPI/hardware/src/main/java/it/cavallium/warppi/hardware/HardwarePlatform.java

241 lines
6.1 KiB
Java
Raw Normal View History

2018-09-11 01:12:54 +02:00
package it.cavallium.warppi.hardware;
import java.io.File;
2019-08-09 20:51:31 +02:00
import java.io.IOException;
2018-09-11 01:12:54 +02:00
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
2019-08-09 20:51:31 +02:00
import java.util.ArrayList;
2018-09-11 01:12:54 +02:00
import java.util.HashMap;
2019-08-09 20:51:31 +02:00
import java.util.List;
2018-09-11 01:12:54 +02:00
import java.util.Map;
import it.cavallium.warppi.Platform;
2018-09-11 01:12:54 +02:00
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
2018-09-22 10:29:40 +02:00
import it.cavallium.warppi.gui.graphicengine.impl.framebuffer.FBEngine;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
import it.cavallium.warppi.util.Error;
2018-09-11 01:12:54 +02:00
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
public class HardwarePlatform implements Platform {
private final HardwareConsoleUtils cu;
private final HardwareGpio gi;
private final HardwareStorageUtils su;
2018-10-15 23:10:44 +02:00
private final ImageUtils pu;
2018-09-11 01:12:54 +02:00
private final String on;
private final Map<String, GraphicEngine> el;
private final HardwareSettings settings;
2018-10-06 16:37:44 +02:00
private Boolean runningOnRaspberryOverride = null;
2018-09-11 01:12:54 +02:00
public HardwarePlatform() {
cu = new HardwareConsoleUtils();
gi = new HardwareGpio();
su = new HardwareStorageUtils();
2018-10-15 23:10:44 +02:00
pu = new HardwareImageUtils();
2018-09-11 01:12:54 +02:00
on = System.getProperty("os.name").toLowerCase();
el = new HashMap<>();
2018-09-22 10:29:40 +02:00
el.put("GPU engine", new JOGLEngine());
2018-09-11 01:12:54 +02:00
el.put("framebuffer engine", new FBEngine());
settings = new HardwareSettings();
2018-09-11 01:12:54 +02:00
}
2018-09-22 11:17:30 +02:00
2018-09-11 01:12:54 +02:00
@Override
public ConsoleUtils getConsoleUtils() {
return cu;
}
@Override
public Gpio getGpio() {
return gi;
}
@Override
public StorageUtils getStorageUtils() {
return su;
}
@Override
2018-10-15 23:10:44 +02:00
public ImageUtils getImageUtils() {
2018-09-11 01:12:54 +02:00
return pu;
}
@Override
public HardwareSettings getSettings() {
return settings;
}
2018-09-11 01:12:54 +02:00
@Override
2018-09-22 11:17:30 +02:00
public void setThreadName(final Thread t, final String name) {
2018-09-11 01:12:54 +02:00
t.setName(name);
}
@Override
2018-09-22 11:17:30 +02:00
public void setThreadDaemon(final Thread t) {
2018-09-11 01:12:54 +02:00
t.setDaemon(true);
}
@Override
2018-09-22 11:17:30 +02:00
public void setThreadDaemon(final Thread t, final boolean value) {
2018-09-11 01:12:54 +02:00
t.setDaemon(value);
}
@Override
2018-09-22 11:17:30 +02:00
public void exit(final int value) {
2018-09-11 01:12:54 +02:00
System.exit(value);
}
@Override
public void gc() {
System.gc();
}
@Override
public boolean isJavascript() {
return false;
}
@Override
public String getOsName() {
return on;
}
@Override
2018-09-22 11:17:30 +02:00
public void alphaChanged(final boolean val) {
2018-09-11 01:12:54 +02:00
}
@Override
2018-09-22 11:17:30 +02:00
public void shiftChanged(final boolean val) {}
2018-09-11 01:12:54 +02:00
@Override
public Semaphore newSemaphore() {
return new HardwareSemaphore(0);
}
@Override
2018-09-22 11:17:30 +02:00
public Semaphore newSemaphore(final int i) {
2018-09-11 01:12:54 +02:00
return new HardwareSemaphore(i);
}
@Override
2018-09-22 11:17:30 +02:00
public URLClassLoader newURLClassLoader(final URL[] urls) {
2018-09-11 01:12:54 +02:00
return new HardwareURLClassLoader(urls);
}
@Override
public Map<String, GraphicEngine> getEnginesList() {
return el;
}
@Override
2018-09-22 11:17:30 +02:00
public GraphicEngine getEngine(final String string) throws NullPointerException {
2018-09-11 01:12:54 +02:00
return el.get(string);
}
@Override
2018-09-22 11:17:30 +02:00
public void throwNewExceptionInInitializerError(final String text) {
2018-09-11 01:12:54 +02:00
throw new ExceptionInInitializerError();
}
@Override
2018-09-22 11:17:30 +02:00
public String[] stacktraceToString(final Error e) {
2018-09-11 01:12:54 +02:00
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
return sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n");
}
@Override
2019-08-09 20:51:31 +02:00
public List<String> getRuleFilePaths() throws IOException {
2019-08-09 21:08:22 +02:00
final File dslRulesPath = getStorageUtils().get("rules/");
2019-08-09 20:51:31 +02:00
List<String> paths = new ArrayList<>();
if (dslRulesPath.exists()) {
for (final File file : getStorageUtils().walk(dslRulesPath)) {
final String path = file.toString();
if (path.endsWith(".rules")) {
paths.add(path);
}
}
}
return paths;
2018-09-11 01:12:54 +02:00
}
@Override
2018-09-22 11:17:30 +02:00
public void zip(final String targetPath, final String destinationFilePath, final String password) {
2018-09-11 01:12:54 +02:00
try {
final ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if (password.length() > 0) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword(password);
}
final ZipFile zipFile = new ZipFile(destinationFilePath);
final File targetFile = new File(targetPath);
2018-09-22 11:17:30 +02:00
if (targetFile.isFile())
2018-09-11 01:12:54 +02:00
zipFile.addFile(targetFile, parameters);
2018-09-22 11:17:30 +02:00
else if (targetFile.isDirectory())
2018-09-11 01:12:54 +02:00
zipFile.addFolder(targetFile, parameters);
} catch (final Exception e) {
e.printStackTrace();
}
}
@Override
2018-09-22 11:17:30 +02:00
public void unzip(final String targetZipFilePath, final String destinationFolderPath, final String password) {
2018-09-11 01:12:54 +02:00
try {
final ZipFile zipFile = new ZipFile(targetZipFilePath);
2018-09-22 11:17:30 +02:00
if (zipFile.isEncrypted())
2018-09-11 01:12:54 +02:00
zipFile.setPassword(password);
zipFile.extractAll(destinationFolderPath);
} catch (final Exception e) {
e.printStackTrace();
}
}
2018-10-06 16:37:44 +02:00
@Override
public void setRunningOnRaspberry(boolean b) {
runningOnRaspberryOverride = b;
}
2018-09-11 01:12:54 +02:00
@Override
public boolean isRunningOnRaspberry() {
2018-10-06 16:37:44 +02:00
if (runningOnRaspberryOverride != null) return runningOnRaspberryOverride;
2018-09-11 01:12:54 +02:00
return true;
/*
return CacheUtils.get("isRunningOnRaspberry", 24 * 60 * 60 * 1000, () -> {
if (Engine.getPlatform().isJavascript())
return false;
try {
// Check if it's a raspberry using pi4j
return Engine.getPlatform().getGpio().getBoardType() != Engine.getPlatform().getGpio().valueUnknownBoardType();
} catch (final Exception e) {
// Check if it's a raspberry using other methods
if (Engine.getPlatform().getOsName().equals("Linux")) {
try {
final File osRelease = new File("/etc", "os-release");
return FileUtils.readLines(osRelease, "UTF-8").stream().map(String::toLowerCase).anyMatch(line -> line.contains("raspbian") && line.contains("name"));
} catch (IOException readException) {
return false;
}
2018-09-22 11:17:30 +02:00
2018-09-11 01:12:54 +02:00
} else {
return false;
}
}
});
*/
}
}