mirror of
https://github.com/Vale54321/schafkopf-bot.git
synced 2025-12-16 03:39:34 +01:00
rfid via usb (#21)
* added second possible cardReader for windows * refactored * fixed checkstyle * fixed wrong port selection
This commit is contained in:
committed by
GitHub
parent
1376fe645a
commit
d4deabfde9
6
pom.xml
6
pom.xml
@@ -72,6 +72,12 @@
|
|||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fazecast</groupId>
|
||||||
|
<artifactId>jSerialComm</artifactId>
|
||||||
|
<version>2.6.0</version> <!-- Check for the latest version on the official repository -->
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
|
|||||||
@@ -16,13 +16,16 @@ import org.eclipse.jetty.servlet.FilterHolder;
|
|||||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
import org.eclipse.jetty.servlets.CrossOriginFilter;
|
import org.eclipse.jetty.servlets.CrossOriginFilter;
|
||||||
import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
|
import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
|
||||||
|
import org.schafkopf.cardreader.CardReader;
|
||||||
|
import org.schafkopf.cardreader.GpioReader;
|
||||||
|
import org.schafkopf.cardreader.UsbCardReader;
|
||||||
|
|
||||||
/** Main Class that represents the Backend Server. */
|
/** Main Class that represents the Backend Server. */
|
||||||
public class BackendServer {
|
public class BackendServer {
|
||||||
private final Server server;
|
private final Server server;
|
||||||
private final ServerConnector connector;
|
private final ServerConnector connector;
|
||||||
private final Schafkopf schafkopfGame;
|
private final Schafkopf schafkopfGame;
|
||||||
private final KartenLeser nfcLeser;
|
private final CardReader nfcLeser;
|
||||||
private final List<FrontendEndpoint> frontendEndpoints = new ArrayList<>();
|
private final List<FrontendEndpoint> frontendEndpoints = new ArrayList<>();
|
||||||
private CountDownLatch nfcLatch = new CountDownLatch(1);
|
private CountDownLatch nfcLatch = new CountDownLatch(1);
|
||||||
private Boolean readingMode = false;
|
private Boolean readingMode = false;
|
||||||
@@ -39,7 +42,20 @@ public class BackendServer {
|
|||||||
server.addConnector(connector);
|
server.addConnector(connector);
|
||||||
|
|
||||||
schafkopfGame = new Schafkopf(this);
|
schafkopfGame = new Schafkopf(this);
|
||||||
nfcLeser = new KartenLeser(this);
|
// nfcLeser = new RaspberryKartenLeser(this);
|
||||||
|
String osName = System.getProperty("os.name").toLowerCase();
|
||||||
|
if (osName.contains("win")) {
|
||||||
|
// Windows
|
||||||
|
nfcLeser = new UsbCardReader(this);
|
||||||
|
} else if (osName.contains("nix") || osName.contains("nux") || osName.contains("mac")) {
|
||||||
|
// Unix/Linux/Mac
|
||||||
|
// You can add additional checks for specific Linux distributions or macOS versions if needed
|
||||||
|
// For now, assuming Raspberry Pi is running Linux
|
||||||
|
nfcLeser = new GpioReader(this);
|
||||||
|
} else {
|
||||||
|
// Other OS
|
||||||
|
throw new RuntimeException("Unsupported OS: " + osName);
|
||||||
|
}
|
||||||
|
|
||||||
// Setup the basic application "context" for this application at "/"
|
// Setup the basic application "context" for this application at "/"
|
||||||
// This is also known as the handler tree (in jetty speak)
|
// This is also known as the handler tree (in jetty speak)
|
||||||
|
|||||||
13
src/main/java/org/schafkopf/cardreader/CardReader.java
Normal file
13
src/main/java/org/schafkopf/cardreader/CardReader.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package org.schafkopf.cardreader;
|
||||||
|
|
||||||
|
import org.schafkopf.BackendServer;
|
||||||
|
|
||||||
|
/** Class that represents one Card Reader. */
|
||||||
|
public abstract class CardReader {
|
||||||
|
|
||||||
|
protected static BackendServer server;
|
||||||
|
|
||||||
|
public CardReader(BackendServer server) {
|
||||||
|
this.server = server;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.schafkopf;
|
package org.schafkopf.cardreader;
|
||||||
|
|
||||||
import com.pi4j.io.i2c.I2C;
|
import com.pi4j.io.i2c.I2C;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -6,21 +6,18 @@ import mk.hsilomedus.pn532.Pn532ContextHelper;
|
|||||||
import mk.hsilomedus.pn532.Pn532I2c;
|
import mk.hsilomedus.pn532.Pn532I2c;
|
||||||
import mk.hsilomedus.pn532.Pn532SamThread;
|
import mk.hsilomedus.pn532.Pn532SamThread;
|
||||||
import mk.hsilomedus.pn532.Pn532SamThread.Pn532SamThreadListener;
|
import mk.hsilomedus.pn532.Pn532SamThread.Pn532SamThreadListener;
|
||||||
|
import org.schafkopf.BackendServer;
|
||||||
|
|
||||||
/**
|
/** Class that represents the NFC Reader. */
|
||||||
* Class that represents the NFC Reader.
|
public final class GpioReader extends CardReader {
|
||||||
*/
|
|
||||||
public final class KartenLeser {
|
|
||||||
|
|
||||||
private static BackendServer server;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an Instance of the KartenLeser.
|
* Creates an Instance of the KartenLeser.
|
||||||
*
|
*
|
||||||
* @param server Backend Server to call methods on.
|
* @param server Backend Server to call methods on.
|
||||||
*/
|
*/
|
||||||
public KartenLeser(BackendServer server) {
|
public GpioReader(BackendServer server) {
|
||||||
this.server = server;
|
super(server);
|
||||||
|
|
||||||
new Thread(
|
new Thread(
|
||||||
() -> {
|
() -> {
|
||||||
80
src/main/java/org/schafkopf/cardreader/UsbCardReader.java
Normal file
80
src/main/java/org/schafkopf/cardreader/UsbCardReader.java
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
package org.schafkopf.cardreader;
|
||||||
|
|
||||||
|
import com.fazecast.jSerialComm.SerialPort;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import org.schafkopf.BackendServer;
|
||||||
|
|
||||||
|
/** Class that represents the NFC Reader. */
|
||||||
|
public class UsbCardReader extends CardReader {
|
||||||
|
|
||||||
|
private volatile boolean isRunning = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an Instance of the KartenLeser.
|
||||||
|
*
|
||||||
|
* @param server Backend Server to call methods on.
|
||||||
|
*/
|
||||||
|
public UsbCardReader(BackendServer server) {
|
||||||
|
super(server);
|
||||||
|
|
||||||
|
new Thread(this::run).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
isRunning = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** run the reader. */
|
||||||
|
public void run() {
|
||||||
|
SerialPort[] ports = SerialPort.getCommPorts();
|
||||||
|
SerialPort selectedPort = null;
|
||||||
|
|
||||||
|
for (SerialPort port : ports) {
|
||||||
|
if (port.getSystemPortName().equals("COM16")) {
|
||||||
|
selectedPort = port;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedPort == null) {
|
||||||
|
System.out.println("COM6 not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ports.length == 0) {
|
||||||
|
System.out.println("No serial ports found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SerialPort serialPort = selectedPort; // You may need to adjust this based on your setup
|
||||||
|
serialPort.setBaudRate(115200);
|
||||||
|
|
||||||
|
if (serialPort.openPort()) {
|
||||||
|
System.out.println("Serial port opened successfully");
|
||||||
|
|
||||||
|
try {
|
||||||
|
while (isRunning) {
|
||||||
|
if (serialPort.bytesAvailable() > 0) {
|
||||||
|
byte[] buffer = new byte[serialPort.bytesAvailable()];
|
||||||
|
int bytesRead = serialPort.readBytes(buffer, buffer.length);
|
||||||
|
|
||||||
|
String data = new String(buffer, 0, bytesRead, "UTF-8").trim();
|
||||||
|
server.nfcGelesen(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional: Add a delay to avoid consuming too much CPU
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} finally {
|
||||||
|
serialPort.closePort();
|
||||||
|
System.out.println("Serial port closed");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("Failed to open serial port");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,7 +44,7 @@ public class KartenUtil {
|
|||||||
*/
|
*/
|
||||||
public static Karte getIdOfUid(String uid) {
|
public static Karte getIdOfUid(String uid) {
|
||||||
return switch (uid) {
|
return switch (uid) {
|
||||||
case "04A56BB4780000" -> Karte.EICHEL_7;
|
case "04E7A9C2126F80" -> Karte.EICHEL_7;
|
||||||
case "04A46BB4780000" -> Karte.EICHEL_8;
|
case "04A46BB4780000" -> Karte.EICHEL_8;
|
||||||
case "04A26BB4780000" -> Karte.EICHEL_9;
|
case "04A26BB4780000" -> Karte.EICHEL_9;
|
||||||
case "04A16BB4780000" -> Karte.EICHEL_X;
|
case "04A16BB4780000" -> Karte.EICHEL_X;
|
||||||
|
|||||||
Reference in New Issue
Block a user