}
}
-static uint16_t getFDXchksum (uint64_t raw){
- uint8_t arr[8];
- num_to_bytes(raw, 64, arr);
- return crc16_ccitt_kermit(arr, 8);
-}
-
int getFDXBits(uint64_t national_id, uint16_t country, uint8_t isanimal, uint8_t isextended, uint32_t extended, uint8_t *bits) {
-
- uint64_t raw = 0;
- uint8_t data[117] = {0};
-
- raw |= isanimal;
- raw |= (0x000 & 0x3ff) << 1;
- raw |= isextended << 14;
- raw |= (country & 0x3ff) << 15;
- raw |= (national_id & 0x3FFFFFFFFF) << 25;
-
- uint16_t crc = getFDXchksum(raw);
-
- // add raw to bitarray
- num_to_bytebits(raw, 64, data);
-
- // add crc to bitarray
- num_to_bytebits(crc, 16, data+64);
- // add extended data to bitarray
- num_to_bytebits(extended, 24, data+64+16);
-
- //reverse array
- printf("ICE:\n %s\n", sprint_bin(data, 104) );
- for (uint8_t i = 0; i <104/2; ++i) {
- uint8_t tmp = data[i];
- data[i] = data[104-i];
- data[104-i] = tmp;
- }
- printf("ICE:\n %s\n", sprint_bin(data, 104) );
-
- // add parity always EVEN (2), every 8bits
- // into output array
- uint8_t bitlen = addParity(data, bits+11, 104, 9, 2);
- if (bitlen != 117 )
- printf("ICE ERROR PARITY BITLEN 119 != %d\n", bitlen);
-
// add preamble ten 0x00 and one 0x01
memset(bits, 0x00, 10);
bits[10] = 1;
- printf("%s\n", sprint_bin_break(bits, 128, 32) );
- /*
+
// 128bits
// every 9th bit is 0x01, but we can just fill the rest with 0x01 and overwrite
memset(bits, 0x01, 128);
num_to_bytebitsLSBF( extended >> 0 , 8, bits+101);
num_to_bytebitsLSBF( extended >> 8 , 8, bits+110);
num_to_bytebitsLSBF( extended >> 16, 8, bits+119);
-
- */
return 1;
}
{"help", CmdHelp, 1, "This help"},
{"demod", CmdFdxDemod,1, "Attempt extract tag data from graphbuf"},
{"read", CmdFdxRead, 0, "Attempt to read and extract tag data"},
- {"clone", CmdFdxClone,0, "clone animal ID tag"},
- {"sim", CmdFdxSim, 0, "simulate animal ID tag"},
+ {"clone", CmdFdxClone,0, "Clone animal ID tag to T55x7"},
+ {"sim", CmdFdxSim, 0, "Animal ID tag simulator"},
{NULL, NULL, 0, NULL}
};