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) {
final int x = ((int) (cxy & 0xFF00) >> 8) - 128;
final int y = ((int) (cxy & 0x00FF) >> 0) - 128;
t = "X:" + x + " Y:" + y;
t = "X: " + x + " Y: " + y;
} else {
char c = (char) ((cxy & 0xFF0000) >> 16);
t = "Key:" + c;
char ascii = (char) ((cxy & 0xFF000000) >> 24);
int scancode = (char) ((cxy & 0x00FF0000) >> 16);
if (ascii == Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION || scancode == 0) {
// ...
} else {
t = "Key: " + Apple2KeypadChooser.asciiRepresentation(mActivity, ascii);
}
}
final String axisText = t;

View File

@ -29,6 +29,15 @@ public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu {
private final static String TAG = "KeyboardSettingsMenu";
// 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_CLOSEDAPPLE = MOUSETEXT_BEGIN/*+0x00*/;
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.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@ -89,7 +88,7 @@ public class Apple2KeypadChooser implements Apple2MenuView {
return;
}
String asciiStr = asciiRepresentation(ascii);
String asciiStr = asciiRepresentation(mActivity, ascii);
Log.d(TAG, "ascii:'" + asciiStr + "' scancode:" + scancode);
if (ascii == ' ') {
ascii = Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE;
@ -198,31 +197,41 @@ public class Apple2KeypadChooser implements Apple2MenuView {
Apple2Preferences.sync(mActivity, Apple2Preferences.PREF_DOMAIN_TOUCHSCREEN);
}
private String asciiRepresentation(char ascii) {
public static String asciiRepresentation(Apple2Activity activity, char ascii) {
switch (ascii) {
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:
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:
return mActivity.getResources().getString(R.string.key_up);
return activity.getResources().getString(R.string.key_up);
case Apple2KeyboardSettingsMenu.kLT:
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:
return mActivity.getResources().getString(R.string.key_right);
return activity.getResources().getString(R.string.key_right);
case Apple2KeyboardSettingsMenu.kDN:
case Apple2KeyboardSettingsMenu.MOUSETEXT_DOWN:
return mActivity.getResources().getString(R.string.key_down);
return activity.getResources().getString(R.string.key_down);
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:
return mActivity.getResources().getString(R.string.key_esc);
return activity.getResources().getString(R.string.key_esc);
case Apple2KeyboardSettingsMenu.kRET:
case Apple2KeyboardSettingsMenu.ICONTEXT_RETURN:
return mActivity.getResources().getString(R.string.key_ret);
return activity.getResources().getString(R.string.key_ret);
case Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION:
return mActivity.getResources().getString(R.string.key_none);
return activity.getResources().getString(R.string.key_none);
case ' ':
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:
return "" + ascii;
}

View File

@ -213,5 +213,7 @@
<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_right_button_summary">Button to fire on swipe right</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</resources>

View File

@ -213,5 +213,7 @@
<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_right_button_summary">Button to fire on swipe right</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</resources>

View File

@ -213,5 +213,7 @@
<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_right_button_summary">Button to fire on swipe right</string>
<string name="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</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_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="key_del">[DEL]</string>
<string name="key_tab">[TAB]</string>
</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 cxy = 0;
uint8_t c = apple_ii_64k[0][0xC000];
if (c | 0x80) {
c = keys_apple2ASCII(c, NULL);
} else {
c = ' ';
}
long c = keys_consumeLastKey();
cxy |= (c << 16);
cxy |= ((joy_x & 0xFF) << 8);
cxy |= ((joy_y & 0xFF) << 0);
// last_ascii | last_scancode | joy_x | joy_y
return cxy;
}

View File

@ -17,6 +17,7 @@
static int next_key = -1;
static int last_scancode = -1;
static int last_ascii = -1;
bool caps_lock = true; // default enabled because so much breaks otherwise
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);
if (is_ascii) {
last_scancode = -1;
if (!is_pressed) {
return;
}
@ -226,6 +226,7 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
scancode -= 32;
}
}
last_scancode = keys_ascii2Scancode(scancode);
next_key = scancode;
} else if (scancode >= 0) {
assert(scancode < 0x80);
@ -283,6 +284,7 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
)
{
do {
last_ascii = next_key;
int current_key = next_key;
next_key = -1;
@ -459,6 +461,26 @@ void keys_handleInput(int scancode, bool is_pressed, bool is_ascii) {
#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
int c_rawkey()
{

View File

@ -148,6 +148,7 @@ bool c_keys_is_interface_key(int key);
bool keys_isShifted(void);
int keys_ascii2Scancode(uint8_t ch);
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);
uint8_t keys_apple2ASCII(uint8_t c, OUTPARM font_mode_t *mode);