- //PrintAndLog("ID: %s", buf);
-
- if (param_gethex(buf, 0, uid, 10)) {
- PrintAndLog("UID must include 10 HEX symbols");
- return 0;
- }
-
- PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
-
-
- /* clear our graph */
- ClearGraph(0);
-
- /* write 9 start bits */
- for (i = 0; i < 9; i++)
- AppendGraph(0, clock, 1);
-
- /* for each hex char */
- parity[0] = parity[1] = parity[2] = parity[3] = 0;
- for (i = 0; i < 10; i++)
- {
- /* read each hex char */
- sscanf(&buf[i], "%1x", &n);
- for (j = 3; j >= 0; j--, n/= 2)
- binary[j] = n % 2;
-
- /* append each bit */
- AppendGraph(0, clock, binary[0]);
- AppendGraph(0, clock, binary[1]);
- AppendGraph(0, clock, binary[2]);
- AppendGraph(0, clock, binary[3]);
-
- /* append parity bit */
- AppendGraph(0, clock, binary[0] ^ binary[1] ^ binary[2] ^ binary[3]);
-
- /* keep track of column parity */
- parity[0] ^= binary[0];
- parity[1] ^= binary[1];
- parity[2] ^= binary[2];
- parity[3] ^= binary[3];
- }
-
- /* parity columns */
- AppendGraph(0, clock, parity[0]);
- AppendGraph(0, clock, parity[1]);
- AppendGraph(0, clock, parity[2]);
- AppendGraph(0, clock, parity[3]);
-
- /* stop bit */
- AppendGraph(1, clock, 0);
+
+ if ( stUidBlock - uidcnt < 2) {
+ p = realloc(uidBlock, 5*(stUidBlock+=10));
+ if (!p) {
+ PrintAndLog("Cannot allocate memory for UIDs");
+ free(uidBlock);
+ fclose(f);
+ return 1;
+ }
+ uidBlock = p;
+ }
+ memset(uidBlock + 5 * uidcnt, 0, 5);
+ num_to_bytes(strtoll(buf, NULL, 16), 5, uidBlock + 5*uidcnt);
+ uidcnt++;
+ memset(buf, 0, sizeof(buf));
+ }
+ fclose(f);