Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

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();

    }

}

Geschrieben

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.

Geschrieben
  • Autor

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();

Geschrieben
  • Autor

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...

Geschrieben
  • Autor

If you intend as it is reported there with the print of the state commented, NO, I do not get any state at all...

Geschrieben

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?

Geschrieben

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.

Geschrieben
  • Autor

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 ...

Geschrieben

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

Geschrieben
  • Autor

It works like a charm! thanks again for your kind support...I really appreciated

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.