wbackup83 Geschrieben August 7, 2018 at 11:04 Geschrieben August 7, 2018 at 11:04 I don't understand why using a mifare tag using the provided code i can read the tag page without authenticating ...moreover the state page ready is never accessed... for this reason the page if i change the tag still remains the same... can you take a look at my code to understand if i m missing something or what? Tags are found, i can print the page content without authenticating it...(commented) public class ExampleScanForTags { private static final String HOST = "localhost"; private static final int PORT = 4223; // Change XYZ to the UID of your NFC/RFID Bricklet private static final String UID = "uqB"; private static short currentTagType = 0; // Note: To make the example code cleaner we do not handle exceptions. Exceptions // you might normally want to catch are described in the documentation public static void main(String args[]) throws Exception { IPConnection ipcon = new IPConnection(); // Create IP connection // Note: Declare nr as final, so the listener can access it final BrickletNFCRFID nr = new BrickletNFCRFID(UID, ipcon); // Create device object ipcon.connect(HOST, PORT); // Connect to brickd // Don't use device before ipcon is connected // Add state changed listener nr.addStateChangedListener(new BrickletNFCRFID.StateChangedListener() { public void stateChanged(short state, boolean idle) { //System.out.println(state); try { if(idle) { currentTagType = 0; //(short)((currentTagType + 1) % 3); nr.requestTagID(currentTagType); } if(state == BrickletNFCRFID.STATE_REQUEST_TAG_ID_READY) { BrickletNFCRFID.TagID tagID = nr.getTagID(); String s = "Found tag of type " + tagID.tagType + " with ID [" + Integer.toHexString(tagID.tid[0]); for(int i = 1; i < tagID.tidLength; i++) { s += " " + Integer.toHexString(tagID.tid); } s += "]"; System.out.println(s); //added code short[] keys= {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //nr.authenticateMifareClassicPage(5, (short) 0,keys); short[] data=nr.getPage(); System.out.println(Arrays.toString(data)); } if(state == BrickletNFCRFID.STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_READY) { System.out.println("Ready"); } if(state == BrickletNFCRFID.STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_ERROR) { System.out.println("error"); } } catch(Exception e) { System.out.println(e); } } }); // Start scan loop nr.requestTagID(BrickletNFCRFID.TAG_TYPE_MIFARE_CLASSIC); System.out.println("Press key to exit"); System.in.read(); ipcon.disconnect(); } } Zitieren
borg Geschrieben August 7, 2018 at 19:53 Geschrieben August 7, 2018 at 19:53 I think if you call getPage you will get the page from the last successful read. So if you call getPage in the REQUEST_TAG_ID_READY state, you will not actually read a new page. You have to first authenticate, then request the page and then you can call getPage. Zitieren
wbackup83 Geschrieben August 7, 2018 at 20:14 Autor Geschrieben August 7, 2018 at 20:14 Thanks for the reply...but it is the same: it always returns the same page with different tags and the other states are never accessed. nr.addStateChangedListener(new BrickletNFCRFID.StateChangedListener() { public void stateChanged(short state, boolean idle) { //System.out.println(state); try { if(idle) { currentTagType = 0; //(short)((currentTagType + 1) % 3); nr.requestTagID(currentTagType); } if(state == BrickletNFCRFID.STATE_REQUEST_TAG_ID_READY) { BrickletNFCRFID.TagID tagID = nr.getTagID(); String s = "Found tag of type " + tagID.tagType + " with ID [" + Integer.toHexString(tagID.tid[0]); for(int i = 1; i < tagID.tidLength; i++) { s += " " + Integer.toHexString(tagID.tid); } s += "]"; System.out.println(s); //added code short[] keys= {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; nr.authenticateMifareClassicPage(5, (short) 0,keys); nr.requestPage(5); short[] data=nr.getPage(); System.out.println(Arrays.toString(data)); } if(state == BrickletNFCRFID.STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_READY) { System.out.println("Ready"); } if(state == BrickletNFCRFID.STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_ERROR) { System.out.println("error"); } } catch(Exception e) { System.out.println(e); } } }); // Start scan loop nr.requestTagID(BrickletNFCRFID.TAG_TYPE_MIFARE_CLASSIC); System.out.println("Press key to exit"); System.in.read(); ipcon.disconnect(); Zitieren
wbackup83 Geschrieben August 7, 2018 at 20:17 Autor Geschrieben August 7, 2018 at 20:17 What i would expect it would be to access the STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_READY state after calling authenticateMifareClassicPage(). But this does not happen... Zitieren
borg Geschrieben August 7, 2018 at 20:26 Geschrieben August 7, 2018 at 20:26 If you comment in the "//System.out.println(state);", do you get any new state after you call authenticateMifareClassicPage()? Or no new state at all? Zitieren
wbackup83 Geschrieben August 8, 2018 at 05:56 Autor Geschrieben August 8, 2018 at 05:56 If you intend as it is reported there with the print of the state commented, NO, I do not get any state at all... Zitieren
borg Geschrieben August 8, 2018 at 07:17 Geschrieben August 8, 2018 at 07:17 Strange, do you now what kind of mifare classic tag you have? Is it something special? Do you have a second one you could test with? Zitieren
wbackup83 Geschrieben August 8, 2018 at 07:26 Autor Geschrieben August 8, 2018 at 07:26 https://www.amazon.it/gp/product/B01FLOQNMI/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1 I have these... I tried with another tag of the same brand and it's the same... Zitieren
borg Geschrieben August 8, 2018 at 08:19 Geschrieben August 8, 2018 at 08:19 Looking at your code, you do: nr.authenticateMifareClassicPage(5, (short) 0,keys); nr.requestPage(5); short[] data=nr.getPage(); System.out.println(Arrays.toString(data)); I think you should first call nr.authenticateMifareClassicPage(5, (short) 0,keys); then in the state STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_READY call nr.requestPage(5); and then in the state STATE_REQUEST_PAGE_READY call short[] data=nr.getPage(); System.out.println(Arrays.toString(data)); Does it work when you do that? Zitieren
wbackup83 Geschrieben August 8, 2018 at 10:09 Autor Geschrieben August 8, 2018 at 10:09 Nope...it does not enter in the state ...never.. I attach the java file so you can try it if you want thanks again for the supportExampleScanForTags.java Zitieren
borg Geschrieben August 8, 2018 at 12:02 Geschrieben August 8, 2018 at 12:02 Hi, it works after a few tweaks: olaf@pc2:~/build20/java$ javac -cp Tinkerforge.jar:. ExampleScanForTags.java olaf@pc2:~/build20/java$ java -cp Tinkerforge.jar:. ExampleScanForTags Press key to exit Found tag of type 0 with ID [6d b8 97 f7] Ready page ready [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] The Problem with your code is that you call "nr.requestTagID(currentTagType);" every time that the Bricklet is in idle state. But it goes into idle state after it reaches any of the new states. So you call requestTagID in a loop. For me it started to work immediately after i commented out the if(idle) {...} block. Zitieren
wbackup83 Geschrieben August 8, 2018 at 12:51 Autor Geschrieben August 8, 2018 at 12:51 can you please attach the code or paste it? Zitieren
borg Geschrieben August 8, 2018 at 13:22 Geschrieben August 8, 2018 at 13:22 See attachment. Edit: Dont forget to change the UID back to yours.ExampleScanForTags.java Zitieren
wbackup83 Geschrieben August 8, 2018 at 13:35 Autor Geschrieben August 8, 2018 at 13:35 This works if I put the tag on the reader when i run the main... What i need is to scan and be active for other tags ... for this reason I don't understand where to put the loop ... Zitieren
borg Geschrieben August 8, 2018 at 13:48 Geschrieben August 8, 2018 at 13:48 Well, if no tag is there you will get into the state STATE_REQUEST_TAG_ID_ERROR and you have to run requestTagID from there again. I attached a working program that runs in a loop. Please note: All of the steps can create an error. For example: What happens if someone removes the card after the authentication but before the page was read? In this case you probably want to scan for a tag again. You have to handle all of these states if you want it to be robust.ExampleScanForTags.java Zitieren
wbackup83 Geschrieben August 8, 2018 at 14:06 Autor Geschrieben August 8, 2018 at 14:06 It works like a charm! thanks again for your kind support...I really appreciated Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.