Nfc reader (#2)

* added pn532.jar

* added pn532

* changed KartenLeserer

* added leser to BackendServer

* added welcheKarteSticht methode

* added welcheKarteSticht methode

* added sendKarte tofrontend when scanned

* added build config

* installed pn532 as local dependency

* added local dependency to pom

* edited KartenLeser

* edited KartenLeser

* edited KartenLeser

* edited KartenLeser

* edited pom

* edited pom

* edited pom

* deleted unused files

* added led

* added led

* added right dot env path

* added right dot env path

* added waitForScanMethod

* added waitForScanMethod

* added waitForScanMethod

* added waitForScanMethod

* added waitForScanMethod

* added waitForScanMethod

* removed unused print statements

* removed unused imports

* removed pn532 jar

* removed pn532 jar
This commit is contained in:
Valentin Heiserer
2023-11-16 18:07:37 +01:00
committed by GitHub
parent e63f18f4b7
commit 7f2cf98607
19 changed files with 307 additions and 155 deletions

View File

@@ -13,6 +13,7 @@ import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerI
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlets.CrossOriginFilter;
@@ -33,17 +34,25 @@ public class BackendServer
private final ServerConnector connector;
private final Schafkopf schafkopfGame;
private final KartenLeser nfcLeser;
private CountDownLatch nfcLatch = new CountDownLatch(1);
private Boolean readingMode = false;
private String uidString = "";
public BackendServer()
{
Dotenv dotenv = Dotenv.configure().load();
Dotenv dotenv = Dotenv.configure().directory("./").load();
server = new Server();
InetSocketAddress address = new InetSocketAddress(dotenv.get("VITE_APP_WEBSOCKET_IP"), 8080);
connector = new ServerConnector(server);
connector.setHost(address.getHostName());
connector.setPort(address.getPort());
server.addConnector(connector);
schafkopfGame = new Schafkopf(this);
nfcLeser = new KartenLeser(this);
// Setup the basic application "context" for this application at "/"
// This is also known as the handler tree (in jetty speak)
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
@@ -133,4 +142,23 @@ public class BackendServer
public void showFarbe() {
schafkopfGame.showFarbe();
}
public void nfcGelesen(String uidString) {
if(this.uidString.equals(uidString)){
return;
}
if(!this.readingMode){
return;
}
this.uidString = uidString;
nfcLatch.countDown();
}
public String waitForCardScan() throws InterruptedException {
this.readingMode = true;
nfcLatch.await();
this.readingMode = false;
nfcLatch = new CountDownLatch(1);
return this.uidString;
}
}

View File

@@ -0,0 +1,72 @@
package org.example;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.pi4j.Pi4J;
import com.pi4j.io.i2c.I2C;
import mk.hsilomedus.pn532.*;
import mk.hsilomedus.pn532.Pn532SamThread.Pn532SamThreadListener;
public final class KartenLeser {
private static BackendServer server;
public KartenLeser(BackendServer server){
this.server = server;
new Thread(() -> {
new KartenListener().run();
}).start();
}
public static final void main(String[] args) throws IOException {
}
private static class KartenListener implements Pn532SamThreadListener {
@SuppressWarnings("rawtypes")
Pn532SamThread<I2C> i2cThread = new Pn532SamThread<>(this, new Pn532I2c());
public void run() {
Pn532ContextHelper.initialize();
i2cThread.start();
}
public void close() {
closeThread(i2cThread);
Pn532ContextHelper.shutdown();
}
@Override
public void receiveMessage(String message) {
System.out.println(message);
}
@Override
public void uidReceived(String displayName, byte[] uid) {
server.nfcGelesen(Pn532SamThreadListener.getUidString(uid) );
}
@SuppressWarnings("rawtypes")
private void closeThread(Pn532SamThread thread) {
if (thread != null && thread.isAlive()) {
thread.close();
try {
thread.join();
} catch (InterruptedException e) {
System.out.println("Error closing thread: " + e.getMessage());
Thread.currentThread().interrupt();
}
}
}
}
}

View File

@@ -76,6 +76,89 @@ public class KartenUtil {
return cardName;
}
public static String getIdOfUid(String uid){
switch (uid){
case "04A56BB4780000":
return "eichel_7";
case "04A46BB4780000":
return "eichel_8";
case "04A26BB4780000":
return "eichel_9";
case "04A16BB4780000":
return "eichel_x";
case "049E6BB4780000":
return "eichel_k";
case "04A86BB4780000":
return "eichel_a";
case "04A06BB4780000":
return "eichel_u";
case "049F6BB4780000":
return "eichel_o";
case "04F26BB4780000":
return "blatt_7";
case "04A76BB4780000":
return "blatt_8";
case "049B6BB4780000":
return "blatt_9";
case "04996BB4780000":
return "blatt_x";
case "041CD2C2126F81":
return "blatt_k";
case "04A96BB4780000":
return "blatt_a";
case "049A6BB4780000":
return "blatt_u";
case "049D6BB4780000":
return "blatt_o";
case "04936BB4780000":
return "schell_7";
case "04F697C2126F80":
return "schell_8";
case "04946BB4780000":
return "schell_9";
case "04956BB4780000":
return "schell_x";
case "04986BB4780000":
return "schell_k";
case "04AA6BB4780000":
return "schell_a";
case "04966BB4780000":
return "schell_u";
case "04976BB4780000":
return "schell_o";
case "04F36BB4780000":
return "herz_7";
case "04B06BB4780000":
return "herz_8";
case "04AF6BB4780000":
return "herz_9";
case "04AE6BB4780000":
return "herz_x";
case "04AB6BB4780000":
return "herz_k";
case "049C6BB4780000":
return "herz_a";
case "04AD6BB4780000":
return "herz_u";
case "04AC6BB4780000":
return "herz_o";
}
return null;
}
public static Karte getKarteById(String id){
List<Karte> kartenList = initializeSchafKopfCardDeck();
for (Karte karte : kartenList) {
if (karte.getId().equalsIgnoreCase(id)) {
return karte;
}
}
return null;
}
public static void removeCards(List<Karte> allCards, List<Karte> cardsToRemove) {
allCards.removeAll(cardsToRemove);
}

View File

@@ -78,7 +78,6 @@ public class Schafkopf {
String karteJson = gson.toJson(karte);
server.sendMessageToAllFrontendEndpoints(karteJson);
}
}
public void showFarbe() {