Search code examples
javaandroidrfid

What does the error "ACCESS_TAG_MEMORY_OVERRUN_ERROR" in Zebra Android SDK mean, and how to fix it?


I am trying to read Memory Bank data from tags, and there are no exceptions, but the Operation Status returns "ACCESS_TAG_MEMORY_OVERRUN_ERROR"

This happens with every tag now, while the official SKD RFID Zebra Application has a timeout error, when trying to read, when it previously didn't, so I wonder if my reader didn't break. I'm at a loss. The documentation explains absolutely nothing about what these errors mean, and there are next to no resources on RFID coding.

public String readTag(String tagID){
    String tagId = tagID;
    TagAccess tagAccess = new TagAccess();
    TagAccess.ReadAccessParams readAccessParams = tagAccess.new ReadAccessParams();
    readAccessParams.setCount(4);
    readAccessParams.setMemoryBank(MEMORY_BANK.MEMORY_BANK_USER);
    readAccessParams.setOffset(0);
    try {
        TagData tagData = reader.Actions.TagAccess.readWait(tagId, readAccessParams, null);
        System.out.println("OPERATION STATUS ---> " + tagData.getOpStatus());
        return tagData.getMemoryBankData();
    } catch (InvalidUsageException e) {
        System.out.println("INVALID USAGE EXCEPTION ---> " + e.getInfo());
        e.printStackTrace();
        return "";
    } catch (OperationFailureException e) {
        System.out.println("INVALID USAGE EXCEPTION ---> " + e.getResults());
        e.printStackTrace();
        return "";
    }
}

Despite that being the Read method, I'm not entirely sure it's at fault here, as it's copy-pasted from the Zebra guide at http://techdocs.zebra.com/dcs/rfid/android/2-15/tutorials/readaccess/ , but I'm at a loss. It just keeps returning "null" (despite the fact that I know it has data) and giving me "ACCESS_TAG_MEMORY_OVERRUN_ERROR" as the Status. Just knowing what it means would point me enough in the right direction. As it is, I can only guess blindly, and it's very frustrating. Thank you.


Solution

  • The error occurs because you try to read more words than the epc memory bank of your rfid tag has. You can omit the

    // readAccessParams.setCount(4);
    

    statement.