mirror of
https://github.com/RfidResearchGroup/ChameleonMini.git
synced 2026-05-12 11:20:37 -07:00
@@ -138,11 +138,12 @@ bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t S
|
||||
}
|
||||
}
|
||||
|
||||
bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue)
|
||||
bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue, bool FromHalt)
|
||||
{
|
||||
uint8_t* DataPtr = (uint8_t*) Buffer;
|
||||
|
||||
if ( (DataPtr[0] == ISO14443A_CMD_REQA) || (DataPtr[0] == ISO14443A_CMD_WUPA) ){
|
||||
if ( ((! FromHalt) && (DataPtr[0] == ISO14443A_CMD_REQA)) ||
|
||||
(DataPtr[0] == ISO14443A_CMD_WUPA) ){
|
||||
DataPtr[0] = (ATQAValue >> 0) & 0x00FF;
|
||||
DataPtr[1] = (ATQAValue >> 8) & 0x00FF;
|
||||
|
||||
@@ -153,4 +154,5 @@ bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -48,7 +48,7 @@ void ISO14443AAppendCRCA(void* Buffer, uint16_t ByteCount);
|
||||
bool ISO14443ACheckCRCA(void* Buffer, uint16_t ByteCount);
|
||||
|
||||
INLINE bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t SAKValue);
|
||||
INLINE bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue);
|
||||
INLINE bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue, bool FromHalt);
|
||||
|
||||
INLINE
|
||||
bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t SAKValue)
|
||||
@@ -98,11 +98,12 @@ bool ISO14443ASelect(void* Buffer, uint16_t* BitCount, uint8_t* UidCL, uint8_t S
|
||||
}
|
||||
|
||||
INLINE
|
||||
bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue)
|
||||
bool ISO14443AWakeUp(void* Buffer, uint16_t* BitCount, uint16_t ATQAValue, bool FromHalt)
|
||||
{
|
||||
uint8_t* DataPtr = (uint8_t*) Buffer;
|
||||
|
||||
if ( (DataPtr[0] == ISO14443A_CMD_REQA) || (DataPtr[0] == ISO14443A_CMD_WUPA) ){
|
||||
if ( ((! FromHalt) && (DataPtr[0] == ISO14443A_CMD_REQA)) ||
|
||||
(DataPtr[0] == ISO14443A_CMD_WUPA) ){
|
||||
DataPtr[0] = (ATQAValue >> 0) & 0x00FF;
|
||||
DataPtr[1] = (ATQAValue >> 8) & 0x00FF;
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ uint16_t MifareClassicAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
switch(State) {
|
||||
case STATE_IDLE:
|
||||
case STATE_HALT:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, CardATQAValue)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, CardATQAValue, State == STATE_HALT)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
}
|
||||
@@ -252,7 +252,7 @@ uint16_t MifareClassicAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
#endif
|
||||
|
||||
case STATE_READY1:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, CardATQAValue)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, CardATQAValue, false)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
} else if (Buffer[0] == ISO14443A_CMD_SELECT_CL1) {
|
||||
@@ -278,7 +278,7 @@ uint16_t MifareClassicAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
break;
|
||||
|
||||
case STATE_READY2:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, CardATQAValue)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, CardATQAValue, false)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
} else if (Buffer[0] == ISO14443A_CMD_SELECT_CL2) {
|
||||
@@ -297,7 +297,7 @@ uint16_t MifareClassicAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
}
|
||||
break;
|
||||
case STATE_ACTIVE:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, MFCLASSIC_1K_ATQA_VALUE)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, MFCLASSIC_1K_ATQA_VALUE, false)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
} else if (Buffer[0] == CMD_HALT) {
|
||||
|
||||
@@ -86,7 +86,7 @@ uint16_t MifareUltralightAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
switch(State) {
|
||||
case STATE_IDLE:
|
||||
case STATE_HALT:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE, State == STATE_HALT)) {
|
||||
/* We received a REQA or WUPA command, so wake up. */
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
@@ -94,7 +94,7 @@ uint16_t MifareUltralightAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
break;
|
||||
|
||||
case STATE_READY1:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE, false)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
} else if (Cmd == ISO14443A_CMD_SELECT_CL1) {
|
||||
@@ -118,7 +118,7 @@ uint16_t MifareUltralightAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
break;
|
||||
|
||||
case STATE_READY2:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE, false)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
} else if (Cmd == ISO14443A_CMD_SELECT_CL2) {
|
||||
@@ -141,7 +141,7 @@ uint16_t MifareUltralightAppProcess(uint8_t* Buffer, uint16_t BitCount)
|
||||
break;
|
||||
|
||||
case STATE_ACTIVE:
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE)) {
|
||||
if (ISO14443AWakeUp(Buffer, &BitCount, ATQA_VALUE, false)) {
|
||||
State = STATE_READY1;
|
||||
return BitCount;
|
||||
} else if (Cmd == CMD_READ) {
|
||||
|
||||
Reference in New Issue
Block a user