[FL-2812] RFID: write fix for some protocols #1828
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
f16cdd1477
commit
a69e150e2f
@ -205,8 +205,15 @@ bool protocol_awid_write_data(ProtocolAwid* protocol, void* data) {
|
|||||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
|
// Fix incorrect length byte
|
||||||
|
if(protocol->data[0] != 26 && protocol->data[0] != 50 && protocol->data[0] != 37 &&
|
||||||
|
protocol->data[0] != 34) {
|
||||||
|
protocol->data[0] = 26;
|
||||||
|
}
|
||||||
|
|
||||||
// Correct protocol data by redecoding
|
// Correct protocol data by redecoding
|
||||||
protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data);
|
protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data);
|
||||||
|
bit_lib_remove_bit_every_nth((uint8_t*)protocol->encoded_data, 8, 88, 4);
|
||||||
protocol_awid_decode(protocol->encoded_data, protocol->data);
|
protocol_awid_decode(protocol->encoded_data, protocol->data);
|
||||||
|
|
||||||
protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data);
|
protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data);
|
||||||
|
@ -79,6 +79,14 @@ static bool protocol_fdx_a_decode(const uint8_t* from, uint8_t* to) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void protocol_fdx_a_fix_parity(ProtocolFDXA* protocol) {
|
||||||
|
for(size_t i = 0; i < FDXA_DECODED_DATA_SIZE; i++) {
|
||||||
|
if(bit_lib_test_parity_32(protocol->data[i], BitLibParityOdd)) {
|
||||||
|
protocol->data[i] ^= (1 << 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool protocol_fdx_a_can_be_decoded(const uint8_t* data) {
|
static bool protocol_fdx_a_can_be_decoded(const uint8_t* data) {
|
||||||
// check preamble
|
// check preamble
|
||||||
if(data[0] != FDXA_PREAMBLE_0 || data[1] != FDXA_PREAMBLE_1 || data[12] != FDXA_PREAMBLE_0 ||
|
if(data[0] != FDXA_PREAMBLE_0 || data[1] != FDXA_PREAMBLE_1 || data[12] != FDXA_PREAMBLE_0 ||
|
||||||
@ -179,6 +187,7 @@ bool protocol_fdx_a_write_data(ProtocolFDXA* protocol, void* data) {
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
// Correct protocol data by redecoding
|
// Correct protocol data by redecoding
|
||||||
|
protocol_fdx_a_fix_parity(protocol);
|
||||||
protocol_fdx_a_encoder_start(protocol);
|
protocol_fdx_a_encoder_start(protocol);
|
||||||
protocol_fdx_a_decode(protocol->encoded_data, protocol->data);
|
protocol_fdx_a_decode(protocol->encoded_data, protocol->data);
|
||||||
|
|
||||||
|
@ -170,6 +170,7 @@ bool protocol_keri_encoder_start(ProtocolKeri* protocol) {
|
|||||||
memset(protocol->encoded_data, 0, KERI_ENCODED_DATA_SIZE);
|
memset(protocol->encoded_data, 0, KERI_ENCODED_DATA_SIZE);
|
||||||
*(uint32_t*)&protocol->encoded_data[0] = 0b00000000000000000000000011100000;
|
*(uint32_t*)&protocol->encoded_data[0] = 0b00000000000000000000000011100000;
|
||||||
bit_lib_copy_bits(protocol->encoded_data, 32, 32, protocol->data, 0);
|
bit_lib_copy_bits(protocol->encoded_data, 32, 32, protocol->data, 0);
|
||||||
|
bit_lib_set_bits(protocol->encoded_data, 32, 1, 1);
|
||||||
|
|
||||||
protocol->encoder.last_bit =
|
protocol->encoder.last_bit =
|
||||||
bit_lib_get_bit(protocol->encoded_data, KERI_ENCODED_BIT_SIZE - 1);
|
bit_lib_get_bit(protocol->encoded_data, KERI_ENCODED_BIT_SIZE - 1);
|
||||||
@ -224,6 +225,8 @@ bool protocol_keri_write_data(ProtocolKeri* protocol, void* data) {
|
|||||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
|
// Start bit should be always set
|
||||||
|
protocol->data[0] |= (1 << 7);
|
||||||
protocol_keri_encoder_start(protocol);
|
protocol_keri_encoder_start(protocol);
|
||||||
|
|
||||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||||
|
@ -221,6 +221,7 @@ bool protocol_pyramid_write_data(ProtocolPyramid* protocol, void* data) {
|
|||||||
|
|
||||||
// Correct protocol data by redecoding
|
// Correct protocol data by redecoding
|
||||||
protocol_pyramid_encode(protocol);
|
protocol_pyramid_encode(protocol);
|
||||||
|
bit_lib_remove_bit_every_nth(protocol->encoded_data, 8, 15 * 8, 8);
|
||||||
protocol_pyramid_decode(protocol);
|
protocol_pyramid_decode(protocol);
|
||||||
|
|
||||||
protocol_pyramid_encoder_start(protocol);
|
protocol_pyramid_encoder_start(protocol);
|
||||||
|
Loading…
Reference in New Issue
Block a user