mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-09-28 01:54:26 +00:00
Improve calibration routine for touch keypad joystick
This commit is contained in:
parent
9a1d305975
commit
f654fb0825
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
24
src/keys.c
24
src/keys.c
@ -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()
|
||||
{
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user