mirror of
https://github.com/RfidResearchGroup/ChameleonUltra.git
synced 2026-09-11 18:30:14 -07:00
Merge branch 'main' into patch-iso14443-4-blockvals
This commit is contained in:
@@ -3,6 +3,8 @@ All notable changes to this project will be documented in this file.
|
||||
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
|
||||
|
||||
## [unreleased][unreleased]
|
||||
|
||||
## [v2.2.0][2026-07-04]
|
||||
- Added Jablotron LF protocol support: read, emulate and T55xx clone (@midlan)
|
||||
- Added IDTECK LF protocol support: tag emulation (PSK1 RF/32) and T55xx clone. No reader path yet; PSK demodulation on the envelope-only receive chain is left for a follow-up.
|
||||
- Added PAC/Stanley LF protocol support: read, emulate and T55xx clone (@kevihiiin, @danieltwagner)
|
||||
@@ -24,6 +26,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
|
||||
- Fix Windows build (@suut)
|
||||
- Added `hf 14a config` to deal with badly configured cards (@azuwis)
|
||||
- New Symmetrical LED Animation Mode and Improved Minimal Mode (@WillyJL)
|
||||
- Fix MF1 state reset logic and access control conditions (@unkernet)
|
||||
|
||||
## [v2.1.0][2025-09-02]
|
||||
- Added UV, formatter and linter. Contribution guidelines. (@GameTec-live)
|
||||
|
||||
@@ -377,6 +377,11 @@ void nfc_tag_14a_data_process(uint8_t *p_data) {
|
||||
// The trigger conditions are: REQA response in non -Halt mode
|
||||
// Temporary through: Wupa response in non -choice state, no matter what state is in the state, you can use the Wupa instruction to wake up
|
||||
if ((szDataBits == 7) && ((isREQA && m_tag_state_14a != NFC_TAG_STATE_14A_HALTED) || isWUPA)) {
|
||||
// Received 7-bit command (REQA or WUPA) while the tag is active — reset state machine
|
||||
if (m_tag_state_14a != NFC_TAG_STATE_14A_IDLE && m_tag_state_14a != NFC_TAG_STATE_14A_HALTED) {
|
||||
m_tag_state_14a = NFC_TAG_STATE_14A_IDLE;
|
||||
return;
|
||||
}
|
||||
// The receiver of the 14A communication is notified, the internal state machine is reset
|
||||
if (m_tag_handler.cb_reset != NULL) {
|
||||
m_tag_handler.cb_reset();
|
||||
@@ -576,8 +581,16 @@ void nfc_tag_14a_data_process(uint8_t *p_data) {
|
||||
// No processing is successful, it may be some other data. You need to re-post processing
|
||||
if (m_tag_handler.cb_state != NULL) { //Activation status, transfer the message to other registered processor processing
|
||||
m_tag_handler.cb_state(p_data, szDataBits);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NFC_TAG_STATE_14A_PROPRIETARY: {
|
||||
if (m_tag_handler.cb_state != NULL) {
|
||||
m_tag_handler.cb_state(p_data, szDataBits);
|
||||
} else {
|
||||
m_tag_state_14a = NFC_TAG_STATE_14A_IDLE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,11 @@
|
||||
|
||||
// ISO14443-A Universal state machine
|
||||
typedef enum {
|
||||
NFC_TAG_STATE_14A_IDLE, // Leisure, you can wait for any instructions
|
||||
NFC_TAG_STATE_14A_READY, // Select card status, currently the standard 14A anti -rushing collision
|
||||
NFC_TAG_STATE_14A_ACTIVE, // Select cards or other instructions to enter the working status, which can receive all data
|
||||
NFC_TAG_STATE_14A_HALTED, // The label stops working status and can only be awakened by Halt or other special instructions (non -labels)
|
||||
NFC_TAG_STATE_14A_IDLE, // Leisure, you can wait for any instructions
|
||||
NFC_TAG_STATE_14A_READY, // Select card status, currently the standard 14A anti -rushing collision
|
||||
NFC_TAG_STATE_14A_ACTIVE, // Select cards or other instructions to enter the working status, which can receive all data
|
||||
NFC_TAG_STATE_14A_HALTED, // The label stops working status and can only be awakened by Halt or other special instructions (non -labels)
|
||||
NFC_TAG_STATE_14A_PROPRIETARY, // Card is in proprietary state; all commands handled only by state_handler
|
||||
} nfc_tag_14a_state_t;
|
||||
|
||||
// UID of the length in the enumeration specification
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -149,6 +149,7 @@ typedef struct {
|
||||
|
||||
|
||||
nfc_tag_mf1_auth_log_t *mf1_get_auth_log(uint32_t *count);
|
||||
void nfc_tag_mf1_reset_handler();
|
||||
int nfc_tag_mf1_data_loadcb(tag_specific_type_t type, tag_data_buffer_t *buffer);
|
||||
int nfc_tag_mf1_data_savecb(tag_specific_type_t type, tag_data_buffer_t *buffer);
|
||||
bool nfc_tag_mf1_data_factory(uint8_t slot, tag_specific_type_t tag_type);
|
||||
|
||||
@@ -287,6 +287,9 @@ void rgb_marquee_slot_switch(uint8_t led_down, uint8_t color_led_down, uint8_t l
|
||||
light_level --;
|
||||
}
|
||||
}
|
||||
for (uint8_t i = 0; i < RGB_LIST_NUM; i++) {
|
||||
nrf_gpio_pin_clear(led_pins[i]);
|
||||
}
|
||||
if (led_up >= 0 && led_up <= 7) {
|
||||
//Treatment
|
||||
pwm_config.output_pins[0] = led_pins[led_up];
|
||||
|
||||
@@ -31,7 +31,9 @@ from chameleon_utils import (
|
||||
execute_tool,
|
||||
tqdm_if_exists,
|
||||
print_key_table,
|
||||
default_cwd
|
||||
)
|
||||
|
||||
from chameleon_utils import CLITree
|
||||
from chameleon_utils import CR, CG, CB, CC, CY, C0, color_string
|
||||
from chameleon_utils import print_mem_dump
|
||||
@@ -67,8 +69,6 @@ type_id_SAK_dict = {
|
||||
0x38: "SmartMX with MIFARE Classic 4K",
|
||||
}
|
||||
|
||||
default_cwd = Path.cwd() / Path(__file__).with_name("bin")
|
||||
|
||||
|
||||
def load_key_file(import_key, keys):
|
||||
"""
|
||||
|
||||
@@ -24,7 +24,20 @@ CY = colorama.Fore.YELLOW
|
||||
CM = colorama.Fore.MAGENTA
|
||||
C0 = colorama.Style.RESET_ALL
|
||||
|
||||
default_cwd = Path.cwd() / Path(__file__).with_name("bin")
|
||||
|
||||
def get_resource_dir(relative_path: str):
|
||||
"""
|
||||
Get the resource directory of the program.
|
||||
Returns the temporary directory where files are extracted after being packaged with PyInstaller, or the directory where the script is located in the development environment.
|
||||
"""
|
||||
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
|
||||
base_dir = Path(sys._MEIPASS)
|
||||
else:
|
||||
base_dir = Path(__file__).parent
|
||||
return base_dir / relative_path
|
||||
|
||||
|
||||
default_cwd = get_resource_dir("bin")
|
||||
|
||||
|
||||
class ArgsParserError(Exception):
|
||||
|
||||
Reference in New Issue
Block a user