static int temp_uid_index[MAX_INPUT_DEVICES][IDTYPE_MAX];
static int temp_uid_cnt[IDTYPE_MAX];
-struct jport_config {
- struct inputdevconfig idc;
- TCHAR id[MAX_JPORTNAME];
- int mode;
-};
-static struct jport_config jport_config_store[MAX_JPORTS];
-
static int isdevice (struct uae_input_device *id)
{
int i, j;
for (int portnum = 0; portnum < MAX_JPORTS; portnum++) {
for (int i = 0; i < MAX_STORED_JPORTS; i++) {
struct stored_jport *jp = &stored_jports[portnum][i];
- if (jp->inuse && jp->jp.id == -2) {
+ if (jp->inuse && jp->jp.id == JPORT_UNPLUGGED) {
if (!_tcscmp(idc->name, jp->jp.idc.name) && !_tcscmp(idc->configname, jp->jp.idc.configname)) {
jp->inuse = false;
return portnum;
{
for (int i = 0; i < MAX_STORED_JPORTS; i++) {
struct stored_jport *jp = &stored_jports[portnum][i];
- if (jp->inuse && jp->jp.id == -2) {
+ if (jp->inuse && jp->jp.id == JPORT_UNPLUGGED) {
jp->inuse = false;
}
}
static void inputdevice_store_used_device(struct jport *jps, int portnum, bool defaultports)
{
- if (jps->id == -1)
+ if (jps->id == JPORT_NONE)
return;
+
// already added? if custom or kbr layout: delete all old
for (int i = 0; i < MAX_STORED_JPORTS; i++) {
struct stored_jport *jp = &stored_jports[portnum][i];
}
}
}
+
// delete from other ports
for (int j = 0; j < MAX_JPORTS; j++) {
for (int i = 0; i < MAX_STORED_JPORTS; i++) {
struct jport jpt = { 0 };
_tcscpy(jpt.idc.configname, idc->configname);
_tcscpy(jpt.idc.name, idc->name);
- jpt.id = -2;
+ jpt.id = JPORT_UNPLUGGED;
for (int i = 0; i < MAX_JPORTS; i++) {
struct jport *jp = &p->jports[i];
if (!_tcscmp(jp->idc.name, idc->name) && !_tcscmp(jp->idc.configname, idc->configname)) {
reset_inputdevice_config_temp();
if (reset) {
- for (int i = 0; i < MAX_JPORTS; i++) {
- struct jport_config *jp = &jport_config_store[i];
- memset(jp, 0, sizeof(struct jport_config));
- }
inputdevice_store_clear();
}
}
vv += JSEM_CUSTOM;
}
if (port->id != vv || always) {
+ port->idc.shortid[0] = 0;
+ port->idc.configname[0] = 0;
+ port->idc.name[0] = 0;
if (vv >= JSEM_JOYS && vv < JSEM_MICE) {
_tcscpy(port->idc.name, inputdevice_get_device_name (IDTYPE_JOYSTICK, vv - JSEM_JOYS));
_tcscpy(port->idc.configname, inputdevice_get_device_unique_name (IDTYPE_JOYSTICK, vv - JSEM_JOYS));
} else if (vv >= JSEM_MICE && vv < JSEM_END) {
_tcscpy(port->idc.name, inputdevice_get_device_name (IDTYPE_MOUSE, vv - JSEM_MICE));
_tcscpy(port->idc.configname, inputdevice_get_device_unique_name (IDTYPE_MOUSE, vv - JSEM_MICE));
- } else {
- port->idc.name[0] = 0;
- port->idc.configname[0] = 0;
+ } else if (vv >= JSEM_KBDLAYOUT && vv < JSEM_CUSTOM) {
+ _stprintf(port->idc.shortid, _T("kbd%d"), vv - JSEM_KBDLAYOUT + 1);
}
wasinvalid = true;
#if 0
break;
if (jp->idc.configname[0]) {
found = inputdevice_joyport_config(p, jp->idc.name, jp->idc.configname, portnum, jp->mode, 1, true) != 0;
- if (!found && jp->id == -2)
+ if (!found && jp->id == JPORT_UNPLUGGED)
found = inputdevice_joyport_config(p, jp->idc.name, NULL, portnum, jp->mode, 1, true) != 0;
} else if (jp->id < JSEM_JOYS && jp->id >= 0) {
jpx->id = jp->id;
void inputdevice_joyport_config_store(struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type)
{
- struct jport_config *jp = &jport_config_store[portnum];
+ struct jport *jp = &p->jports[portnum];
if (type == 2) {
_tcscpy(jp->idc.name, value);
} else if (type == 1) {
_tcscpy(jp->idc.configname, value);
} else {
- _tcscpy(jp->id, value);
+ _tcscpy(jp->idc.shortid, value);
}
jp->mode = mode;
}
void inputdevice_fix_prefs(struct uae_prefs *p, bool userconfig)
{
+ struct jport jport_config_store[MAX_JPORTS];
+
+ for (int i = 0; i < MAX_JPORTS; i++) {
+ memcpy(&jport_config_store[i], &p->jports[i], sizeof(struct jport));
+ }
+
bool defaultports = userconfig == false;
// Convert old style custom mapping to new style
for (int i = 0; i < MAX_JPORTS_CUSTOM; i++) {
bool matched[MAX_JPORTS];
// configname+friendlyname first
for (int i = 0; i < MAX_JPORTS; i++) {
- struct jport_config *jp = &jport_config_store[i];
+ struct jport *jp = &jport_config_store[i];
matched[i] = false;
if (jp->idc.configname[0] && jp->idc.name[0]) {
if (inputdevice_joyport_config(p, jp->idc.name, jp->idc.configname, i, jp->mode, 1, userconfig)) {
inputdevice_validate_jports(p, i, matched);
inputdevice_store_used_device(&p->jports[i], i, defaultports);
matched[i] = true;
+ write_log(_T("Port%d: COMBO '%s' + '%s' matched\n"), i, jp->idc.name, jp->idc.configname);
}
}
}
// configname next
for (int i = 0; i < MAX_JPORTS; i++) {
if (!matched[i]) {
- struct jport_config *jp = &jport_config_store[i];
+ struct jport *jp = &jport_config_store[i];
if (jp->idc.configname[0]) {
if (inputdevice_joyport_config(p, NULL, jp->idc.configname, i, jp->mode, 1, userconfig)) {
inputdevice_validate_jports(p, i, matched);
inputdevice_store_used_device(&p->jports[i], i, defaultports);
matched[i] = true;
+ write_log(_T("Port%d: CONFIG '%s' matched\n"), i, jp->idc.configname);
}
}
}
// friendly name next
for (int i = 0; i < MAX_JPORTS; i++) {
if (!matched[i]) {
- struct jport_config *jp = &jport_config_store[i];
+ struct jport *jp = &jport_config_store[i];
if (jp->idc.name[0]) {
if (inputdevice_joyport_config(p, jp->idc.name, NULL, i, jp->mode, 1, userconfig)) {
inputdevice_validate_jports(p, i, matched);
inputdevice_store_used_device(&p->jports[i], i, defaultports);
matched[i] = true;
+ write_log(_T("Port%d: NAME '%s' matched\n"), i, jp->idc.name);
}
}
}
// joyportX last and only if no name/configname
for (int i = 0; i < MAX_JPORTS; i++) {
if (!matched[i]) {
- struct jport_config *jp = &jport_config_store[i];
- if (jp->id[0] && !jp->idc.name[0] && !jp->idc.configname[0]) {
- if (inputdevice_joyport_config(p, jp->id, NULL, i, jp->mode, 0, userconfig)) {
+ struct jport *jp = &jport_config_store[i];
+ if (jp->idc.shortid[0] && !jp->idc.name[0] && !jp->idc.configname[0]) {
+ if (inputdevice_joyport_config(p, jp->idc.shortid, NULL, i, jp->mode, 0, userconfig)) {
inputdevice_validate_jports(p, i, matched);
inputdevice_store_used_device(&p->jports[i], i, defaultports);
matched[i] = true;
+ write_log(_T("Port%d: ID '%s' matched\n"), i, jp->idc.shortid);
}
}
if (!matched[i]) {
if (jp->idc.configname[0] && jp->idc.name[0]) {
struct jport jpt = { 0 };
memcpy(&jpt.idc, &jp->idc, sizeof(struct inputdevconfig));
- jpt.id = -2;
+ jpt.id = JPORT_UNPLUGGED;
write_log(_T("Unplugged stored, port %d '%s' (%s)\n"), i, jp->idc.name, jp->idc.configname);
inputdevice_store_used_device(&jpt, i, defaultports);
freejport(p, i);
}
for (int i = 0; i < MAX_JPORTS; i++) {
if (!matched[i]) {
+ struct jport *jp = &jport_config_store[i];
freejport(p, i);
- inputdevice_get_previous_joy(p, i);
+ if (jp->id != JPORT_NONE) {
+ inputdevice_get_previous_joy(p, i);
+ write_log(_T("Port%d: ID=%d getting previous: %d\n"), i, jp->id, p->jports[i].id);
+ } else {
+ write_log(_T("Port%d: NONE\n"), i);
+ }
}
- struct jport_config *jp = &jport_config_store[i];
- memset(jp, 0, sizeof(struct jport_config));
}
}