diff --git a/Main/pom.xml b/Main/pom.xml
index 456b1a8bf..9fb3efa1b 100644
--- a/Main/pom.xml
+++ b/Main/pom.xml
@@ -5,7 +5,7 @@
4.0.0
org.chameleon-vision.main
chameleon-vision
- 1.1.4-BETA
+ 1.1.3-BETA
@@ -14,9 +14,7 @@
maven-compiler-plugin
3.8.0
- 12
- 12
- true
+ 12
diff --git a/Main/src/main/java/com/chameleonvision/Main.java b/Main/src/main/java/com/chameleonvision/Main.java
index e24da500f..18f599a0b 100644
--- a/Main/src/main/java/com/chameleonvision/Main.java
+++ b/Main/src/main/java/com/chameleonvision/Main.java
@@ -24,6 +24,7 @@ public class Main {
private static final int DEFAULT_PORT = 8888;
+ private static int webserverPort = DEFAULT_PORT;
private static boolean ntServerMode = false;
private static boolean manageNetwork = true;
private static boolean ignoreRoot = false;
@@ -42,7 +43,7 @@ public class Main {
}
}
- private static final Platform CurrentPlatform = Platform.getCurrentPlatform();
+ public static final Platform CurrentPlatform = Platform.getCurrentPlatform();
private static void handleArgs(String[] args) {
for (int i = 0; i < args.length; i++) {
@@ -126,10 +127,12 @@ public class Main {
// Attempt to load the JNI Libraries
try {
+ if (CurrentPlatform.equals(Platform.LINUX_ARM64))
CameraServerJNI.forceLoad();
CameraServerCvJNI.forceLoad();
} catch (IOException e) {
- throw new RuntimeException("Failed to load JNI Libraries!");
+ var errorStr = CurrentPlatform.equals(Platform.UNSUPPORTED) ? "Unsupported platform!" : "Failed to load JNI Libraries!";
+ throw new RuntimeException(errorStr);
}
if (CameraManager.initializeCameras()) {
@@ -149,7 +152,6 @@ public class Main {
}
}
- int webserverPort = DEFAULT_PORT;
System.out.printf("Starting Webserver at port %d\n", webserverPort);
Server.main(webserverPort);
} else {
diff --git a/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java b/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java
index 42998a9a0..3e1d811de 100644
--- a/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java
+++ b/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java
@@ -1,13 +1,22 @@
package com.chameleonvision.network;
+import com.chameleonvision.settings.NetworkSettings;
+import com.chameleonvision.settings.SettingsManager;
+import com.chameleonvision.util.ShellExec;
+
+import java.io.BufferedOutputStream;
import java.io.IOException;
+import java.net.InetAddress;
import java.net.SocketException;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LinuxNetworking extends SysNetworking {
+ private ShellExec shell = new ShellExec(true, true);
+
@Override
public boolean setDHCP() {
String[] clearArgs = { "addr", "flush", "dev", networkInterface.name };
diff --git a/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java b/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java
index 2c20abf44..75b5f7224 100644
--- a/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java
+++ b/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java
@@ -1,8 +1,10 @@
package com.chameleonvision.network;
+import com.chameleonvision.settings.GeneralSettings;
+
+import java.net.InetAddress;
import java.net.InterfaceAddress;
-@SuppressWarnings("WeakerAccess")
public class NetworkInterface {
public final String name;
public final String displayName;
@@ -41,8 +43,9 @@ public class NetworkInterface {
}
// Transform the resulting value in xxx.xxx.xxx.xxx format, like if
/// it was a standard address...
- // Return the address thus created...
- return ((shiftby >> 24) & 255) + "." + ((shiftby >> 16) & 255) + "." + ((shiftby >> 8) & 255) + "." + (shiftby & 255);
+ String maskString = ((shiftby >> 24) & 255) + "." + ((shiftby >> 16) & 255) + "." + ((shiftby >> 8) & 255) + "." + (shiftby & 255);
+ // Return the address thus created...
+ return maskString;
// return InetAddress.getByName(maskString);
}
catch(Exception e) {
diff --git a/Main/src/main/java/com/chameleonvision/network/NetworkManager.java b/Main/src/main/java/com/chameleonvision/network/NetworkManager.java
index a724cf42a..359735f76 100644
--- a/Main/src/main/java/com/chameleonvision/network/NetworkManager.java
+++ b/Main/src/main/java/com/chameleonvision/network/NetworkManager.java
@@ -1,6 +1,7 @@
package com.chameleonvision.network;
+import com.chameleonvision.settings.NetworkSettings;
import com.chameleonvision.settings.Platform;
import com.chameleonvision.settings.SettingsManager;
@@ -11,7 +12,8 @@ import java.util.List;
public class NetworkManager {
private NetworkManager() {}
- private static SysNetworking networking;
+ protected static SysNetworking networking;
+ protected static NetworkInterface botInterface = null;
private static boolean isManaged = false;
public static void initialize(boolean manage) {
@@ -62,7 +64,7 @@ public class NetworkManager {
return;
}
- NetworkInterface botInterface = goodInterfaces.get(0);
+ botInterface = goodInterfaces.get(0);
networking.setNetworkInterface(botInterface);
} else {
isManaged = false;
@@ -76,10 +78,6 @@ public class NetworkManager {
}
}
- private static byte[] GetTeamNumberIPBytes(int teamNumber) {
- return new byte[]{(byte) (teamNumber / 100), (byte) (teamNumber % 100)};
- }
-
private static boolean loadFromGeneralSettings() {
if (!isManaged) {
return true;
diff --git a/Main/src/main/java/com/chameleonvision/network/SysNetworking.java b/Main/src/main/java/com/chameleonvision/network/SysNetworking.java
index 63a609984..91684e775 100644
--- a/Main/src/main/java/com/chameleonvision/network/SysNetworking.java
+++ b/Main/src/main/java/com/chameleonvision/network/SysNetworking.java
@@ -5,6 +5,7 @@ import com.chameleonvision.util.ShellExec;
import java.io.IOException;
import java.net.SocketException;
import java.util.List;
+import java.util.Scanner;
public abstract class SysNetworking {
diff --git a/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java b/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java
index d03da14e2..d6ccd829b 100644
--- a/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java
+++ b/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java
@@ -1,5 +1,8 @@
package com.chameleonvision.network;
+import com.chameleonvision.settings.NetworkSettings;
+import com.chameleonvision.settings.SettingsManager;
+
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/Main/src/main/java/com/chameleonvision/settings/NetworkSettings.java b/Main/src/main/java/com/chameleonvision/settings/NetworkSettings.java
new file mode 100644
index 000000000..78c28e017
--- /dev/null
+++ b/Main/src/main/java/com/chameleonvision/settings/NetworkSettings.java
@@ -0,0 +1,80 @@
+package com.chameleonvision.settings;
+
+import java.net.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import com.chameleonvision.util.Utilities;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.SystemUtils;
+
+public class NetworkSettings {
+ public String connectionType, ip, netmask, gateway, hostname;
+
+ public void run() {
+// String adapter = getAdapter();
+ if (SystemUtils.IS_OS_LINUX) {//TODO check linux commands
+ String adapter = getAdapter();
+ if (!adapter.equals("")) {
+ executeCommand("ifconfig " + adapter + " down");
+ if (connectionType.equals("DHCP"))
+ executeCommand("dhclient -r " + adapter);
+ else if (connectionType.equals("Static")) {
+ executeCommand("ifconfig " + adapter + " " + this.ip + " netmask " + this.netmask);
+ executeCommand("route add default gw " + this.gateway + " " + adapter);
+ }
+ executeCommand("ifconfig " + adapter + " up");
+ }
+ executeCommand("hostnamectl set-hostname " + this.hostname);
+ }
+// //TODO check windows commands
+// else if (SystemUtils.IS_OS_WINDOWS) {
+// if (!adapter.equals("")) {
+// if (connectionType.equals("DHCP")){
+// executeCommand("cmd /c interface ip set address \"" + adapter + "\" dhcp");
+// }
+// else if (connectionType.equals("Static")) {
+// executeCommand("cmd /c netsh interface ip set address \"" + adapter + "\" static " + this.ip + " " + this.netmask + " " + this.gateway + "1");
+// }
+// }
+// //TODO find a way to change hostname in windows
+// }
+ }
+
+ private void executeCommand(String command) {
+ try {
+ Process p = Runtime.getRuntime().exec(command);
+ System.out.println("Executing "+ command);
+ p.waitFor();
+ p.destroy();
+ } catch (Exception e) {
+ System.err.println("Error while executing command!");
+ e.printStackTrace();
+ }
+ }
+
+ public static byte[] GetTeamNumberIPBytes(int teamNumber) {
+ return new byte[]{(byte) (teamNumber / 100), (byte) (teamNumber % 100)};
+ }
+
+ public static String getAdapter() {
+ try {//TODO fix windows get adapter
+ Enumeration nets = NetworkInterface.getNetworkInterfaces();
+ for (NetworkInterface netint : Collections.list(nets)) {
+ Enumeration ee = netint.getInetAddresses();
+ for (InetAddress addr : Collections.list(ee))
+ if (addr instanceof Inet4Address) {
+ var addrString = addr.toString();
+ if ((addr.getAddress()[0] & 0xFF) == 10 && (addr.getAddress()[1] & 0xFF) == 168) {
+ System.out.println("found robot network interface at " + netint.getName() + " ip: " + addr.getHostAddress());
+ return netint.getName();
+ }
+ }
+ }
+ } catch (SocketException e) {
+ System.err.println("Socket exception while trying to find current IP");
+ }
+ return "";
+ }
+}
diff --git a/Main/src/main/java/com/chameleonvision/settings/Platform.java b/Main/src/main/java/com/chameleonvision/settings/Platform.java
index 64f70f1f7..a018ffa73 100644
--- a/Main/src/main/java/com/chameleonvision/settings/Platform.java
+++ b/Main/src/main/java/com/chameleonvision/settings/Platform.java
@@ -45,9 +45,7 @@ public enum Platform {
} catch (IOException e) {
e.printStackTrace();
}
- while (!shell.isOutputCompleted()) {
- // ignored
- }
+ while (!shell.isOutputCompleted()) {}
if (shell.getExitCode() == 0) {
var out = shell.getOutput();
out = out.split("\n")[0];
diff --git a/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java b/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java
index d26444630..5cfa1eae8 100644
--- a/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java
+++ b/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java
@@ -1,5 +1,6 @@
package com.chameleonvision.settings;
+import com.chameleonvision.network.NetworkManager;
import com.chameleonvision.util.FileHelper;
import com.chameleonvision.vision.camera.CameraManager;
import com.google.gson.Gson;
@@ -20,6 +21,16 @@ public class SettingsManager {
public static void initialize() {
initGeneralSettings();
+// if (manageNetwork) {
+
+// NetworkSettings netSettings = new NetworkSettings();
+// netSettings.hostname = GeneralSettings.hostname;
+// netSettings.gateway = GeneralSettings.gateway;
+// netSettings.netmask = GeneralSettings.netmask;
+// netSettings.connectionType = GeneralSettings.connection_type;
+// netSettings.ip = GeneralSettings.ip;
+// netSettings.run();
+// }
var allCameras = CameraManager.getAllCamerasByName();
if (!allCameras.containsKey(GeneralSettings.currentCamera) && allCameras.size() > 0) {
var cam = allCameras.entrySet().stream().findFirst().get().getValue();
diff --git a/Main/src/main/java/com/chameleonvision/util/ShellExec.java b/Main/src/main/java/com/chameleonvision/util/ShellExec.java
index f0fa0f1cd..a6347edba 100644
--- a/Main/src/main/java/com/chameleonvision/util/ShellExec.java
+++ b/Main/src/main/java/com/chameleonvision/util/ShellExec.java
@@ -101,7 +101,7 @@ public class ShellExec {
* http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4
*/
@SuppressWarnings("WeakerAccess")
- private static class StreamGobbler extends Thread {
+ private class StreamGobbler extends Thread {
private InputStream is;
private StringBuilder output;
private volatile boolean completed; // mark volatile to guarantee a thread safety
diff --git a/Main/src/main/java/com/chameleonvision/util/Utilities.java b/Main/src/main/java/com/chameleonvision/util/Utilities.java
index 0be21374e..800a80330 100644
--- a/Main/src/main/java/com/chameleonvision/util/Utilities.java
+++ b/Main/src/main/java/com/chameleonvision/util/Utilities.java
@@ -26,7 +26,7 @@ public class Utilities {
}
public static List getDigits(int num) {
- List digits = new ArrayList<>();
+ List digits = new ArrayList();
collectDigits(num, digits);
return digits;
}
diff --git a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java
index 3d2c07f36..ca8f55fe3 100644
--- a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java
+++ b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java
@@ -24,7 +24,6 @@ public class CVProcess {
private Mat binaryMat = new Mat();
private List filteredContours = new ArrayList<>();
private Comparator sortByCentermostComparator = Comparator.comparingDouble(this::calcDistance);
- private List speckleRejectedContours = new ArrayList<>();
private Comparator sortByMomentsX = Comparator.comparingDouble(this::calcMomentsX);
private List finalCountours = new ArrayList<>();
private MatOfPoint2f intersectMatA = new MatOfPoint2f();
@@ -87,20 +86,6 @@ public class CVProcess {
return filteredContours;
}
- List rejectSpeckles(List inputContours, Double minimumPercentOfAverage) {
- double averageArea = 0.0;
- for(MatOfPoint c : inputContours) {
- averageArea += Imgproc.contourArea(c);
- }
- averageArea /= inputContours.size();
- var minimumAllowableArea = minimumPercentOfAverage / 100.0 * averageArea;
- speckleRejectedContours.clear();
- for(MatOfPoint c : inputContours) {
- if(Imgproc.contourArea(c) >= minimumAllowableArea) speckleRejectedContours.add(c);
- }
- return speckleRejectedContours;
- }
-
private double calcDistance(RotatedRect rect) {
return FastMath.sqrt(FastMath.pow(cameraValues.CenterX - rect.center.x, 2) + FastMath.pow(cameraValues.CenterY - rect.center.y, 2));
}
diff --git a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java
index f67249f01..bbb2dda82 100644
--- a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java
+++ b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java
@@ -2,7 +2,6 @@ package com.chameleonvision.vision.process;
import org.opencv.core.RotatedRect;
-@SuppressWarnings("WeakerAccess")
public class PipelineResult {
public boolean IsValid = false;
public double CalibratedX = 0.0;