45 oddparity(
const uint8_t bt)
48 return (0x9669 >> ((bt ^(bt >> 4)) & 0xF)) & 1;
52 oddparity_bytes_ts(
const uint8_t *pbtData,
const size_t szLen, uint8_t *pbtPar)
56 for (szByteNr = 0; szByteNr < szLen; szByteNr++) {
57 pbtPar[szByteNr] = oddparity(pbtData[szByteNr]);
62 print_hex(
const uint8_t *pbtData,
const size_t szBytes)
66 for (szPos = 0; szPos < szBytes; szPos++) {
67 printf(
"%02x ", pbtData[szPos]);
73 print_hex_bits(
const uint8_t *pbtData,
const size_t szBits)
77 size_t szBytes = szBits / 8;
79 for (szPos = 0; szPos < szBytes; szPos++) {
80 printf(
"%02x ", pbtData[szPos]);
83 uRemainder = szBits % 8;
85 if (uRemainder != 0) {
87 printf(
"%01x (%d bits)", pbtData[szBytes], uRemainder);
89 printf(
"%02x (%d bits)", pbtData[szBytes], uRemainder);
95 print_hex_par(
const uint8_t *pbtData,
const size_t szBits,
const uint8_t *pbtDataPar)
99 size_t szBytes = szBits / 8;
101 for (szPos = 0; szPos < szBytes; szPos++) {
102 printf(
"%02x", pbtData[szPos]);
103 if (oddparity(pbtData[szPos]) != pbtDataPar[szPos]) {
110 uRemainder = szBits % 8;
112 if (uRemainder != 0) {
114 printf(
"%01x (%d bits)", pbtData[szBytes], uRemainder);
116 printf(
"%02x (%d bits)", pbtData[szBytes], uRemainder);
122 print_nfc_target(
const nfc_target *pnt,
bool verbose)