46 oddparity(
const uint8_t bt)
49 return (0x9669 >> ((bt ^ (bt >> 4)) & 0xF)) & 1;
53 oddparity_bytes_ts(
const uint8_t *pbtData,
const size_t szLen, uint8_t *pbtPar)
57 for (szByteNr = 0; szByteNr < szLen; szByteNr++) {
58 pbtPar[szByteNr] = oddparity(pbtData[szByteNr]);
63 print_hex(
const uint8_t *pbtData,
const size_t szBytes)
67 for (szPos = 0; szPos < szBytes; szPos++) {
68 printf(
"%02x ", pbtData[szPos]);
74 print_hex_bits(
const uint8_t *pbtData,
const size_t szBits)
78 size_t szBytes = szBits / 8;
80 for (szPos = 0; szPos < szBytes; szPos++) {
81 printf(
"%02x ", pbtData[szPos]);
84 uRemainder = szBits % 8;
86 if (uRemainder != 0) {
88 printf(
"%01x (%d bits)", pbtData[szBytes], uRemainder);
90 printf(
"%02x (%d bits)", pbtData[szBytes], uRemainder);
96 print_hex_par(
const uint8_t *pbtData,
const size_t szBits,
const uint8_t *pbtDataPar)
100 size_t szBytes = szBits / 8;
102 for (szPos = 0; szPos < szBytes; szPos++) {
103 printf(
"%02x", pbtData[szPos]);
104 if (oddparity(pbtData[szPos]) != pbtDataPar[szPos]) {
111 uRemainder = szBits % 8;
113 if (uRemainder != 0) {
115 printf(
"%01x (%d bits)", pbtData[szBytes], uRemainder);
117 printf(
"%02x (%d bits)", pbtData[szBytes], uRemainder);
123 print_nfc_target(
const nfc_target *pnt,
bool verbose)