[FL-1059] T5577 write (#463)

* Api-hal-gpio: extend init functions
* App Lfrfid: separate protocol layer
* App Lfrfid: write EM key scene
* App Lfrfid: syntax fix
This commit is contained in:
SG
2021-05-18 18:37:47 +10:00
committed by GitHub
parent 588480831a
commit 618ddfcd04
28 changed files with 956 additions and 420 deletions

View File

@@ -1,73 +1,10 @@
#include "encoder-hid-h10301.h"
#include "protocols/protocol-hid-h10301.h"
#include <furi.h>
void EncoderHID_H10301::init(const uint8_t* data, const uint8_t data_size) {
furi_check(data_size == 3);
card_data[0] = 0;
card_data[1] = 0;
card_data[2] = 0;
uint32_t fc_cn = (data[0] << 16) | (data[1] << 8) | data[2];
// even parity sum calculation (high 12 bits of data)
uint8_t even_parity_sum = 0;
for(int8_t i = 12; i < 24; i++) {
if(((fc_cn >> i) & 1) == 1) {
even_parity_sum++;
}
}
// odd parity sum calculation (low 12 bits of data)
uint8_t odd_parity_sum = 1;
for(int8_t i = 0; i < 12; i++) {
if(((fc_cn >> i) & 1) == 1) {
odd_parity_sum++;
}
}
// 0x1D preamble
write_raw_bit(0, 0);
write_raw_bit(0, 1);
write_raw_bit(0, 2);
write_raw_bit(1, 3);
write_raw_bit(1, 4);
write_raw_bit(1, 5);
write_raw_bit(0, 6);
write_raw_bit(1, 7);
// company / OEM code 1
write_bit(0, 8);
write_bit(0, 10);
write_bit(0, 12);
write_bit(0, 14);
write_bit(0, 16);
write_bit(0, 18);
write_bit(1, 20);
// card format / length 1
write_bit(0, 22);
write_bit(0, 24);
write_bit(0, 26);
write_bit(0, 28);
write_bit(0, 30);
write_bit(0, 32);
write_bit(0, 34);
write_bit(0, 36);
write_bit(0, 38);
write_bit(0, 40);
write_bit(1, 42);
// even parity bit
write_bit((even_parity_sum % 2), 44);
// data
for(uint8_t i = 0; i < 24; i++) {
write_bit((fc_cn >> (23 - i)) & 1, 46 + (i * 2));
}
// odd parity bit
write_bit((odd_parity_sum % 2), 94);
ProtocolHID10301 hid;
hid.encode(data, data_size, reinterpret_cast<uint8_t*>(&card_data), sizeof(card_data) * 3);
card_data_index = 0;
bit_index = 0;