Как исправить «GetStatus Записать данные RFID_API_UNKNOWN_ERROR (x) - Поле может принимать только значения Word» Android RFID 8500 Zebra - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь разработать и приложение для чтения и записи в RF-теги.Чтение безупречно, но у меня проблемы с письмом.В частности, ошибка «GetStatus Write RFID_API_UNKNOWN_ERROR data (x) - Поле может принимать только значения Word»

Я попытался выполнить обратный инжиниринг Zebra RFID API Mobile, получив .apk и расшифровав его, но код запутани я не могу расшифровать, почему запись этого приложения работает, а моя - нет.

Я вижу ошибку в https://www.ptsmobile.com/rfd8500/rfd8500-rfid-developer-guide.pdf на странице 185, но я понятия не имею, что ее вызывает.

Я попытался принудительно изменить writeData на Hex, прежде чем я понял, что API делает это самостоятельно, я также попытался изменить длину writeData, но он просто получает нулевое значение.Я так растерялся.

public boolean WriteTag(String sourceEPC, long Password, MEMORY_BANK memory_bank, String targetData, int offset) {
    Log.d(TAG, "WriteTag " + targetData);
    try {
        TagData tagData = null;
        String tagId = sourceEPC;
        TagAccess tagAccess = new TagAccess();
        tagAccess.getClass();
        TagAccess.WriteAccessParams writeAccessParams = tagAccess.new WriteAccessParams();
        String writeData = targetData; //write data in string
        writeAccessParams.setAccessPassword(Password);
        writeAccessParams.setMemoryBank(MEMORY_BANK.MEMORY_BANK_USER);

        writeAccessParams.setOffset(offset); // start writing from word offset 0
        writeAccessParams.setWriteData(writeData);
        // set retries in case of partial write happens
        writeAccessParams.setWriteRetries(3);
        // data length in words
        System.out.println("length: " + writeData.length()/4);
        System.out.println("length: " + writeData.length());
        writeAccessParams.setWriteDataLength(writeData.length()/4);
        // 5th parameter bPrefilter flag is true which means API will apply pre filter internally
        // 6th parameter should be true in case of changing EPC ID it self i.e. source and target both is EPC
        boolean useTIDfilter = memory_bank == MEMORY_BANK.MEMORY_BANK_EPC;
        reader.Actions.TagAccess.writeWait(tagId, writeAccessParams, null, tagData, true, useTIDfilter);
    } catch (InvalidUsageException e) {
        System.out.println("INVALID USAGE EXCEPTION: " + e.getInfo());
        e.printStackTrace();
        return false;
    } catch (OperationFailureException e) {
        //System.out.println("OPERATION FAILURE EXCEPTION");
        System.out.println("OPERATION FAILURE EXCEPTION: " + e.getResults().toString());
        e.printStackTrace();
        return false;
    }
    return true;
}

С

  • Пароль - 00
  • sourceEPC - идентификатор тега, полученный после чтения
  • Банк памятибудучи MEMORY_BANK.MEMORY_BANK_USER
  • целевые данные являются "8426017056458"
  • смещение равно 0

Он просто продолжает давать мне "GetStatus Записать данные RFID_API_UNKNOWN_ERROR (x) - Поле можетТолько примите значения Word », и я не знаю, почему это так, и я не знаю, что такое« значение Word », и я искал его.Это все в рамках «OperationFailureException», а также.Буду признателен за любую помощь, так как в Интернете почти нет ресурсов для такого рода вещей.

...