]>
git.zerfleddert.de Git - proxmark3-svn/blob - client/cmdlfpcf7931.c
8265126e3798b2cdf0dd4d2204323061762501d5
1 //-----------------------------------------------------------------------------
2 // Copyright (C) 2012 Chalk <chalk.secu at gmail.com>
3 // 2015 Dake <thomas.cayrou at gmail.com>
5 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
6 // at your option, any later version. See the LICENSE.txt file for the text of
8 //-----------------------------------------------------------------------------
9 // Low frequency PCF7931 commands
10 //-----------------------------------------------------------------------------
14 #include "proxmark3.h"
17 #include "cmdparser.h"
21 #include "cmdlfpcf7931.h"
23 static int CmdHelp ( const char * Cmd
);
25 struct pcf7931_config configPcf
= {{ 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF }, 17500 ,{ 0 , 0 }};
27 int CmdLFPCF7931Read ( const char * Cmd
)
29 UsbCommand c
= { CMD_PCF7931_READ
};
32 WaitForResponse ( CMD_ACK
,& resp
);
36 int CmdLFPCF7931Config ( const char * Cmd
)
39 res
= sscanf ( Cmd
, "%02x %02x %02x %02x %02x %02x %02x %d %d %d" , & configPcf
. password
[ 0 ], & configPcf
. password
[ 1 ], & configPcf
. password
[ 2 ], & configPcf
. password
[ 3 ], & configPcf
. password
[ 4 ], & configPcf
. password
[ 5 ], & configPcf
. password
[ 6 ], & configPcf
. init_delay
, & configPcf
. offset
[ 0 ], & configPcf
. offset
[ 1 ]);
41 if ( res
>= 7 || res
< 1 ){
42 if ( res
== 7 ) configPcf
. init_delay
= 17500 ; //default value
45 configPcf
. offset
[ 0 ] = - 10 ; //default value
46 configPcf
. offset
[ 1 ] = 30 ; //default value
50 PrintAndLog ( "Usage: <password byte 1 (in hex, lsb first)> <password byte 2 (in hex, lsb first)> [...] <password byte 7 (in hex, lsb first)> <tag initialization delay (in us)> <optional : offset on the low pulses width (in us)> <optional : offset on the low pulses position (in us)>" );
51 PrintAndLog ( "The time offsets could be usefull to correct slew rate generated by the antenna." );
54 PrintAndLog ( "Current configuration :" );
55 PrintAndLog ( "Password (LSB first on each byte) : %02x %02x %02x %02x %02x %02x %02x" , configPcf
. password
[ 0 ], configPcf
. password
[ 1 ], configPcf
. password
[ 2 ], configPcf
. password
[ 3 ], configPcf
. password
[ 4 ], configPcf
. password
[ 5 ], configPcf
. password
[ 6 ]);
56 PrintAndLog ( "Tag initialization delay : %d us" , configPcf
. init_delay
);
57 PrintAndLog ( "Offsets : %d us on the low pulses width, %d us on the low pulses positions" , configPcf
. offset
[ 0 ], configPcf
. offset
[ 1 ]);
63 configPcf
. password
[ 0 ] = 0xFF ;
64 configPcf
. password
[ 1 ] = 0xFF ;
65 configPcf
. password
[ 2 ] = 0xFF ;
66 configPcf
. password
[ 3 ] = 0xFF ;
67 configPcf
. password
[ 4 ] = 0xFF ;
68 configPcf
. password
[ 5 ] = 0xFF ;
69 configPcf
. password
[ 6 ] = 0xFF ;
71 configPcf
. init_delay
= 17500 ;
72 configPcf
. offset
[ 0 ] = 0 ;
73 configPcf
. offset
[ 1 ] = 0 ;
75 PrintAndLog ( "Incorrect format" );
76 PrintAndLog ( "Examples of right usage : lf pcf7931 config 11 22 33 44 55 66 77 20000" );
77 PrintAndLog ( " lf pcf7931 config FF FF FF FF FF FF FF 17500 -10 30" );
83 int CmdLFPCF7931Write ( const char * Cmd
)
85 UsbCommand c
= { CMD_PCF7931_WRITE
};
88 res
= sscanf ( Cmd
, "%x %x %x" , & c
. arg
[ 0 ], & c
. arg
[ 1 ], & c
. arg
[ 2 ]);
91 PrintAndLog ( "Please specify the block address in hex" );
95 PrintAndLog ( "Please specify the byte address in hex" );
99 PrintAndLog ( "Please specify the data in hex (1 byte)" );
104 for ( n
= 0 ; n
< 7 ; n
++) c
. d
. asDwords
[ n
] = configPcf
. password
[ n
];
105 c
. d
. asDwords
[ 7 ] = ( configPcf
. offset
[ 0 ]+ 128 );
106 c
. d
. asDwords
[ 8 ] = ( configPcf
. offset
[ 1 ]+ 128 );
107 c
. d
. asDwords
[ 9 ] = configPcf
. init_delay
;
112 PrintAndLog ( "INCORRECT FORMAT" );
117 static command_t CommandTable
[] =
119 { "help" , CmdHelp
, 1 , "This help" },
120 { "read" , CmdLFPCF7931Read
, 1 , "Read content of a PCF7931 transponder" },
121 { "write" , CmdLFPCF7931Write
, 1 , "Write data on a PCF7931 transponder. Usage : lf pcf7931 write <bloc address> <byte address> <data>" },
122 { "config" , CmdLFPCF7931Config
, 1 , "Configure the password, the tags initialization delay and time offsets (optional)" },
123 { NULL
, NULL
, 0 , NULL
}
126 int CmdLFPCF7931 ( const char * Cmd
)
128 CmdsParse ( CommandTable
, Cmd
);
132 int CmdHelp ( const char * Cmd
)
134 CmdsHelp ( CommandTable
);