Enhanced polling

Previously, a card could be scanned twice in a row and it's state would be kept in memory so the card would be scanned again as soon as a credit ended.

Added debug strings
This commit is contained in:
Farewell_ 2024-02-26 22:20:01 +01:00
parent aeae89ab8e
commit 6bcc546b4b
3 changed files with 34 additions and 4 deletions

View File

@ -26,6 +26,7 @@ scan=0x0D ;Sets the key which will be used to insert a card in game. The def
;aimePath= ;Manually specify an aime.txt file ;aimePath= ;Manually specify an aime.txt file
;felicaPath= ;Manually specify a felica.txt file ;felicaPath= ;Manually specify a felica.txt file
;felicaGen=0 ;Generate a new random card if it's missing from the file ;felicaGen=0 ;Generate a new random card if it's missing from the file
;debug=0 ;Display function calls
``` ```
## Scanning cards ## Scanning cards

View File

@ -18,11 +18,13 @@ static bool READER_RUNNER_INITIALIZED = false;
static HANDLE READER_POLL_THREAD; static HANDLE READER_POLL_THREAD;
static bool READER_POLL_STOP_FLAG; static bool READER_POLL_STOP_FLAG;
static bool polling = false;
static bool HasCard = false; static bool HasCard = false;
uint8_t UID[8] = {0}; uint8_t UID[8] = {0};
struct aime_io_config struct aime_io_config
{ {
bool debug;
wchar_t aime_path[MAX_PATH]; wchar_t aime_path[MAX_PATH];
wchar_t felica_path[MAX_PATH]; wchar_t felica_path[MAX_PATH];
bool felica_gen; bool felica_gen;
@ -41,6 +43,12 @@ static void aime_io_config_read(struct aime_io_config *cfg, const wchar_t *filen
assert(cfg != NULL); assert(cfg != NULL);
assert(filename != NULL); assert(filename != NULL);
cfg->debug = GetPrivateProfileIntW(
L"aimeio",
L"debug",
0,
filename);
GetPrivateProfileStringW( GetPrivateProfileStringW(
L"aimeio", L"aimeio",
L"aimePath", L"aimePath",
@ -68,6 +76,9 @@ static void aime_io_config_read(struct aime_io_config *cfg, const wchar_t *filen
L"scan", L"scan",
VK_RETURN, VK_RETURN,
filename); filename);
if (aime_io_cfg.debug)
printf("DEBUG: aime_io_config_read(filename : %ls). \r\n", filename);
} }
static HRESULT aime_io_read_id_file(const wchar_t *path, uint8_t *bytes, size_t nbytes, int LineToRead) static HRESULT aime_io_read_id_file(const wchar_t *path, uint8_t *bytes, size_t nbytes, int LineToRead)
@ -182,9 +193,11 @@ static HRESULT aime_io_generate_felica(const wchar_t *path, uint8_t *bytes, size
#pragma region READER SPECIFIC #pragma region READER SPECIFIC
static unsigned int __stdcall reader_poll_thread_proc(void *ctx) static unsigned int __stdcall reader_poll_thread_proc(void *ctx)
{ {
if (aime_io_cfg.debug)
printf("DEBUG: reader_poll_thread_proc(). \r\n");
while (!READER_POLL_STOP_FLAG) while (!READER_POLL_STOP_FLAG)
{ {
if (!HasCard) if (!HasCard && polling)
{ {
uint8_t _UID[8] = {0}; uint8_t _UID[8] = {0};
scard_update(_UID); scard_update(_UID);
@ -212,6 +225,7 @@ uint16_t aime_io_get_api_version(void)
HRESULT aime_io_init(void) HRESULT aime_io_init(void)
{ {
// At init we want to open a console... // At init we want to open a console...
int ret = AllocConsole(); int ret = AllocConsole();
FILE *fp; FILE *fp;
@ -222,6 +236,9 @@ HRESULT aime_io_init(void)
// We then read the segatools config file to get settings. // We then read the segatools config file to get settings.
aime_io_config_read(&aime_io_cfg, L".\\segatools.ini"); aime_io_config_read(&aime_io_cfg, L".\\segatools.ini");
if (aime_io_cfg.debug)
printf("DEBUG: aime_io_init(). \r\n");
// Find and initialize reader(s) // Find and initialize reader(s)
if (!READER_RUNNER_INITIALIZED) if (!READER_RUNNER_INITIALIZED)
{ {
@ -252,9 +269,14 @@ HRESULT aime_io_init(void)
HRESULT aime_io_nfc_poll(uint8_t unit_no) HRESULT aime_io_nfc_poll(uint8_t unit_no)
{ {
if (aime_io_cfg.debug)
printf("\n\nDEBUG: aime_io_nfc_poll(unit_no %d). \r\n", unit_no);
if (unit_no != 0) if (unit_no != 0)
return S_OK; return S_OK;
polling = true;
bool sense; bool sense;
HRESULT hr; HRESULT hr;
@ -326,6 +348,9 @@ HRESULT aime_io_nfc_poll(uint8_t unit_no)
HRESULT aime_io_nfc_get_aime_id(uint8_t unit_no, uint8_t *luid, size_t luid_size) HRESULT aime_io_nfc_get_aime_id(uint8_t unit_no, uint8_t *luid, size_t luid_size)
{ {
if (aime_io_cfg.debug)
printf("DEBUG: aime_io_nfc_get_aime_id(unit_no : %d). \r\n", unit_no);
assert(luid != NULL); assert(luid != NULL);
assert(luid_size == sizeof(aime_io_aime_id)); assert(luid_size == sizeof(aime_io_aime_id));
@ -347,6 +372,9 @@ HRESULT aime_io_nfc_get_aime_id(uint8_t unit_no, uint8_t *luid, size_t luid_size
HRESULT aime_io_nfc_get_felica_id(uint8_t unit_no, uint64_t *IDm) HRESULT aime_io_nfc_get_felica_id(uint8_t unit_no, uint64_t *IDm)
{ {
if (aime_io_cfg.debug)
printf("DEBUG: aime_io_nfc_get_felica_id(unit_no : %d). \r\n", unit_no);
uint64_t val; uint64_t val;
size_t i; size_t i;
@ -368,6 +396,7 @@ HRESULT aime_io_nfc_get_felica_id(uint8_t unit_no, uint64_t *IDm)
if (HasCard) if (HasCard)
{ {
polling = false;
HasCard = false; HasCard = false;
uint64_t val; uint64_t val;
@ -385,5 +414,7 @@ HRESULT aime_io_nfc_get_felica_id(uint8_t unit_no, uint64_t *IDm)
void aime_io_led_set_color(uint8_t unit_no, uint8_t r, uint8_t g, uint8_t b) void aime_io_led_set_color(uint8_t unit_no, uint8_t r, uint8_t g, uint8_t b)
{ {
if (aime_io_cfg.debug)
printf("DEBUG: aime_io_led_set_color(unit_no : %d, r : %d, g : %d, b : %d). \r\n", unit_no, r, g, b);
} }
#pragma endregion #pragma endregion

View File

@ -48,12 +48,10 @@ int main()
{ {
if (aime_io_nfc_poll(0) == S_OK) if (aime_io_nfc_poll(0) == S_OK)
{ {
Sleep(500);
if (aime_io_nfc_get_felica_id(0, &IDm) == S_OK) if (aime_io_nfc_get_felica_id(0, &IDm) == S_OK)
{ {
// aime_io_led_set_color(0, 0, 255, 0); // aime_io_led_set_color(0, 0, 255, 0);
printf("Found FeliCa card with uid %llx\r\n\n", IDm); printf("Found FeliCa card with uid %llx\r\n\n", IDm);
continue;
} }
if (aime_io_nfc_get_aime_id(0, luid, 10) == S_OK) if (aime_io_nfc_get_aime_id(0, luid, 10) == S_OK)
{ {
@ -64,8 +62,8 @@ int main()
printf("%02x ", luid[i]); printf("%02x ", luid[i]);
} }
printf("\r\n\n"); printf("\r\n\n");
continue;
} }
Sleep(500);
// printf("poll ok but no card?!\r\n"); // printf("poll ok but no card?!\r\n");
} }
// Sleep(300); // Sleep(300);