RFID: add support for Kantech IOProx cards (#1261)

This commit is contained in:
Kate Temkin
2022-05-23 07:21:34 -06:00
committed by GitHub
parent 8a81b79e00
commit 522420ec70
19 changed files with 516 additions and 7 deletions

View File

@@ -1,4 +1,5 @@
#include "rfid_writer.h"
#include "protocols/protocol_ioprox.h"
#include <furi_hal.h>
#include "protocols/protocol_emmarin.h"
#include "protocols/protocol_hid_h10301.h"
@@ -143,6 +144,28 @@ void RfidWriter::write_hid(const uint8_t hid_data[3]) {
FURI_CRITICAL_EXIT();
}
/** Endian fixup. Translates an ioprox block into a t5577 block */
static uint32_t ioprox_encode_block(const uint8_t block_data[4]) {
uint8_t raw_card_data[] = {block_data[3], block_data[2], block_data[1], block_data[0]};
return *reinterpret_cast<uint32_t*>(&raw_card_data);
}
void RfidWriter::write_ioprox(const uint8_t ioprox_data[4]) {
ProtocolIoProx ioprox_card;
uint8_t encoded_data[8];
ioprox_card.encode(ioprox_data, 4, encoded_data, sizeof(encoded_data));
const uint32_t ioprox_config_block_data = 0b00000000000101000111000001000000;
FURI_CRITICAL_ENTER();
write_block(0, 0, false, ioprox_config_block_data);
write_block(0, 1, false, ioprox_encode_block(&encoded_data[0]));
write_block(0, 2, false, ioprox_encode_block(&encoded_data[4]));
write_reset();
FURI_CRITICAL_EXIT();
}
void RfidWriter::write_indala(const uint8_t indala_data[3]) {
ProtocolIndala40134 indala_card;
uint32_t card_data[2];