*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdlib.h>
unsigned char cmd,
struct iso14443a_atqa *atqa)
{
- struct rfid_reader *rdr = handle->rh->reader;
+ const struct rfid_reader *rdr = handle->rh->reader;
return rdr->iso14443a.transceive_sf(handle->rh, cmd, atqa);
}
struct iso14443a_anticol_cmd *acf,
unsigned int *bit_of_col)
{
- struct rfid_reader *rdr = handle->rh->reader;
+ const struct rfid_reader *rdr = handle->rh->reader;
return rdr->iso14443a.transceive_acf(handle->rh, acf, bit_of_col);
}
return 0;
}
-int random_bit(void)
+static int random_bit(void)
{
- unsigned long e;
+ unsigned long e;
- e = randctx[0];
- randctx[0]=randctx[1];
- randctx[1]=(randctx[2]<<19) + (randctx[2]>>13) + randctx[3];
- randctx[2]=randctx[3] ^ randctx[0];
- randctx[3]=e+randctx[1];
+ e = randctx[0];
+ randctx[0] = randctx[1];
+ randctx[1] = (randctx[2]<<19) + (randctx[2]>>13) + randctx[3];
+ randctx[2] = randctx[3] ^ randctx[0];
+ randctx[3] = e+randctx[1];
- return randctx[1]&1;
+ return randctx[1]&1;
}
/* first bit is '1', second bit '2' */
static void
rnd_toggle_bit_in_field(unsigned char *bitfield, unsigned int size, unsigned int bit)
{
- unsigned int byte,rnd;
+ unsigned int byte,rnd;
- if(bit && (bit <= (size*8)) )
- {
- rnd=random_bit();
+ if (bit && (bit <= (size*8))) {
+ rnd = random_bit();
- DEBUGP("xor'ing bit %u with %u\n",bit,rnd);
- bit--;
- byte=bit/8;
- bit=rnd<<(bit%8);
- bitfield[byte] ^= bit;
- }
+ DEBUGP("xor'ing bit %u with %u\n",bit,rnd);
+ bit--;
+ byte = bit/8;
+ bit = rnd << (bit % 8);
+ bitfield[byte] ^= bit;
+ }
}
}
}
- h->level = ISO14443A_LEVEL_NONE;
- h->state = ISO14443A_STATE_SELECTED;
-
{
- if (uid_size == 1)
+ if (h->level == ISO14443A_LEVEL_CL1)
handle->uid_len = 4;
- else if (uid_size == 2)
+ else if (h->level == ISO14443A_LEVEL_CL2)
handle->uid_len = 7;
else
handle->uid_len = 10;
DEBUGP("UID %s\n", rfid_hexdump(handle->uid, handle->uid_len));
}
+ h->level = ISO14443A_LEVEL_NONE;
+ h->state = ISO14443A_STATE_SELECTED;
+ h->sak = sak[0];
+
if (sak[0] & 0x20) {
DEBUGP("we have a T=CL compliant PICC\n");
handle->proto_supported = 1 << RFID_PROTOCOL_TCL;
const void *optval, unsigned int optlen)
{
int ret = -EINVAL;
- struct rfid_reader *rdr = handle->rh->reader;
+ const struct rfid_reader *rdr = handle->rh->reader;
unsigned int speed;
switch (optname) {
int ret = -EINVAL;
struct iso14443a_handle *h = &handle->priv.iso14443a;
struct iso14443a_atqa *atqa = optval;
+ u_int8_t *opt_u8 = optval;
int *wupa = optval;
switch (optname) {
+ case RFID_OPT_14443A_SAK:
+ *opt_u8 = h->sak;
+ *optlen = sizeof(*opt_u8);
+ break;
case RFID_OPT_14443A_ATQA:
*atqa = h->atqa;
+ *optlen = sizeof(*atqa)
ret = 0;
break;
case RFID_OPT_14443A_WUPA:
*wupa = ((handle->flags & RFID_OPT_LAYER2_WUP) != 0);
+ *optlen = sizeof(*wupa);
ret = 0;
break;
};
h->priv.iso14443a.state = ISO14443A_STATE_NONE;
h->priv.iso14443a.level = ISO14443A_LEVEL_NONE;
- ret = h->rh->reader->iso14443a.init(h->rh);
+ ret = h->rh->reader->init(h->rh, RFID_LAYER2_ISO14443A);
if (ret < 0) {
free_layer2_handle(h);
return NULL;