mirror of
https://github.com/djhackersdev/bemanitools.git
synced 2026-08-04 17:40:15 -05:00
config ui updates to support smartcard readers in eamio
This commit is contained in:
parent
5a318ac58c
commit
e1e47ee7c4
|
|
@ -116,12 +116,17 @@ FONT 8, "Ms Shell Dlg"
|
|||
{
|
||||
LTEXT "Keyboard device", IDC_STATIC, 15, 20, 54, 8, SS_LEFT
|
||||
COMBOBOX IDC_KBD_DEVICE, 15, 30, 135, 12, WS_GROUP | WS_TABSTOP | CBS_DROPDOWNLIST | CBS_HASSTRINGS
|
||||
LTEXT "Card ID file", IDC_STATIC, 15, 50, 36, 8, SS_LEFT
|
||||
EDITTEXT IDC_CARD_PATH, 15, 60, 135, 14, ES_AUTOHSCROLL
|
||||
PUSHBUTTON "&Browse...", IDC_BROWSE, 155, 60, 50, 14
|
||||
AUTOCHECKBOX "Use top keyboard row for PIN pad input", IDC_ALT_10K, 15, 47, 136, 8
|
||||
LTEXT "Card ID file", IDC_CARD_TEXT, 15, 60, 36, 8, SS_LEFT
|
||||
EDITTEXT IDC_CARD_PATH, 15, 70, 135, 14, ES_AUTOHSCROLL
|
||||
PUSHBUTTON "&Browse...", IDC_BROWSE, 155, 70, 50, 14
|
||||
LTEXT "Smartcard reader", IDC_SCARD_TEXT, 15, 60, 80, 8, SS_LEFT
|
||||
LTEXT "", IDC_SCARD_READER_NAME, 15, 72, 135, 14, SS_LEFT
|
||||
GROUPBOX "", IDC_GROUP, 5, 5, 210, 80
|
||||
LTEXT "Keypad status", IDC_STATIC, 155, 20, 46, 8, SS_LEFT
|
||||
LTEXT "", IDC_KEYPAD_STATE, 160, 30, 45, 12, SS_LEFT | SS_CENTERIMAGE
|
||||
LTEXT "Card present", IDC_SCARD_CARD_TEXT, 155, 60, 46, 8, SS_LEFT
|
||||
LTEXT "", IDC_SCARD_IS_PRESENT, 160, 70, 45, 12, SS_LEFT | SS_CENTERIMAGE
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -170,14 +175,15 @@ FONT 8, "Ms Shell Dlg"
|
|||
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
IDD_TAB_NETWORK DIALOG 0, 0, 220, 215
|
||||
IDD_TAB_NETWORK DIALOG 0, 0, 220, 240
|
||||
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
|
||||
CAPTION "Network"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
{
|
||||
LTEXT "", IDC_STATIC, 0, 0, 8, 8, SS_LEFT
|
||||
AUTOCHECKBOX "Generate card ID files on insertion if they do not already exist", IDC_AUTOGEN, 5, 200, 206, 8
|
||||
AUTOCHECKBOX "Use top keyboard row for PIN pad input", IDC_ALT_10K, 5, 185, 141, 8
|
||||
AUTOCHECKBOX "Use smartcard readers instead of card ID files", IDC_SCARD, 5, 5, 200, 8
|
||||
AUTOCHECKBOX "Use NUMLOCK to deconflict overlapping keypads (ON = P2)", IDC_MUX_KEYPAD, 5, 200, 265, 8
|
||||
AUTOCHECKBOX "Use NUMLOCK to share one smartcard reader (ON = P2)", IDC_MUX_SCARD, 5, 212, 265, 8
|
||||
AUTOCHECKBOX "Generate card ID files on insertion if they do not already exist", IDC_AUTOGEN, 5, 224, 265, 8
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -56,9 +56,14 @@ static INT_PTR eam_ui_handle_init(HWND hwnd, const PROPSHEETPAGE *psp);
|
|||
static INT_PTR eam_ui_handle_activate(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_passivate(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_tick(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_change_alt_10k(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_change_scard(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_change_mux_keypad(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_change_mux_scard(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_change_autogen(HWND hwnd);
|
||||
static INT_PTR eam_ui_handle_fini(HWND hwnd);
|
||||
static HWND eam_mux_keypad_dlg;
|
||||
static HWND *eam_unit_dlgs;
|
||||
static uint8_t eam_num_units;
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
eam_unit_ui_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
|
||||
|
|
@ -66,8 +71,10 @@ static INT_PTR
|
|||
eam_unit_ui_handle_init(HWND hwnd, const struct eam_unit_def *def);
|
||||
static void eam_unit_ui_handle_init_devs(HWND hwnd);
|
||||
static void eam_unit_ui_handle_init_path(HWND hwnd);
|
||||
static void eam_unit_ui_handle_init_alt_10k(HWND hwnd);
|
||||
static INT_PTR eam_unit_ui_handle_browse(HWND hwnd);
|
||||
static INT_PTR eam_unit_ui_handle_change_device(HWND hwnd);
|
||||
static INT_PTR eam_unit_ui_handle_change_alt_10k(HWND hwnd);
|
||||
static INT_PTR eam_unit_ui_handle_tick(HWND hwnd);
|
||||
static INT_PTR eam_unit_ui_handle_fini(HWND hwnd);
|
||||
|
||||
|
|
@ -110,12 +117,18 @@ eam_ui_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
|||
switch (HIWORD(wparam)) {
|
||||
case BN_CLICKED:
|
||||
switch (LOWORD(wparam)) {
|
||||
case IDC_SCARD:
|
||||
return eam_ui_handle_change_scard(hwnd);
|
||||
|
||||
case IDC_MUX_KEYPAD:
|
||||
return eam_ui_handle_change_mux_keypad(hwnd);
|
||||
|
||||
case IDC_MUX_SCARD:
|
||||
return eam_ui_handle_change_mux_scard(hwnd);
|
||||
|
||||
case IDC_AUTOGEN:
|
||||
return eam_ui_handle_change_autogen(hwnd);
|
||||
|
||||
case IDC_ALT_10K:
|
||||
return eam_ui_handle_change_alt_10k(hwnd);
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -163,8 +176,16 @@ static INT_PTR eam_ui_handle_init(HWND hwnd, const PROPSHEETPAGE *psp)
|
|||
inst = (HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE);
|
||||
schema = (struct schema *) psp->lParam;
|
||||
|
||||
ypos = 0;
|
||||
eam_unit_dlgs = xmalloc(sizeof(HWND) * schema->nunits);
|
||||
eam_num_units = schema->nunits;
|
||||
|
||||
GetWindowRect(GetDlgItem(hwnd, IDC_SCARD), &r);
|
||||
if (eam_io_config_api->get_scard()) {
|
||||
SendMessage(GetDlgItem(hwnd, IDC_SCARD), BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
|
||||
ypos = r.bottom - r.top + 8; // todo the +8 is hacky bc the bottom is hella big
|
||||
|
||||
for (i = 0; i < schema->nunits; i++) {
|
||||
child = CreateDialogParam(
|
||||
inst,
|
||||
|
|
@ -172,6 +193,7 @@ static INT_PTR eam_ui_handle_init(HWND hwnd, const PROPSHEETPAGE *psp)
|
|||
hwnd,
|
||||
eam_unit_ui_dlg_proc,
|
||||
(LPARAM) &schema->units[i]);
|
||||
eam_unit_dlgs[i] = child;
|
||||
|
||||
GetWindowRect(child, &r);
|
||||
SetWindowPos(
|
||||
|
|
@ -182,14 +204,30 @@ static INT_PTR eam_ui_handle_init(HWND hwnd, const PROPSHEETPAGE *psp)
|
|||
*array_append(HWND, &ui->children) = child;
|
||||
}
|
||||
|
||||
eam_mux_keypad_dlg = GetDlgItem(hwnd, IDC_MUX_KEYPAD);
|
||||
if (eam_io_config_api->get_mux_keypad()) {
|
||||
SendMessage(eam_mux_keypad_dlg, BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
|
||||
if (eam_io_config_api->get_mux_scard()) {
|
||||
SendMessage(GetDlgItem(hwnd, IDC_MUX_SCARD), BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
|
||||
if (eam_io_config_api->get_autogen()) {
|
||||
SendMessage(GetDlgItem(hwnd, IDC_AUTOGEN), BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
|
||||
if (eam_io_config_api->get_alt_10k()) {
|
||||
SendMessage(GetDlgItem(hwnd, IDC_ALT_10K), BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
// invoke scard change handler so we can toggle card file / smartcard stuff
|
||||
eam_ui_handle_change_scard(hwnd);
|
||||
// invoke a keypad-related change handler so the keypad mux option updates
|
||||
eam_unit_ui_handle_change_alt_10k(eam_unit_dlgs[0]);
|
||||
|
||||
// if only one reader is present, disablo mux options
|
||||
if (schema->nunits == 1) {
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_MUX_KEYPAD), false);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_MUX_SCARD), false);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -225,15 +263,68 @@ static INT_PTR eam_ui_handle_tick(HWND hwnd)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR eam_ui_handle_change_alt_10k(HWND hwnd)
|
||||
static INT_PTR eam_ui_handle_change_scard(HWND hwnd)
|
||||
{
|
||||
HWND btn;
|
||||
bool alt_10k;
|
||||
bool scard;
|
||||
size_t i;
|
||||
|
||||
btn = GetDlgItem(hwnd, IDC_ALT_10K);
|
||||
alt_10k = SendMessage(btn, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||
btn = GetDlgItem(hwnd, IDC_SCARD);
|
||||
scard = SendMessage(btn, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||
|
||||
eam_io_config_api->set_alt_10k(alt_10k);
|
||||
eam_io_config_api->set_scard(scard);
|
||||
|
||||
// toggle state of card file vs scard components
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_AUTOGEN), !scard);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_MUX_SCARD), scard);
|
||||
for (i = 0; i < eam_num_units; i++) {
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_CARD_TEXT), !scard);
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_CARD_PATH), !scard);
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_BROWSE), !scard);
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_SCARD_TEXT), scard);
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_SCARD_READER_NAME), scard);
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_SCARD_CARD_TEXT), scard);
|
||||
ShowWindow(GetDlgItem(eam_unit_dlgs[i], IDC_SCARD_IS_PRESENT), scard);
|
||||
|
||||
if (scard) {
|
||||
SetWindowTextA(
|
||||
GetDlgItem(eam_unit_dlgs[i], IDC_SCARD_READER_NAME),
|
||||
eam_io_config_api->get_scard_reader_name(i));
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR eam_ui_handle_change_mux_keypad(HWND hwnd)
|
||||
{
|
||||
HWND btn;
|
||||
bool mux_keypad;
|
||||
|
||||
btn = GetDlgItem(hwnd, IDC_MUX_KEYPAD);
|
||||
mux_keypad = SendMessage(btn, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||
|
||||
eam_io_config_api->set_mux_keypad(mux_keypad);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR eam_ui_handle_change_mux_scard(HWND hwnd)
|
||||
{
|
||||
HWND btn;
|
||||
bool mux_scard;
|
||||
size_t i;
|
||||
|
||||
btn = GetDlgItem(hwnd, IDC_MUX_SCARD);
|
||||
mux_scard = SendMessage(btn, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||
|
||||
eam_io_config_api->set_mux_scard(mux_scard);
|
||||
|
||||
for (i = 0; i < eam_num_units; i++) {
|
||||
SetWindowTextA(
|
||||
GetDlgItem(eam_unit_dlgs[i], IDC_SCARD_READER_NAME),
|
||||
eam_io_config_api->get_scard_reader_name(i));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -294,6 +385,15 @@ eam_unit_ui_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
case IDC_ALT_10K:
|
||||
switch (HIWORD(wparam)) {
|
||||
case BN_CLICKED:
|
||||
return eam_unit_ui_handle_change_alt_10k(hwnd);
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -326,6 +426,7 @@ eam_unit_ui_handle_init(HWND hwnd, const struct eam_unit_def *def)
|
|||
|
||||
eam_unit_ui_handle_init_devs(hwnd);
|
||||
eam_unit_ui_handle_init_path(hwnd);
|
||||
eam_unit_ui_handle_init_alt_10k(hwnd);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -401,6 +502,17 @@ static void eam_unit_ui_handle_init_path(HWND hwnd)
|
|||
}
|
||||
}
|
||||
|
||||
static void eam_unit_ui_handle_init_alt_10k(HWND hwnd)
|
||||
{
|
||||
struct eam_unit_ui *ui;
|
||||
|
||||
ui = (struct eam_unit_ui *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||
|
||||
if (eam_io_config_api->get_alt_10k(ui->def->unit_no)) {
|
||||
SendMessage(GetDlgItem(hwnd, IDC_ALT_10K), BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static INT_PTR eam_unit_ui_handle_browse(HWND hwnd)
|
||||
{
|
||||
struct eam_unit_ui *ui;
|
||||
|
|
@ -451,6 +563,28 @@ static INT_PTR eam_unit_ui_handle_change_device(HWND hwnd)
|
|||
eam_io_config_api->set_keypad_device(ui->def->unit_no, hid);
|
||||
}
|
||||
|
||||
// enable the keypad mux option if the devices/keys conflict
|
||||
EnableWindow(eam_mux_keypad_dlg, eam_io_config_api->do_keypads_conflict());
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR eam_unit_ui_handle_change_alt_10k(HWND hwnd)
|
||||
{
|
||||
struct eam_unit_ui *ui;
|
||||
HWND btn;
|
||||
bool alt_10k;
|
||||
|
||||
ui = (struct eam_unit_ui *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||
|
||||
btn = GetDlgItem(hwnd, IDC_ALT_10K);
|
||||
alt_10k = SendMessage(btn, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||
|
||||
eam_io_config_api->set_alt_10k(ui->def->unit_no, alt_10k);
|
||||
|
||||
// enable the keypad mux option if the devices/keys conflict
|
||||
EnableWindow(eam_mux_keypad_dlg, eam_io_config_api->do_keypads_conflict());
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -459,14 +593,28 @@ static INT_PTR eam_unit_ui_handle_tick(HWND hwnd)
|
|||
struct eam_unit_ui *ui;
|
||||
uint16_t state;
|
||||
wchar_t state_str[9];
|
||||
bool card_present;
|
||||
|
||||
// keypad state
|
||||
ui = (struct eam_unit_ui *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||
state = eam_io_get_keypad_state(ui->def->unit_no);
|
||||
|
||||
wstr_format(state_str, lengthof(state_str), L"%04x", state);
|
||||
|
||||
SetWindowText(GetDlgItem(hwnd, IDC_KEYPAD_STATE), state_str);
|
||||
|
||||
// smartcard state
|
||||
if (eam_io_config_api->get_scard()) {
|
||||
|
||||
eam_io_poll(ui->def->unit_no);
|
||||
|
||||
card_present = eam_io_get_sensor_state(ui->def->unit_no);
|
||||
|
||||
SetWindowText(
|
||||
GetDlgItem(hwnd, IDC_SCARD_IS_PRESENT),
|
||||
(card_present ? L"YES" : L"NO"));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
#define IDC_LIGHT 1001
|
||||
#define IDC_SENSITIVITY 1001
|
||||
#define IDC_ACTION_NAME 1002
|
||||
#define IDC_ALT_10K 1002
|
||||
#define IDC_KEYPAD_STATE 1002
|
||||
#define IDC_GAME_TYPE 1003
|
||||
#define IDC_GROUP 1003
|
||||
|
|
@ -39,6 +38,15 @@
|
|||
#define IDC_BINDING_MAX 1010
|
||||
#define IDC_LIMIT_MAX 1011
|
||||
#define IDC_CURRENT 1013
|
||||
#define IDC_SCARD 1014
|
||||
#define IDC_ALT_10K 1015
|
||||
#define IDC_MUX_KEYPAD 1016
|
||||
#define IDC_MUX_SCARD 1017
|
||||
#define IDC_CARD_TEXT 1018
|
||||
#define IDC_SCARD_TEXT 1019
|
||||
#define IDC_SCARD_READER_NAME 1020
|
||||
#define IDC_SCARD_CARD_TEXT 1021
|
||||
#define IDC_SCARD_IS_PRESENT 1022
|
||||
#define IDC_BINDING_EDIT_MANY 40000
|
||||
#define IDS_APPNAME 40000
|
||||
#define IDS_BAD_GAME_TYPE 40001
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user