+ size_len = sizeof(size);
+ size = 0;
+ if (rfid_protocol_getopt(ph, RFID_OPT_P_TCL_ATS_LEN,
+ &size, &size_len) == 0) {
+ data_len = size + 1;
+ data = malloc(data_len);
+ if (data) {
+ if (rfid_protocol_getopt(ph, RFID_OPT_P_TCL_ATS,
+ data, &data_len) == 0) {
+ printf("Got ATS of %u bytes: %s\n", size,
+ hexdump(data, data_len));
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+static void do_endless_scan()
+{
+ int rc;
+ int first = 1;
+
+ while (1) {
+ if (first)
+ putc('\n', stdout);
+ printf("==> doing %s scan\n", first ? "first" : "successive");
+ rc = do_scan(first);
+ if (rc >= 3) {
+ printf("closing proto\n");
+ rfid_protocol_close(ph);
+ }
+ if (rc >= 2) {
+ printf("closing layer2\n");
+ rfid_layer2_close(l2h);
+ first = 0;
+ } else
+ first = 1;
+ }
+}
+
+static void do_regdump(void)
+{
+ u_int8_t buffer[0xff];
+ int i;
+
+ printf("dumping rc632 regs...\n");
+
+ rc632_register_dump(rh->ah, buffer);
+
+ printf("\n ");
+ for (i=0; i<=0x0f; i++)
+ printf(" 0x_%01X",i);
+ printf("\n-----------------------------------------------------------------------------------\n");
+
+ for (i=0; i <= 0x3f; i++) {
+ if ((i % 0x10) == 0)
+ printf("0x%01X_:",i/0x10);
+ printf(" 0x%02X", buffer[i]);
+ if ((i% 0x10) == 0x0f)
+ printf("\n");
+ }
+
+ /* print regdump as c-style array*/
+ printf("u_int8_t rc632_regs[] = {");
+ for (i = 0; i <= 0x3f; i++) {
+ if (((i+1) % 0x08) == 1) {
+ if (i > 7)
+ printf("//%2d..%2d",i-8,i-1);
+ printf("\n\t");
+ }
+ printf(" 0x%02X, ",buffer[i]);
+ }
+ printf("//%2d..%2d\n\t 0 };\n",i-8,i-1);
+
+}
+
+static void do_enum(int layer2)
+{
+ int rc;
+ //unsigned int size;
+ //unsigned int size_len = sizeof(size);
+ unsigned char uid_buf[16];
+ unsigned int uid_len;
+
+ printf("scanning for RFID token on layer %s...\n", l2_names[layer2]);
+
+ if (rh->reader->l2_supported & (1 << layer2)) {
+ l2h = rfid_layer2_init(rh, layer2);
+ rc = rfid_layer2_open(l2h);
+ } else {
+ printf("error during layer2_open\n");
+ return ;
+ }
+
+ while (rc>=0) {
+ if (l2h) {
+ uid_len = sizeof(uid_buf);
+ rfid_layer2_getopt(l2h, RFID_OPT_LAYER2_UID, &uid_buf, &uid_len);
+ printf("Layer 2 success (%s)[%d]: %s\n", rfid_layer2_name(l2h), uid_len, hexdump(uid_buf, uid_len));
+ }
+
+ /*
+ ph = rfid_protocol_scan(l2h);
+ if (ph) {
+ printf("Protocol success (%s)\n", rfid_protocol_name(ph));
+
+ if (rfid_protocol_getopt(ph, RFID_OPT_PROTO_SIZE,
+ &size, &size_len) == 0)
+ printf("Size: %u bytes\n", size);
+ } else
+ printf("##############\n");
+ */
+
+ if (rc >= 0) {
+ rfid_layer2_close(l2h);
+ }
+ rc = rfid_layer2_open(l2h);