organize
This commit is contained in:
parent
302ce75ce6
commit
1874e11fba
@ -120,7 +120,6 @@ void read_reg_block(AMS_DEVICE * dev)
|
|||||||
|
|
||||||
void ams_read_buffer(uint8_t * data, int len)
|
void ams_read_buffer(uint8_t * data, int len)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
send_recv(0xa0);
|
send_recv(0xa0);
|
||||||
while(len--)
|
while(len--)
|
||||||
{
|
{
|
||||||
@ -133,7 +132,6 @@ void ams_read_buffer(uint8_t * data, int len)
|
|||||||
|
|
||||||
void ams_write_buffer(uint8_t * data, int len)
|
void ams_write_buffer(uint8_t * data, int len)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
send_recv(0x80);
|
send_recv(0x80);
|
||||||
while(len--)
|
while(len--)
|
||||||
{
|
{
|
||||||
@ -147,7 +145,6 @@ void ams_write_buffer(uint8_t * data, int len)
|
|||||||
// data must be 4 bytes
|
// data must be 4 bytes
|
||||||
void ams_read_eeprom_block(uint8_t block, uint8_t * data)
|
void ams_read_eeprom_block(uint8_t block, uint8_t * data)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
send_recv(0x7f);
|
send_recv(0x7f);
|
||||||
send_recv(block << 1);
|
send_recv(block << 1);
|
||||||
|
|
||||||
@ -164,7 +161,6 @@ void ams_read_eeprom_block(uint8_t block, uint8_t * data)
|
|||||||
// data must be 4 bytes
|
// data must be 4 bytes
|
||||||
void ams_write_eeprom_block(uint8_t block, uint8_t * data)
|
void ams_write_eeprom_block(uint8_t block, uint8_t * data)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
send_recv(0x40);
|
send_recv(0x40);
|
||||||
send_recv(block << 1);
|
send_recv(block << 1);
|
||||||
|
|
||||||
@ -368,19 +364,13 @@ void nfc_write_frame(uint8_t * data, uint8_t len)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int answer_rats(RATS_REQUEST * rats)
|
int answer_rats(uint8_t parameter)
|
||||||
{
|
{
|
||||||
if (rats->start != 0xE0)
|
|
||||||
{
|
|
||||||
printf1(TAG_ERR, "Not a RATS request. Ignoring.\r\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t fsdi = (rats->parameter & 0xf0) >> 4;
|
uint8_t fsdi = (parameter & 0xf0) >> 4;
|
||||||
uint8_t cid = (rats->parameter & 0x0f);
|
uint8_t cid = (parameter & 0x0f);
|
||||||
|
|
||||||
// printf1(TAG_NFC, "fsdi: %x\r\n",fsdi);
|
NFC_STATE.cid = cid;
|
||||||
// printf1(TAG_NFC, "cid: %x\r\n",cid);
|
|
||||||
|
|
||||||
if (fsdi == 0)
|
if (fsdi == 0)
|
||||||
NFC_STATE.max_frame_size = 16;
|
NFC_STATE.max_frame_size = 16;
|
||||||
@ -389,11 +379,20 @@ int answer_rats(RATS_REQUEST * rats)
|
|||||||
else
|
else
|
||||||
NFC_STATE.max_frame_size = 32;
|
NFC_STATE.max_frame_size = 32;
|
||||||
|
|
||||||
uint8_t res[2];
|
uint8_t res[3];
|
||||||
res[0] = 2;
|
res[0] = 3;
|
||||||
res[1] = 2; // 2 FSCI == 32 byte frame size
|
res[1] = 2 | (1<<5); // 2 FSCI == 32 byte frame size, TB is enabled
|
||||||
|
|
||||||
nfc_write_frame(res,2);
|
// frame wait time = (256 * 16 / 13.56MHz) * 2^FWI
|
||||||
|
// FWI=0, FMT=0.3ms (min)
|
||||||
|
// FWI=4, FMT=4.8ms (default)
|
||||||
|
// FWI=10, FMT=309ms
|
||||||
|
// FWI=12, FMT=1237ms
|
||||||
|
// FWI=14, FMT=4949ms (max)
|
||||||
|
res[2] = (12<<4) | (0); // TB (FWI << 4) | (SGTI)
|
||||||
|
|
||||||
|
|
||||||
|
nfc_write_frame(res,3);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,9 +452,51 @@ void nfc_loop()
|
|||||||
{
|
{
|
||||||
// printf1(TAG_NFC,"RATS %d\r\n",c++);
|
// printf1(TAG_NFC,"RATS %d\r\n",c++);
|
||||||
// ams_write_command(AMS_CMD_TRANSMIT_ACK);
|
// ams_write_command(AMS_CMD_TRANSMIT_ACK);
|
||||||
t1 = millis();
|
switch(buf[0])
|
||||||
answer_rats((RATS_REQUEST*)buf);
|
{
|
||||||
printf1(TAG_NFC,"RATS answered %d (took %d)\r\n",millis(), millis() - t1);
|
case NFC_CMD_REQA:
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_REQA\r\n");
|
||||||
|
break;
|
||||||
|
case NFC_CMD_WUPA:
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_WUPA\r\n");
|
||||||
|
break;
|
||||||
|
case NFC_CMD_HLTA:
|
||||||
|
printf1(TAG_NFC, "HLTA/Halt\r\n");
|
||||||
|
break;
|
||||||
|
case NFC_CMD_RATS:
|
||||||
|
t1 = millis();
|
||||||
|
answer_rats(buf[1]);
|
||||||
|
printf1(TAG_NFC,"RATS answered %d (took %d)\r\n",millis(), millis() - t1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
|
||||||
|
if (IS_PPSS_CMD(buf[0]))
|
||||||
|
{
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_PPSS\r\n");
|
||||||
|
}
|
||||||
|
else if (IS_IBLOCK(buf[0]))
|
||||||
|
{
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_IBLOCK\r\n");
|
||||||
|
}
|
||||||
|
else if (IS_RBLOCK(buf[0]))
|
||||||
|
{
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_IBLOCK\r\n");
|
||||||
|
}
|
||||||
|
else if (IS_SBLOCK(buf[0]))
|
||||||
|
{
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_IBLOCK\r\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf1(TAG_NFC, "unknown NFC request\r\n len[%d]:", len);
|
||||||
|
dump_hex1(TAG_NFC, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,4 +110,18 @@ typedef struct
|
|||||||
#define AMS_CMD_SENSE 0x11
|
#define AMS_CMD_SENSE 0x11
|
||||||
#define AMS_CMD_SENSE_SLEEP 0x12
|
#define AMS_CMD_SENSE_SLEEP 0x12
|
||||||
|
|
||||||
|
#define NFC_CMD_REQA 0x26
|
||||||
|
#define NFC_CMD_WUPA 0x52
|
||||||
|
#define NFC_CMD_HLTA 0x50
|
||||||
|
#define NFC_CMD_RATS 0xe0
|
||||||
|
|
||||||
|
#define NFC_CMD_PPSS 0xd0
|
||||||
|
#define IS_PPSS_CMD(x) (((x) & 0xf0) == NFC_CMD_PPSS)
|
||||||
|
#define NFC_CMD_IBLOCK 0x00
|
||||||
|
#define IS_IBLOCK(x) (((x) & 0xe0) == NFC_CMD_IBLOCK)
|
||||||
|
#define NFC_CMD_RBLOCK 0xa0
|
||||||
|
#define IS_RBLOCK(x) (((x) & 0xe0) == NFC_CMD_RBLOCK)
|
||||||
|
#define NFC_CMD_SBLOCK 0xc0
|
||||||
|
#define IS_SBLOCK(x) (((x) & 0xc0) == NFC_CMD_SBLOCK)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user