ACS ACR 1255U-J1 NFC Reader - Как запустить автоматический опрос
Я хочу подключиться к устройству из приложения для Android. Мне уже удалось успешно авторизоваться. Теперь я хотел бы запустить автоматический опрос, как описано в справочнике (команда запроса: E0 00 00 40 01, стр.30, https://www.acs.com.hk/download-manual/7664/REF-ACR1255U-J1-1.12.pdf), но я не понимаю.
Думаю, надо зашифровать запрос к читателю. Это правильно? Если да, то какой ключ мне нужно использовать? Приходит ли ключ (сеансовый ключ?) Из окончательного ответа в потоке авторизации?
Для тестирования я использовал демонстрационное приложение (https://www.acs.com.hk/download-driver-unified/9644/ACS-BT-EVK-Android-1.01r2.zip) и Wireshark для записи запросов. Я был очень удивлен, обнаружив, что запрос менялся каждый раз, когда я нажимал кнопку "начать опрос". Я ожидал, что он будет таким же, независимо от того, как часто я нажимаю.
Я был бы признателен за более полезное объяснение команды запуска опроса, чем то, которое я могу найти в справочнике.
1 ответ
Я только что создал команду автоматического опроса:
private static final byte[] AUTO_POLLING_START = {(byte) 0xE0, 0x00, 0x00, 0x40, 0x01};
затем функция, которую я выполняю в прослушивателе onAuthenticationComplete, после успешной аутентификации
private void startPolling() {
if (bluetoothReader == null) {
authStatus.setText("Card reader not ready");
return;
}
if (!bluetoothReader.transmitEscapeCommand(AUTO_POLLING_START)) {
authStatus.setText("Card reader not ready");
}
}
bluetoothReader.setOnAuthenticationCompleteListener(new BluetoothReader.OnAuthenticationCompleteListener() {
@Override
public void onAuthenticationComplete(BluetoothReader bluetoothReader, final int errorCode) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (errorCode == BluetoothReader.ERROR_SUCCESS) {
authStatus.setText("Authentication Success!");
startPolling();
} else {
authStatus.setText("Authentication Failed!");
}
}
});
}
});