/* * uFR.c */ #include #include #include #include #include #include "ini.h" #include "uFR.h" //------------------------------------------------------------------------------ bool CheckDependencies(void) { #if defined(EXIT_ON_WRONG_FW_DEPENDENCY) || defined(EXIT_ON_WRONG_LIB_DEPENDENCY) uint8_t version_major, version_minor, build; bool wrong_version = false; #endif UFR_STATUS status; #ifdef EXIT_ON_WRONG_LIB_DEPENDENCY uint32_t dwDllVersion = 0; dwDllVersion = GetDllVersion(); // "explode" the uFCoder library version: version_major = (uint8_t)dwDllVersion; version_minor = (uint8_t)(dwDllVersion >> 8); // Get the uFCoder library build number. build = (uint8_t)(dwDllVersion >> 16); if (version_major < MIN_DEPEND_LIB_VER_MAJOR) { wrong_version = true; } else if (version_major == MIN_DEPEND_LIB_VER_MAJOR && version_minor < MIN_DEPEND_LIB_VER_MINOR) { wrong_version = true; } else if (version_major == MIN_DEPEND_LIB_VER_MAJOR && version_minor == MIN_DEPEND_LIB_VER_MINOR && build < MIN_DEPEND_LIB_VER_BUILD) { wrong_version = true; } if (wrong_version) { printf("uFCoder 函式庫版本錯誤 (%d.%d.%d)。\n" "請更新 uFCoder 函式庫至至少 %d.%d.%d 版本。\n", version_major, version_minor, build, MIN_DEPEND_LIB_VER_MAJOR, MIN_DEPEND_LIB_VER_MINOR, MIN_DEPEND_LIB_VER_BUILD); return false; } #endif #ifdef EXIT_ON_WRONG_FW_DEPENDENCY wrong_version = false; status = GetReaderFirmwareVersion(&version_major, &version_minor); if (status != UFR_OK) { printf("檢查韌體版本時發生錯誤,狀態碼:0x%08X\n", status); } status = GetBuildNumber(&build); if (status != UFR_OK) { printf("取得韌體版本時發生錯誤,狀態碼:0x%08X\n", status); } if (version_major < MIN_DEPEND_FW_VER_MAJOR) { wrong_version = true; } else if (version_major == MIN_DEPEND_FW_VER_MAJOR && version_minor < MIN_DEPEND_FW_VER_MINOR) { wrong_version = true; } else if (version_major == MIN_DEPEND_FW_VER_MAJOR && version_minor == MIN_DEPEND_FW_VER_MINOR && build < MIN_DEPEND_FW_VER_BUILD) { wrong_version = true; } if (wrong_version) { printf("uFR NFC 讀卡機韌體版本錯誤 (%d.%d.%d)。\n" "請更新 uFR 韌體至至少 %d.%d.%d 版本。\n", version_major, version_minor, build, MIN_DEPEND_FW_VER_MAJOR, MIN_DEPEND_FW_VER_MINOR, MIN_DEPEND_FW_VER_BUILD); return false; } #endif return true; } //------------------------------------------------------------------------------ sz_ptr GetDlTypeName(uint8_t dl_type_code) { switch (dl_type_code) { case DL_MIFARE_ULTRALIGHT: return "DL_MIFARE_ULTRALIGHT"; case DL_MIFARE_ULTRALIGHT_EV1_11: return "DL_MIFARE_ULTRALIGHT_EV1_11"; case DL_MIFARE_ULTRALIGHT_EV1_21: return "DL_MIFARE_ULTRALIGHT_EV1_21"; case DL_MIFARE_ULTRALIGHT_C: return "DL_MIFARE_ULTRALIGHT_C"; case DL_NTAG_203: return "DL_NTAG_203"; case DL_NTAG_210: return "DL_NTAG_210"; case DL_NTAG_212: return "DL_NTAG_212"; case DL_NTAG_213: return "DL_NTAG_213"; case DL_NTAG_215: return "DL_NTAG_215"; case DL_NTAG_216: return "DL_NTAG_216"; case DL_MIKRON_MIK640D: return "DL_MIKRON_MIK640D"; case NFC_T2T_GENERIC: return "NFC_T2T_GENERIC"; case DL_NT3H_1101: return "DL_NT3H_1101"; case DL_NT3H_1201: return "DL_NT3H_1201"; case DL_NT3H_2111: return "DL_NT3H_2111"; case DL_NT3H_2211: return "DL_NT3H_2211"; case DL_MIFARE_MINI: return "DL_MIFARE_MINI"; case DL_NTAG_413_DNA: return "DL_NTAG_413_DNA"; case DL_NTAG_424_DNA: return "DL_NTAG_424_DNA"; case DL_NTAG_424_DNA_TT: return "DL_NTAG_424_DNA_TT"; case DL_MIFARE_CLASSIC_1K: return "DL_MIFARE_CLASSIC_1K"; case DL_MIFARE_CLASSIC_4K: return "DL_MIFARE_CLASSIC_4K"; case DL_MIFARE_PLUS_S_2K_SL0: return "DL_MIFARE_PLUS_S_2K_SL0"; case DL_MIFARE_PLUS_S_4K_SL0: return "DL_MIFARE_PLUS_S_4K_SL0"; case DL_MIFARE_PLUS_X_2K_SL0: return "DL_MIFARE_PLUS_X_2K_SL0"; case DL_MIFARE_PLUS_X_4K_SL0: return "DL_MIFARE_PLUS_X_4K_SL0"; case DL_MIFARE_DESFIRE: return "DL_MIFARE_DESFIRE"; case DL_MIFARE_DESFIRE_EV1_2K: return "DL_MIFARE_DESFIRE_EV1_2K"; case DL_MIFARE_DESFIRE_EV1_4K: return "DL_MIFARE_DESFIRE_EV1_4K"; case DL_MIFARE_DESFIRE_EV1_8K: return "DL_MIFARE_DESFIRE_EV1_8K"; case DL_MIFARE_DESFIRE_EV2_2K: return "DL_MIFARE_DESFIRE_EV2_2K"; case DL_MIFARE_DESFIRE_EV2_4K: return "DL_MIFARE_DESFIRE_EV2_4K"; case DL_MIFARE_DESFIRE_EV2_8K: return "DL_MIFARE_DESFIRE_EV2_8K"; case DL_MIFARE_PLUS_S_2K_SL1: return "DL_MIFARE_PLUS_S_2K_SL1"; case DL_MIFARE_PLUS_X_2K_SL1: return "DL_MIFARE_PLUS_X_2K_SL1"; case DL_MIFARE_PLUS_EV1_2K_SL1: return "DL_MIFARE_PLUS_EV1_2K_SL1"; case DL_MIFARE_PLUS_X_2K_SL2: return "DL_MIFARE_PLUS_X_2K_SL2"; case DL_MIFARE_PLUS_S_2K_SL3: return "DL_MIFARE_PLUS_S_2K_SL3"; case DL_MIFARE_PLUS_X_2K_SL3: return "DL_MIFARE_PLUS_X_2K_SL3"; case DL_MIFARE_PLUS_EV1_2K_SL3: return "DL_MIFARE_PLUS_EV1_2K_SL3"; case DL_MIFARE_PLUS_S_4K_SL1: return "DL_MIFARE_PLUS_S_4K_SL1"; case DL_MIFARE_PLUS_X_4K_SL1: return "DL_MIFARE_PLUS_X_4K_SL1"; case DL_MIFARE_PLUS_EV1_4K_SL1: return "DL_MIFARE_PLUS_EV1_4K_SL1"; case DL_MIFARE_PLUS_X_4K_SL2: return "DL_MIFARE_PLUS_X_4K_SL2"; case DL_MIFARE_PLUS_S_4K_SL3: return "DL_MIFARE_PLUS_S_4K_SL3"; case DL_MIFARE_PLUS_X_4K_SL3: return "DL_MIFARE_PLUS_X_4K_SL3"; case DL_MIFARE_PLUS_EV1_4K_SL3: return "DL_MIFARE_PLUS_EV1_4K_SL3"; case DL_GENERIC_ISO14443_4: return "DL_GENERIC_ISO_14443_4"; case DL_MIFARE_PLUS_SE_SL0: return "DL_MIFARE_PLUS_SE_SL0"; case DL_MIFARE_PLUS_SE_SL1: return "DL_MIFARE_PLUS_SE_SL1"; case DL_MIFARE_PLUS_SE_SL3: return "DL_MIFARE_PLUS_SE_SL3"; case DL_MIFARE_DESFIRE_LIGHT: return "DL_MIFARE_DESFIRE_LIGHT"; case DL_GENERIC_ISO14443_4_TYPE_B: return "DL_GENERIC_ISO14443_4_TYPE_B"; case DL_GENERIC_ISO14443_3_TYPE_B: return "DL_GENERIC_ISO14443_3_TYPE_B"; case DL_MIFARE_PLUS_EV1_2K_SL0: return " DL_MIFARE_PLUS_EV1_2K_SL0"; case DL_MIFARE_PLUS_EV1_4K_SL0: return "DL_MIFARE_PLUS_EV1_4K_SL0"; case DL_IMEI_UID: return "DL_IMEI_UID"; } return "未知卡片"; } //------------------------------------------------------------------------------