2019-01-14 19:06:05 +08:00
|
|
|
//-----------------------------------------------------------------------------
|
2022-01-07 08:58:03 +08:00
|
|
|
// Copyright (C) Proxmark3 contributors. See AUTHORS.md for details.
|
|
|
|
//
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
//
|
|
|
|
// See LICENSE.txt for the text of the license.
|
2019-01-14 19:06:05 +08:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// ISO15693 other commons
|
|
|
|
//-----------------------------------------------------------------------------
|
2010-10-19 22:25:17 +08:00
|
|
|
|
|
|
|
#ifndef ISO15693_H__
|
|
|
|
#define ISO15693_H__
|
|
|
|
|
2019-08-08 22:57:33 +08:00
|
|
|
#include "common.h"
|
2016-08-05 03:52:32 +08:00
|
|
|
|
2010-10-19 22:25:17 +08:00
|
|
|
// REQUEST FLAGS
|
2019-03-10 02:19:50 +08:00
|
|
|
#define ISO15_REQ_SUBCARRIER_SINGLE 0x00 // Tag should respond using one subcarrier (ASK)
|
|
|
|
#define ISO15_REQ_SUBCARRIER_TWO 0x01 // Tag should respond using two subcarriers (FSK)
|
|
|
|
#define ISO15_REQ_DATARATE_LOW 0x00 // Tag should respond using low data rate
|
|
|
|
#define ISO15_REQ_DATARATE_HIGH 0x02 // Tag should respond using high data rate
|
|
|
|
#define ISO15_REQ_NONINVENTORY 0x00
|
|
|
|
#define ISO15_REQ_INVENTORY 0x04 // This is an inventory request - see inventory flags
|
|
|
|
#define ISO15_REQ_PROTOCOL_NONEXT 0x00
|
|
|
|
#define ISO15_REQ_PROTOCOL_EXT 0x08 // RFU
|
2010-10-19 22:25:17 +08:00
|
|
|
|
|
|
|
// REQUEST FLAGS when INVENTORY is not set
|
2019-03-10 02:19:50 +08:00
|
|
|
#define ISO15_REQ_SELECT 0x10 // only selected cards response
|
|
|
|
#define ISO15_REQ_ADDRESS 0x20 // this req contains an address
|
|
|
|
#define ISO15_REQ_OPTION 0x40 // Command specific option selector
|
2010-10-19 22:25:17 +08:00
|
|
|
|
|
|
|
//REQUEST FLAGS when INVENTORY is set
|
2019-03-10 02:19:50 +08:00
|
|
|
#define ISO15_REQINV_AFI 0x10 // AFI Field is present
|
|
|
|
#define ISO15_REQINV_SLOT1 0x20 // 1 Slot
|
|
|
|
#define ISO15_REQINV_SLOT16 0x00 // 16 Slots
|
|
|
|
#define ISO15_REQINV_OPTION 0x40 // Command specific option selector
|
2010-10-19 22:25:17 +08:00
|
|
|
|
|
|
|
//RESPONSE FLAGS
|
2019-03-10 02:19:50 +08:00
|
|
|
#define ISO15_RES_ERROR 0x01
|
2021-10-10 07:35:38 +08:00
|
|
|
#define ISO15_RES_EXT 0x08 // Protocol Extension
|
2010-10-19 22:25:17 +08:00
|
|
|
|
|
|
|
// RESPONSE ERROR CODES
|
2019-03-10 02:19:50 +08:00
|
|
|
#define ISO15_NOERROR 0x00
|
|
|
|
#define ISO15_ERROR_CMD_NOT_SUP 0x01 // Command not supported
|
|
|
|
#define ISO15_ERROR_CMD_NOT_REC 0x02 // Command not recognized (eg. parameter error)
|
|
|
|
#define ISO15_ERROR_CMD_OPTION 0x03 // Command option not supported
|
|
|
|
#define ISO15_ERROR_GENERIC 0x0F // No additional Info about this error
|
|
|
|
#define ISO15_ERROR_BLOCK_UNAVAILABLE 0x10
|
|
|
|
#define ISO15_ERROR_BLOCK_LOCKED_ALREADY 0x11 // cannot lock again
|
|
|
|
#define ISO15_ERROR_BLOCK_LOCKED 0x12 // cannot be changed
|
|
|
|
#define ISO15_ERROR_BLOCK_WRITE 0x13 // Writing was unsuccessful
|
|
|
|
#define ISO15_ERROR_BLOCL_WRITELOCK 0x14 // Locking was unsuccessful
|
2010-10-19 22:25:17 +08:00
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Map a sequence of octets (~layer 2 command) into the set of bits to feed
|
|
|
|
// to the FPGA, to transmit that command to the tag.
|
|
|
|
// Mode: highspeed && one subcarrier (ASK)
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
2019-03-10 07:00:59 +08:00
|
|
|
// The sampling rate is 106.353 ksps/s, for T = 18.8 us
|
2010-10-19 22:25:17 +08:00
|
|
|
|
2019-03-10 07:00:59 +08:00
|
|
|
// SOF defined as
|
|
|
|
// 1) Unmodulated time of 56.64us
|
2019-08-06 19:51:10 +08:00
|
|
|
// 2) 24 pulses of 423.75kHz
|
|
|
|
// 3) logic '1' (unmodulated for 18.88us followed by 8 pulses of 423.75kHz)
|
2010-10-19 22:25:17 +08:00
|
|
|
|
2019-03-10 07:00:59 +08:00
|
|
|
static const int Iso15693FrameSOF[] = {
|
|
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
2020-01-13 00:28:12 +08:00
|
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
|
-1, -1, -1, -1,
|
|
|
|
-1, -1, -1, -1,
|
|
|
|
1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1
|
|
|
|
};
|
2019-03-10 07:00:59 +08:00
|
|
|
static const int Iso15693Logic0[] = {
|
|
|
|
1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1,
|
|
|
|
-1, -1, -1, -1,
|
|
|
|
-1, -1, -1, -1
|
|
|
|
};
|
|
|
|
static const int Iso15693Logic1[] = {
|
|
|
|
-1, -1, -1, -1,
|
2020-01-13 00:28:12 +08:00
|
|
|
-1, -1, -1, -1,
|
|
|
|
1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1
|
|
|
|
};
|
2010-10-19 22:25:17 +08:00
|
|
|
|
2019-03-10 07:00:59 +08:00
|
|
|
// EOF defined as
|
2019-08-06 19:51:10 +08:00
|
|
|
// 1) logic '0' (8 pulses of 423.75kHz followed by unmodulated for 18.88us)
|
|
|
|
// 2) 24 pulses of 423.75kHz
|
2019-03-10 07:00:59 +08:00
|
|
|
// 3) Unmodulated time of 56.64us
|
|
|
|
static const int Iso15693FrameEOF[] = {
|
|
|
|
1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1,
|
|
|
|
-1, -1, -1, -1,
|
|
|
|
-1, -1, -1, -1,
|
|
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
|
|
|
};
|
2010-10-19 22:25:17 +08:00
|
|
|
|
2020-04-04 18:17:55 +08:00
|
|
|
char *iso15693_sprintUID(char *dest, uint8_t *uid);
|
2019-08-08 22:57:33 +08:00
|
|
|
|
2019-03-12 07:12:26 +08:00
|
|
|
#endif
|