MultiTouchState *mts = get_emul_multi_touch_state();
if (mts->finger_cnt == mts->finger_cnt_max) {
- INFO("support multi-touch up to %d fingers\n", mts->finger_cnt_max);
+ WARN("support multi-touch up to %d fingers\n", mts->finger_cnt_max);
return -1;
}
return count;
}
-void clear_finger_slot(void)
+void clear_finger_slot(bool keep_enable)
{
int i = 0;
MultiTouchState *mts = get_emul_multi_touch_state();
FingerPoint *finger = NULL;
- INFO("clear multi-touch\n");
+ if (keep_enable == false) {
+ set_multi_touch_enable(0);
+ }
+
+ INFO("clear multi-touch : %d\n", get_multi_touch_enable());
for (i = 0; i < mts->finger_cnt; i++) {
finger = get_finger_point_from_slot(i);
MultiTouchState *mts = get_emul_multi_touch_state();
SDL_Surface *point = (SDL_Surface *)mts->finger_point_surface;
- mts->multitouch_enable = 0;
-
- clear_finger_slot();
+ clear_finger_slot(false);
g_free(mts->finger_slot);
mts->finger_point_surface = NULL;
#ifndef __MARU_FINGER_H__
#define __MARU_FINGER_H__
+#include "qemu-common.h"
+
/* definitions relating to multi-touch */
#define MAX_FINGER_CNT 10
void maru_finger_processing_1(int touch_type, int origin_x, int origin_y, int x, int y);
void maru_finger_processing_2(int touch_type, int origin_x, int origin_y, int x, int y);
int rearrange_finger_points(int lcd_w, int lcd_h, double scale_factor, int rotaton_type);
-void clear_finger_slot(void);
+void clear_finger_slot(bool keep_enable);
void cleanup_multi_touch_state(void);
initMultiTouchState(maximum, palette);
}
+ /* one finger */
static class FingerPoint {
private int id;
private int originX;
return count;
}
- public void clearFingerSlot() {
+ public void clearFingerSlot(boolean keepEnable) {
int i = 0;
FingerPoint finger = null;
- logger.info("clear multi-touch slot");
+ if (keepEnable == false) {
+ setMultiTouchEnable(0);
+ }
+
+ logger.info("clear multi-touch : " + getMultiTouchEnable());
for (i = 0; i < fingerCnt; i++) {
finger = getFingerPointFromSlot(i);
if (finger != null) {
if (finger.id > 0) {
- logger.info(String.format(
- "clear %d, %d, %d", finger.x, finger.y, finger.id - 1));
-
MouseEventData mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.RELEASE.value(),
0, 0, finger.x, finger.y, finger.id - 1);
}
public void cleanupMultiTouchState() {
- multiTouchEnable = 0;
- clearFingerSlot();
+ clearFingerSlot(false);
fingerPointImage.dispose();
}
protected void skinFinalize() {
pollThread.stopRequest();
- finger.setMultiTouchEnable(0);
- finger.clearFingerSlot();
+ /* remove multi-touch finger points */
finger.cleanupMultiTouchState();
super.skinFinalize();
if (tempStateMask == (multiTouchKeySub | multiTouchKey)) {
finger.setMultiTouchEnable(1);
- logger.info("enable multi-touch = mode1");
+ logger.info("enable multi-touch = mode 1");
} else {
- finger.setMultiTouchEnable(0);
- finger.clearFingerSlot();
+ finger.clearFingerSlot(false);
logger.info("disable multi-touch");
}
pressingOriginX = pressingOriginY = -1;
}
- logger.info("enable multi-touch = mode2");
+ logger.info("enable multi-touch = mode 2");
} else if (keyCode == multiTouchKeySub || keyCode == multiTouchKey) {
finger.setMultiTouchEnable(1);
pressingOriginX = pressingOriginY = -1;
}
- logger.info("enable multi-touch = mode1");
+ logger.info("enable multi-touch = mode 1");
}
KeyEventData keyEventData = new KeyEventData(
RECV_BRIGHTNESS_STATE((short) 6),
RECV_ECP_PORT_DATA((short) 7),
RECV_HOST_KBD_STATE((short) 8),
+ RECV_MULTI_TOUCH_STATE((short) 9),
RECV_SENSORD_STARTED((short) 800),
RECV_SDBD_STARTED((short) 801),
break;
}
+ case RECV_MULTI_TOUCH_STATE: {
+ logger.info("received MULTI_TOUCH_STATE from QEMU");
+
+ resetDataTransfer(miscDataTransfer);
+ receiveData(miscDataTransfer, length);
+
+ byte[] receivedData = getReceivedData(miscDataTransfer);
+ if (null != receivedData) {
+ String strValue = new String(receivedData, 0, length - 1, "UTF-8");
+
+ int value = 1;
+ try {
+ value = Integer.parseInt(strValue);
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ }
+
+ if (value == 0) {
+ //TODO:
+ } else {
+ //TODO:
+ }
+ }
+
+ break;
+ }
case RECV_SENSORD_STARTED: {
logger.info("received SENSORD_STARTED from QEMU");
case RECV_EMUL_RESET: {
logger.info("received EMUL_RESET from QEMU");
- isSensorDaemonStarted = false;
- isSdbDaemonStarted = false;
- isEcsServerStarted = false;
+ synchronized (this) {
+ isSensorDaemonStarted = false;
+ isSdbDaemonStarted = false;
+ isEcsServerStarted = false;
+ }
+
// TODO:
break;
MenuItem layout = keywindowMenu.getItem(indexLayout);
if (layout == null) {
layout = keywindowMenu.getItem(0);
+ if (layout == null) {
+ return;
+ }
+
layout.setSelection(true);
}
event_type, keycode, state_mask, key_location);
#ifndef CONFIG_USE_SHM
- //is multi-touch mode ?
if (get_emul_max_touch_point() > 1) {
+ /* multi-touch checking */
int state_mask_temp = state_mask & ~JAVA_KEYCODE_NO_FOCUS;
if ((keycode == JAVA_KEYCODE_BIT_SHIFT &&
pressing_origin_x = pressing_origin_y = -1;
}
- INFO("enable multi-touch = mode2\n");
+ INFO("enable multi-touch = mode 2\n");
}
}
else if (keycode == JAVA_KEYCODE_BIT_CTRL ||
pressing_origin_x = pressing_origin_y = -1;
}
- INFO("enable multi-touch = mode1\n");
+ INFO("enable multi-touch = mode 1\n");
} else if (KEY_RELEASED == event_type) {
if (state_mask_temp == (JAVA_KEYCODE_BIT_CTRL | JAVA_KEYCODE_BIT_SHIFT)) {
get_emul_multi_touch_state()->multitouch_enable = 1;
- INFO("enabled multi-touch = mode1\'\n");
+ INFO("enabled multi-touch = mode 1\'\n");
} else {
- get_emul_multi_touch_state()->multitouch_enable = 0;
- clear_finger_slot();
+ clear_finger_slot(false);
INFO("disable multi-touch\n");
}
}
SEND_BRIGHTNESS_STATE = 6,
SEND_ECP_PORT_DATA = 7,
SEND_HOST_KBD_STATE = 8,
+ SEND_MULTI_TOUCH_STATE = 9,
SEND_SENSORD_STARTED = 800,
SEND_SDBD_STARTED = 801,
}
}
+void notify_multi_touch_state(bool on)
+{
+#define MULTITOUCH_DATA_LENGTH 2
+ char mt_state_data[MULTITOUCH_DATA_LENGTH] = { 0, };
+
+ if (on == false) {
+ snprintf(mt_state_data, MULTITOUCH_DATA_LENGTH, "0");
+ } else {
+ snprintf(mt_state_data, MULTITOUCH_DATA_LENGTH, "1");
+ }
+
+ TRACE("notify multi touch state : %s\n", mt_state_data);
+
+ if (client_sock) {
+ if (0 > send_skin_data(client_sock,
+ SEND_MULTI_TOUCH_STATE,
+ (unsigned char *)mt_state_data, MULTITOUCH_DATA_LENGTH, 0)) {
+
+ ERR("fail to send SEND_MULTI_TOUCH_STATE to skin\n");
+ }
+ } else {
+ INFO("skin client socket is not connected yet\n");
+ }
+}
+
void notify_emul_reset(void)
{
INFO("notify_emul_reset\n");
void notify_booting_progress(unsigned int layer, int progress_value);
void notify_brightness_state(bool on);
void notify_host_kbd_state(bool on);
+void notify_multi_touch_state(bool on);
void notify_emul_reset(void);
int is_ready_skin_server(void);