Improve calibration routine for touch keypad joystick

This commit is contained in:
Aaron Culliney 2019-11-09 17:10:32 -08:00
parent 9a1d305975
commit f654fb0825
10 changed files with 75 additions and 24 deletions

View File

@ -91,10 +91,16 @@ public class Apple2JoystickCalibration implements Apple2MenuView {
if (variant == Apple2SettingsMenu.TouchDeviceVariant.JOYSTICK) { if (variant == Apple2SettingsMenu.TouchDeviceVariant.JOYSTICK) {
final int x = ((int) (cxy & 0xFF00) >> 8) - 128; final int x = ((int) (cxy & 0xFF00) >> 8) - 128;
final int y = ((int) (cxy & 0x00FF) >> 0) - 128; final int y = ((int) (cxy & 0x00FF) >> 0) - 128;
t = "X:" + x + " Y:" + y; t = "X: " + x + " Y: " + y;
} else { } else {
char c = (char) ((cxy & 0xFF0000) >> 16); char ascii = (char) ((cxy & 0xFF000000) >> 24);
t = "Key:" + c; int scancode = (char) ((cxy & 0x00FF0000) >> 16);
if (ascii == Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION || scancode == 0) {
// ...
} else {
t = "Key: " + Apple2KeypadChooser.asciiRepresentation(mActivity, ascii);
}
} }
final String axisText = t; final String axisText = t;

View File

@ -29,6 +29,15 @@ public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu {
private final static String TAG = "KeyboardSettingsMenu"; private final static String TAG = "KeyboardSettingsMenu";
// These settings must match native side // These settings must match native side
public final static int kLT = 8;
public final static int kTAB = 9;
public final static int kDN = 10;
public final static int kUP = 11;
public final static int kRET = 13;
public final static int kRT = 21;
public final static int kESC = 27;
public final static int kDEL = 127;
public final static int MOUSETEXT_BEGIN = 0x80; public final static int MOUSETEXT_BEGIN = 0x80;
public final static int MOUSETEXT_CLOSEDAPPLE = MOUSETEXT_BEGIN/*+0x00*/; public final static int MOUSETEXT_CLOSEDAPPLE = MOUSETEXT_BEGIN/*+0x00*/;
public final static int MOUSETEXT_OPENAPPLE = MOUSETEXT_BEGIN + 0x01; public final static int MOUSETEXT_OPENAPPLE = MOUSETEXT_BEGIN + 0x01;

View File

@ -15,7 +15,6 @@ import android.content.Context;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
@ -89,7 +88,7 @@ public class Apple2KeypadChooser implements Apple2MenuView {
return; return;
} }
String asciiStr = asciiRepresentation(ascii); String asciiStr = asciiRepresentation(mActivity, ascii);
Log.d(TAG, "ascii:'" + asciiStr + "' scancode:" + scancode); Log.d(TAG, "ascii:'" + asciiStr + "' scancode:" + scancode);
if (ascii == ' ') { if (ascii == ' ') {
ascii = Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE; ascii = Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE;
@ -198,31 +197,41 @@ public class Apple2KeypadChooser implements Apple2MenuView {
Apple2Preferences.sync(mActivity, Apple2Preferences.PREF_DOMAIN_TOUCHSCREEN); Apple2Preferences.sync(mActivity, Apple2Preferences.PREF_DOMAIN_TOUCHSCREEN);
} }
private String asciiRepresentation(char ascii) { public static String asciiRepresentation(Apple2Activity activity, char ascii) {
switch (ascii) { switch (ascii) {
case Apple2KeyboardSettingsMenu.MOUSETEXT_OPENAPPLE: case Apple2KeyboardSettingsMenu.MOUSETEXT_OPENAPPLE:
return mActivity.getResources().getString(R.string.key_open_apple); return activity.getResources().getString(R.string.key_open_apple);
case Apple2KeyboardSettingsMenu.MOUSETEXT_CLOSEDAPPLE: case Apple2KeyboardSettingsMenu.MOUSETEXT_CLOSEDAPPLE:
return mActivity.getResources().getString(R.string.key_closed_apple); return activity.getResources().getString(R.string.key_closed_apple);
case Apple2KeyboardSettingsMenu.kUP:
case Apple2KeyboardSettingsMenu.MOUSETEXT_UP: case Apple2KeyboardSettingsMenu.MOUSETEXT_UP:
return mActivity.getResources().getString(R.string.key_up); return activity.getResources().getString(R.string.key_up);
case Apple2KeyboardSettingsMenu.kLT:
case Apple2KeyboardSettingsMenu.MOUSETEXT_LEFT: case Apple2KeyboardSettingsMenu.MOUSETEXT_LEFT:
return mActivity.getResources().getString(R.string.key_left); return activity.getResources().getString(R.string.key_left);
case Apple2KeyboardSettingsMenu.kRT:
case Apple2KeyboardSettingsMenu.MOUSETEXT_RIGHT: case Apple2KeyboardSettingsMenu.MOUSETEXT_RIGHT:
return mActivity.getResources().getString(R.string.key_right); return activity.getResources().getString(R.string.key_right);
case Apple2KeyboardSettingsMenu.kDN:
case Apple2KeyboardSettingsMenu.MOUSETEXT_DOWN: case Apple2KeyboardSettingsMenu.MOUSETEXT_DOWN:
return mActivity.getResources().getString(R.string.key_down); return activity.getResources().getString(R.string.key_down);
case Apple2KeyboardSettingsMenu.ICONTEXT_CTRL: case Apple2KeyboardSettingsMenu.ICONTEXT_CTRL:
return mActivity.getResources().getString(R.string.key_ctrl); return activity.getResources().getString(R.string.key_ctrl);
case Apple2KeyboardSettingsMenu.kESC:
case Apple2KeyboardSettingsMenu.ICONTEXT_ESC: case Apple2KeyboardSettingsMenu.ICONTEXT_ESC:
return mActivity.getResources().getString(R.string.key_esc); return activity.getResources().getString(R.string.key_esc);
case Apple2KeyboardSettingsMenu.kRET:
case Apple2KeyboardSettingsMenu.ICONTEXT_RETURN: case Apple2KeyboardSettingsMenu.ICONTEXT_RETURN:
return mActivity.getResources().getString(R.string.key_ret); return activity.getResources().getString(R.string.key_ret);
case Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION: case Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION:
return mActivity.getResources().getString(R.string.key_none); return activity.getResources().getString(R.string.key_none);
case ' ': case ' ':
case Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE: case Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE:
return mActivity.getResources().getString(R.string.key_space); return activity.getResources().getString(R.string.key_space);
case Apple2KeyboardSettingsMenu.kDEL:
return activity.getResources().getString(R.string.key_del);
case Apple2KeyboardSettingsMenu.kTAB:
return activity.getResources().getString(R.string.key_tab);
default: default:
return "" + ascii; return "" + ascii;
} }

View File

@ -213,5 +213,7 @@
<string name="joystick_button_swipe_right_button">Swipe right fire</string> <string name="joystick_button_swipe_right_button">Swipe right fire</string>
<string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string> <string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string>
<string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string> <string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</resources> </resources>

View File

@ -213,5 +213,7 @@
<string name="joystick_button_swipe_right_button">Swipe right fire</string> <string name="joystick_button_swipe_right_button">Swipe right fire</string>
<string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string> <string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string>
<string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string> <string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</resources> </resources>

View File

@ -213,5 +213,7 @@
<string name="joystick_button_swipe_right_button">Swipe right fire</string> <string name="joystick_button_swipe_right_button">Swipe right fire</string>
<string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string> <string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string>
<string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string> <string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</resources> </resources>

View File

@ -213,5 +213,7 @@
<string name="joystick_button_swipe_right_button">Swipe right fire</string> <string name="joystick_button_swipe_right_button">Swipe right fire</string>
<string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string> <string name="joystick_button_swipe_right_button_summary">Button to fire on swipe right</string>
<string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string> <string name="joystick_button_swipe_left_button_summary">Button to fire on swipe left</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</resources> </resources>

View File

@ -617,17 +617,13 @@ void Java_org_deadc0de_apple2ix_Apple2Preferences_nativePrefsSync(JNIEnv *env, j
jlong Java_org_deadc0de_apple2ix_Apple2JoystickCalibration_nativePollJoystick(JNIEnv *env, jclass cls) { jlong Java_org_deadc0de_apple2ix_Apple2JoystickCalibration_nativePollJoystick(JNIEnv *env, jclass cls) {
jlong cxy = 0; jlong cxy = 0;
uint8_t c = apple_ii_64k[0][0xC000]; long c = keys_consumeLastKey();
if (c | 0x80) {
c = keys_apple2ASCII(c, NULL);
} else {
c = ' ';
}
cxy |= (c << 16); cxy |= (c << 16);
cxy |= ((joy_x & 0xFF) << 8); cxy |= ((joy_x & 0xFF) << 8);
cxy |= ((joy_y & 0xFF) << 0); cxy |= ((joy_y & 0xFF) << 0);
// last_ascii | last_scancode | joy_x | joy_y
return cxy; return cxy;
} }

View File

@ -17,6 +17,7 @@
static int next_key = -1; static int next_key = -1;
static int last_scancode = -1; static int last_scancode = -1;
static int last_ascii = -1;
bool caps_lock = true; // default enabled because so much breaks otherwise bool caps_lock = true; // default enabled because so much breaks otherwise
bool use_system_caps_lock = false; bool use_system_caps_lock = false;
@ -217,7 +218,6 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
SCOPE_TRACE_INTERFACE("keys_handleInput: scancode:%d is_pressed:%d is_ascii:%d", scancode, is_pressed, is_ascii); SCOPE_TRACE_INTERFACE("keys_handleInput: scancode:%d is_pressed:%d is_ascii:%d", scancode, is_pressed, is_ascii);
if (is_ascii) { if (is_ascii) {
last_scancode = -1;
if (!is_pressed) { if (!is_pressed) {
return; return;
} }
@ -226,6 +226,7 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
scancode -= 32; scancode -= 32;
} }
} }
last_scancode = keys_ascii2Scancode(scancode);
next_key = scancode; next_key = scancode;
} else if (scancode >= 0) { } else if (scancode >= 0) {
assert(scancode < 0x80); assert(scancode < 0x80);
@ -283,6 +284,7 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
) )
{ {
do { do {
last_ascii = next_key;
int current_key = next_key; int current_key = next_key;
next_key = -1; next_key = -1;
@ -459,6 +461,26 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
#endif #endif
} }
long keys_consumeLastKey(void) {
apple_ii_64k[0][0xC000] = 0x00;
apple_ii_64k[1][0xC000] = 0x00;
int scancode = last_scancode;
int ascii = last_ascii;
if (scancode < 0 || ascii < 0) {
scancode = 0;
ascii = 0;
}
assert(scancode < 256);
assert(ascii < 256);
long scankey = (((uint8_t)ascii) << 8) | (((uint8_t)scancode) << 0);
return scankey;
}
#ifdef INTERFACE_CLASSIC #ifdef INTERFACE_CLASSIC
int c_rawkey() int c_rawkey()
{ {

View File

@ -148,6 +148,7 @@ bool c_keys_is_interface_key(int key);
bool keys_isShifted(void); bool keys_isShifted(void);
int keys_ascii2Scancode(uint8_t ch); int keys_ascii2Scancode(uint8_t ch);
void keys_handleInput(int scan_or_key, bool is_pressed, bool is_ascii); void keys_handleInput(int scan_or_key, bool is_pressed, bool is_ascii);
long keys_consumeLastKey(void);
int keys_scancode2ASCII(int scancode, bool is_shifted, bool is_ctrl); int keys_scancode2ASCII(int scancode, bool is_shifted, bool is_ctrl);
uint8_t keys_apple2ASCII(uint8_t c, OUTPARM font_mode_t *mode); uint8_t keys_apple2ASCII(uint8_t c, OUTPARM font_mode_t *mode);