+/**
+ * @brief iso14443B_CRC_Ok Checks CRC in command or response
+ * @param isResponse
+ * @param data
+ * @param len
+ * @return 0 : CRC-command, CRC not ok
+ * 1 : CRC-command, CRC ok
+ * 2 : Not crc-command
+ */
+
+uint8_t iso14443B_CRC_check(bool isResponse, uint8_t* data, uint8_t len)
+{
+ uint8_t b1,b2;
+
+ if(len <= 2) return 2;
+
+ ComputeCrc14443(CRC_14443_B, data, len-2, &b1, &b2);
+ if(b1 != data[len-2] || b2 != data[len-1]) {
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * @brief iclass_CRC_Ok Checks CRC in command or response
+ * @param isResponse
+ * @param data
+ * @param len
+ * @return 0 : CRC-command, CRC not ok
+ * 1 : CRC-command, CRC ok
+ * 2 : Not crc-command
+ */
+uint8_t iclass_CRC_check(bool isResponse, uint8_t* data, uint8_t len)
+{
+ if(len < 4) return 2;//CRC commands (and responses) are all at least 4 bytes
+
+ uint8_t b1, b2;
+
+ if(!isResponse)//Commands to tag
+ {
+ /**
+ These commands should have CRC. Total length leftmost
+ 4 READ
+ 4 READ4
+ 12 UPDATE - unsecured, ends with CRC16
+ 14 UPDATE - secured, ends with signature instead
+ 4 PAGESEL
+ **/
+ if(len == 4 || len == 12)//Covers three of them
+ {
+ //Don't include the command byte
+ ComputeCrc14443(CRC_ICLASS, (data+1), len-3, &b1, &b2);
+ return b1 == data[len -2] && b2 == data[len-1];
+ }
+ return 2;
+ }else{
+ /**
+ These tag responses should have CRC. Total length leftmost
+
+ 10 READ data[8] crc[2]
+ 34 READ4 data[32]crc[2]
+ 10 UPDATE data[8] crc[2]
+ 10 SELECT csn[8] crc[2]
+ 10 IDENTIFY asnb[8] crc[2]
+ 10 PAGESEL block1[8] crc[2]
+ 10 DETECT csn[8] crc[2]
+
+ These should not
+
+ 4 CHECK chip_response[4]
+ 8 READCHECK data[8]
+ 1 ACTALL sof[1]
+ 1 ACT sof[1]
+
+ In conclusion, without looking at the command; any response
+ of length 10 or 34 should have CRC
+ **/
+ if(len != 10 && len != 34) return true;
+
+ ComputeCrc14443(CRC_ICLASS, data, len-2, &b1, &b2);
+ return b1 == data[len -2] && b2 == data[len-1];
+ }
+}
+
+uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles)