Add a fast-format feature in the mifare-classic-format utility to only erase MAD.
This commit is contained in:
parent
163df002f2
commit
6cbb9f4f9d
1 changed files with 46 additions and 1 deletions
|
@ -21,6 +21,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <nfc/nfc.h>
|
#include <nfc/nfc.h>
|
||||||
|
|
||||||
|
@ -46,6 +47,12 @@ int try_format_sector (MifareTag tag, MifareClassicSectorNumber sector);
|
||||||
static int at_block = 0;
|
static int at_block = 0;
|
||||||
static int mod_block = 10;
|
static int mod_block = 10;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
bool fast;
|
||||||
|
} format_options = {
|
||||||
|
.fast = false
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
display_progress ()
|
display_progress ()
|
||||||
{
|
{
|
||||||
|
@ -114,14 +121,38 @@ try_format_sector (MifareTag tag, MifareClassicSectorNumber sector)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
usage(char *progname)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "usage: %s [-f]\n", progname);
|
||||||
|
fprintf (stderr, "\nOptions:\n");
|
||||||
|
fprintf (stderr, " -f Fast format (only erase MAD)\n");
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
int ch;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
nfc_device_t *device = NULL;
|
nfc_device_t *device = NULL;
|
||||||
MifareTag *tags = NULL;
|
MifareTag *tags = NULL;
|
||||||
|
|
||||||
(void)argc, (void)argv;
|
(void)argc, (void)argv;
|
||||||
|
while ((ch = getopt (argc, argv, "fh")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'f':
|
||||||
|
format_options.fast = true;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
usage(argv[0]);
|
||||||
|
exit (EXIT_SUCCESS);
|
||||||
|
default:
|
||||||
|
usage(argv[0]);
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
device = nfc_connect (NULL);
|
device = nfc_connect (NULL);
|
||||||
if (!device)
|
if (!device)
|
||||||
|
@ -150,8 +181,22 @@ main(int argc, char *argv[])
|
||||||
bool format = ((buffer[0] == 'y') || (buffer[0] == 'Y'));
|
bool format = ((buffer[0] == 'y') || (buffer[0] == 'Y'));
|
||||||
|
|
||||||
if (format) {
|
if (format) {
|
||||||
|
enum mifare_tag_type tt = freefare_get_tag_type (tags[i]);
|
||||||
at_block = 0;
|
at_block = 0;
|
||||||
switch (freefare_get_tag_type (tags[i])) {
|
|
||||||
|
if (format_options.fast) {
|
||||||
|
printf (START_FORMAT_N, (tt == CLASSIC_1K) ? 1 : 2);
|
||||||
|
if (!try_format_sector (tags[i], 0x00))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (tt == CLASSIC_4K)
|
||||||
|
if (!try_format_sector (tags[i], 0x10))
|
||||||
|
break;
|
||||||
|
|
||||||
|
printf (DONE_FORMAT);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (tt) {
|
||||||
case CLASSIC_1K:
|
case CLASSIC_1K:
|
||||||
mod_block = 4;
|
mod_block = 4;
|
||||||
if (!format_mifare_classic_1k (tags[i]))
|
if (!format_mifare_classic_1k (tags[i]))
|
||||||
|
|
Loading…
Add table
Reference in a new issue