mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, x, y, grabFingerID - 1);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
}
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, x, y, 0);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
else if ((finger = getFingerPointSearch(x, y)) != null)
{ /* check the position of previous touch event */
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.RELEASE.value(),
originX, originY, finger.x, finger.y, this.fingerCntMax - 1);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
finger.originX = originX;
finger.originY = originY;
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, x, y, this.fingerCntMax - 1);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
}
}
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, x, y, this.fingerCnt - 1);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
} else if (touchType == MouseEventType.RELEASE.value()) { /* released */
logger.info("mouse up for multi touch");
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, finger.x, finger.y, i);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
/* logger.info(String.format(
"id %d finger multi-touch dragging = (%d, %d)",
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, x, y, 0);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
else if ((finger = this.getFingerPointSearch(x, y)) != null)
{ /* check the position of previous touch event */
mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
originX, originY, x, y, this.fingerCnt - 1);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
} else if (touchType == MouseEventType.RELEASE.value()) { /* released */
logger.info("mouse up for multi touch");
MouseEventData mouseEventData = new MouseEventData(
MouseButtonType.LEFT.value(), MouseEventType.RELEASE.value(),
0, 0, finger.x, finger.y, finger.id - 1);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
finger.id = 0;
private Display display;
private int widthFB;
private int heightFB;
+ private int sizeFramebuffer;
private int[] arrayFramebuffer;
- private ImageData imageData;
- private Image framebuffer;
+ private ImageData dataFramebuffer;
+ private Image imageFramebuffer;
private volatile boolean stopRequest;
private Runnable runnable;
this.display = Display.getDefault();
this.widthFB = widthFB;
this.heightFB = heightFB;
- this.arrayFramebuffer = new int[widthFB * heightFB];
- this.imageData = new ImageData(widthFB, heightFB, COLOR_DEPTH, paletteData);
- this.framebuffer = new Image(Display.getDefault(), imageData);
+ this.sizeFramebuffer = widthFB * heightFB;
+ this.arrayFramebuffer = new int[sizeFramebuffer];
+
+ this.dataFramebuffer =
+ new ImageData(widthFB, heightFB, COLOR_DEPTH, paletteData);
+ this.imageFramebuffer =
+ new Image(Display.getDefault(), dataFramebuffer);
setDaemon(true);
setWaitIntervalTime(30);
stopRequest = false;
Image temp;
- int sizeFramebuffer = widthFB * heightFB;
while (!stopRequest) {
synchronized(this) {
int result = getPixels(arrayFramebuffer); /* from shared memory */
//logger.info("getPixels native function returned " + result);
- imageData.setPixels(0, 0, sizeFramebuffer, arrayFramebuffer, 0);
+ dataFramebuffer.setPixels(0, 0, sizeFramebuffer, arrayFramebuffer, 0);
- temp = framebuffer;
- framebuffer = new Image(display, imageData);
+ temp = imageFramebuffer;
+ imageFramebuffer = new Image(display, dataFramebuffer);
temp.dispose();
if (display.isDisposed() == false) {
}
if (currentState.getCurrentAngle() == 0) { /* portrait */
- e.gc.drawImage(pollThread.framebuffer,
+ e.gc.drawImage(pollThread.imageFramebuffer,
0, 0, pollThread.widthFB, pollThread.heightFB,
0, 0, x, y);
e.gc.getTransform(oldtransform);
/* set to new transfrom */
e.gc.setTransform(transform);
- e.gc.drawImage(pollThread.framebuffer,
+ e.gc.drawImage(pollThread.imageFramebuffer,
0, 0, pollThread.widthFB, pollThread.heightFB,
0, 0, x, y);
/* back to old transform */
event.doit = false;
if (null != communicator) {
- communicator.sendToQEMU(SendCommand.CLOSE, null);
+ communicator.sendToQEMU(SendCommand.CLOSE, null, false);
}
}
}
DisplayStateData lcdStateData = new DisplayStateData(
currentState.getCurrentScale(), currentState.getCurrentRotationId());
- communicator.sendToQEMU(SendCommand.CHANGE_LCD_STATE, lcdStateData);
+ communicator.sendToQEMU(
+ SendCommand.CHANGE_LCD_STATE, lcdStateData, false);
}
};
KeyEventData keyEventData = new KeyEventData(
KeyEventType.RELEASED.value(), data.keycode,
data.stateMask, data.keyLocation);
- communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_KEY_EVENT, keyEventData, false);
logger.info("auto release : keycode=" + keyEventData.keycode +
", stateMask=" + keyEventData.stateMask +
MouseButtonType.LEFT.value(), eventType,
e.x, e.y, geometry[0], geometry[1], 0);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
}
};
MouseButtonType.LEFT.value(), MouseEventType.RELEASE.value(),
e.x, e.y, geometry[0], geometry[1], 0);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
} else if (2 == e.button) { /* wheel button */
logger.info("wheelUp in display");
}
MouseButtonType.LEFT.value(), MouseEventType.PRESS.value(),
e.x, e.y, geometry[0], geometry[1], 0);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
}
MouseButtonType.WHEEL.value(), eventType,
e.x, e.y, geometry[0], geometry[1], e.count);
- communicator.sendToQEMU(SendCommand.SEND_MOUSE_EVENT, mouseEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_MOUSE_EVENT, mouseEventData, false);
}
};
KeyEventData keyEventData = new KeyEventData(
KeyEventType.RELEASED.value(),
disappearKeycode, disappearStateMask, disappearKeyLocation);
- communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_KEY_EVENT, keyEventData, false);
removePressedKey(keyEventData);
KeyEventData keyEventData = new KeyEventData(
KeyEventType.RELEASED.value(), keyCode, stateMask, e.keyLocation);
- communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_KEY_EVENT, keyEventData, false);
removePressedKey(keyEventData);
}
KeyEventData keyEventData = new KeyEventData(KeyEventType.RELEASED.value(),
previousKeyCode, previousStateMask, previous.keyLocation);
- communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_KEY_EVENT, keyEventData, false);
removePressedKey(keyEventData);
}
KeyEventData keyEventData = new KeyEventData(
KeyEventType.PRESSED.value(), keyCode, stateMask, e.keyLocation);
- communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_KEY_EVENT, keyEventData, false);
addPressedKey(keyEventData);
}
ee.getMessage(), SWT.ICON_ERROR, config);
}
- communicator.sendToQEMU(SendCommand.OPEN_SHELL, null);
+ communicator.sendToQEMU(
+ SendCommand.OPEN_SHELL, null, false);
}
} );
@Override
public void widgetSelected(SelectionEvent e) {
logger.info("Close Menu is selected");
- communicator.sendToQEMU(SendCommand.CLOSE, null);
+ communicator.sendToQEMU(
+ SendCommand.CLOSE, null, false);
}
} );
DisplayStateData lcdStateData =
new DisplayStateData(currentState.getCurrentScale(), rotationId);
- communicator.sendToQEMU(SendCommand.CHANGE_LCD_STATE, lcdStateData);
+ communicator.sendToQEMU(
+ SendCommand.CHANGE_LCD_STATE, lcdStateData, false);
}
};
DisplayStateData lcdStateData =
new DisplayStateData(scale, currentState.getCurrentRotationId());
- communicator.sendToQEMU(SendCommand.CHANGE_LCD_STATE, lcdStateData);
+ communicator.sendToQEMU(
+ SendCommand.CHANGE_LCD_STATE, lcdStateData, false);
}
};
logger.info("Ram dump menu is selected");
communicator.setRamdumpFlag(true);
- communicator.sendToQEMU(SendCommand.RAM_DUMP, null);
+ communicator.sendToQEMU(
+ SendCommand.RAM_DUMP, null, false);
RamdumpDialog ramdumpDialog;
try {
isOnKbd = on;
logger.info("Host Keyboard " + isOnKbd);
- communicator.sendToQEMU(
- SendCommand.HOST_KBD, new BooleanData(on, SendCommand.HOST_KBD.toString()));
+ communicator.sendToQEMU(SendCommand.HOST_KBD,
+ new BooleanData(on, SendCommand.HOST_KBD.toString()), false);
}
}
}
}
- public void sendToQEMU( SendCommand command, ISendData data );
-
+ public void sendToQEMU(SendCommand command, ISendData data, boolean urgent);
+
public void terminate();
-
}
/**
*
*
- * Copyright (C) 2011 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
* GiWoong Kim <giwoong.kim@samsung.com>
}
- public static final int HEART_BEAT_INTERVAL = 1; //second
+ public static final int HEART_BEAT_INTERVAL = 1; /* seconds */
public static final int HEART_BEAT_EXPIRE = 15;
- public final static int SCREENSHOT_WAIT_INTERVAL = 3; // milli-seconds
- public final static int SCREENSHOT_WAIT_LIMIT = 3000; // milli-seconds
- public final static int DETAIL_INFO_WAIT_INTERVAL = 1; // milli-seconds
- public final static int DETAIL_INFO_WAIT_LIMIT = 3000; // milli-seconds
+ public final static int SCREENSHOT_WAIT_INTERVAL = 3; /* milli-seconds */
+ public final static int SCREENSHOT_WAIT_LIMIT = 3000; /* milli-seconds */
+ public final static int DETAIL_INFO_WAIT_INTERVAL = 1; /* milli-seconds */
+ public final static int DETAIL_INFO_WAIT_LIMIT = 3000; /* milli-seconds */
public final static int MAX_SEND_QUEUE_SIZE = 100000;
StartData startData = new StartData(initialData, width, height, scale, rotation);
logger.info("StartData" + startData);
- sendToQEMU( SendCommand.SEND_START, startData );
+ sendToQEMU(SendCommand.SEND_START, startData, false);
} catch ( IOException e ) {
logger.log( Level.SEVERE, e.getMessage(), e );
switch ( command ) {
case HEART_BEAT: {
resetHeartbeatCount();
- if ( logger.isLoggable( Level.FINE ) ) {
- logger.fine( "received HEAR_BEAT from QEMU." );
+
+ if (logger.isLoggable(Level.FINE)) {
+ logger.fine("received HEAR_BEAT from QEMU.");
}
- sendToQEMU( SendCommand.RESPONSE_HEART_BEAT, null );
+
+ sendToQEMU(SendCommand.RESPONSE_HEART_BEAT, null, true);
break;
}
case SCREEN_SHOT_DATA: {
}
case SHUTDOWN: {
logger.info("received RESPONSE_SHUTDOWN from QEMU.");
- sendToQEMU(SendCommand.RESPONSE_SHUTDOWN, null);
+ sendToQEMU(SendCommand.RESPONSE_SHUTDOWN, null, false);
terminate();
break;
}
}
- public synchronized DataTranfer sendToQEMU(
- SendCommand command, ISendData data, boolean useDataTransfer) {
-
- DataTranfer dataTranfer = null;
-
- if ( useDataTransfer ) {
-
- if ( SendCommand.SCREEN_SHOT.equals( command ) ) {
- dataTranfer = resetDataTransfer( screenShotDataTransfer );
- } else if ( SendCommand.DETAIL_INFO.equals( command ) ) {
- dataTranfer = resetDataTransfer( detailInfoTransfer );
- }
- }
-
- sendToQEMU( command, data );
-
- return dataTranfer;
-
- }
-
- private DataTranfer resetDataTransfer( final DataTranfer dataTransfer ) {
-
- synchronized ( dataTransfer ) {
-
- if ( dataTransfer.isTransferState ) {
- logger.severe( "Already transter state for getting data." );
+ private DataTranfer resetDataTransfer(final DataTranfer dataTransfer) {
+ synchronized(dataTransfer) {
+ if (dataTransfer.isTransferState) {
+ logger.severe("Already transter state for getting data.");
return null;
}
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
- synchronized ( dataTransfer ) {
+ synchronized(dataTransfer) {
dataTransfer.isTransferState = false;
dataTransfer.timer = null;
dataTransfer.receivedData = null;
}
}
-
+
+ public synchronized DataTranfer sendDataToQEMU(
+ SendCommand command, ISendData data, boolean useDataTransfer) {
+ DataTranfer dataTranfer = null;
+
+ if (useDataTransfer) {
+ if (SendCommand.SCREEN_SHOT.equals(command)) {
+ dataTranfer = resetDataTransfer(screenShotDataTransfer);
+ } else if (SendCommand.DETAIL_INFO.equals(command)) {
+ dataTranfer = resetDataTransfer(detailInfoTransfer);
+ }
+ }
+
+ sendToQEMU(command, data, false);
+
+ return dataTranfer;
+ }
+
@Override
- public void sendToQEMU(SendCommand command, ISendData data) {
+ public void sendToQEMU(SendCommand command, ISendData data, boolean urgent) {
synchronized(sendQueue) {
if (MAX_SEND_QUEUE_SIZE < sendQueue.size()) {
logger.warning(
"Send queue size exceeded max value, do not push data into send queue.");
} else {
- sendQueue.add(new SkinSendData(command, data));
+ if (urgent == true) {
+ sendQueue.addFirst(new SkinSendData(command, data));
+ } else {
+ sendQueue.add(new SkinSendData(command, data));
+ }
+
sendQueue.notifyAll();
}
}
public void mouseDown(MouseEvent e) {
KeyEventData keyEventData = new KeyEventData(
KeyEventType.PRESSED.value(), keycode, 0, 0);
- communicator.sendToQEMU(SendCommand.SEND_HARD_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_HARD_KEY_EVENT, keyEventData, false);
}
@Override
public void mouseUp(MouseEvent e) {
KeyEventData keyEventData = new KeyEventData(
KeyEventType.RELEASED.value(), keycode, 0, 0);
- communicator.sendToQEMU(SendCommand.SEND_HARD_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_HARD_KEY_EVENT, keyEventData, false);
}
@Override
/**
* Display the emulator detail information
*
- * Copyright (C) 2011 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
* GiWoong Kim <giwoong.kim@samsung.com>
public final static String VALUE_SUPPORTED = "Supported";
public final static String VALUE_NOTSUPPORTED = "Not Supported";
- private Logger logger = SkinLogger.getSkinLogger( DetailInfoDialog.class ).getLogger();
+ private Logger logger =
+ SkinLogger.getSkinLogger(DetailInfoDialog.class).getLogger();
private SocketCommunicator communicator;
private EmulatorConfig config;
String infoData = null;
- DataTranfer dataTranfer = communicator.sendToQEMU( SendCommand.DETAIL_INFO, null, true );
- byte[] receivedData = communicator.getReceivedData( dataTranfer );
+ DataTranfer dataTranfer =
+ communicator.sendDataToQEMU(SendCommand.DETAIL_INFO, null, true);
+ byte[] receivedData = communicator.getReceivedData(dataTranfer);
if ( null != receivedData ) {
infoData = new String( receivedData );
while skipping of framebuffer drawing */
DisplayStateData lcdStateData = new DisplayStateData(
currentState.getCurrentScale(), currentState.getCurrentRotationId());
- skin.communicator.sendToQEMU(SendCommand.CHANGE_LCD_STATE, lcdStateData);
+ skin.communicator.sendToQEMU(
+ SendCommand.CHANGE_LCD_STATE, lcdStateData, false);
}
/* general shell does not support native transparency,
while skipping of framebuffer drawing */
DisplayStateData lcdStateData = new DisplayStateData(
currentState.getCurrentScale(), currentState.getCurrentRotationId());
- skin.communicator.sendToQEMU(SendCommand.CHANGE_LCD_STATE, lcdStateData);
+ skin.communicator.sendToQEMU(
+ SendCommand.CHANGE_LCD_STATE, lcdStateData, false);
}
/* general shell does not support native transparency,
/* send event */
KeyEventData keyEventData = new KeyEventData(
KeyEventType.RELEASED.value(), pressedHWKey.getKeyCode(), 0, 0);
- communicator.sendToQEMU(SendCommand.SEND_HARD_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_HARD_KEY_EVENT, keyEventData, false);
currentState.setCurrentPressedHWKey(null);
/* send event */
KeyEventData keyEventData = new KeyEventData(
KeyEventType.PRESSED.value(), hwKey.getKeyCode(), 0, 0);
- communicator.sendToQEMU(SendCommand.SEND_HARD_KEY_EVENT, keyEventData);
+ communicator.sendToQEMU(
+ SendCommand.SEND_HARD_KEY_EVENT, keyEventData, false);
currentState.setCurrentPressedHWKey(hwKey);
if (gc != null) {
gc.drawImage(currentState.getCurrentKeyPressedImage(),
hwKey.getRegion().x, hwKey.getRegion().y,
- hwKey.getRegion().width, hwKey.getRegion().height, //src
+ hwKey.getRegion().width, hwKey.getRegion().height, /* src */
hwKey.getRegion().x, hwKey.getRegion().y,
- hwKey.getRegion().width, hwKey.getRegion().height); //dst
+ hwKey.getRegion().width, hwKey.getRegion().height); /* dst */
gc.dispose();
}
protected void capture() throws ScreenShotException {
- DataTranfer dataTranfer = communicator.sendToQEMU(
+ DataTranfer dataTranfer = communicator.sendDataToQEMU(
SendCommand.SCREEN_SHOT, null, true);
byte[] receivedData = communicator.getReceivedData(dataTranfer);
break;
}
case RECV_RESPONSE_HEART_BEAT: {
+ pthread_mutex_lock(&mutex_recv_heartbeat_count);
+ recv_heartbeat_count = 0;
+ pthread_mutex_unlock(&mutex_recv_heartbeat_count);
+
log_cnt += sprintf(log_buf + log_cnt, "RECV_RESPONSE_HEART_BEAT ==\n");
#if 0
TRACE(log_buf);
#endif
TRACE("recv HB req_id:%d\n", req_id);
- pthread_mutex_lock(&mutex_recv_heartbeat_count);
- recv_heartbeat_count = 0;
- pthread_mutex_unlock(&mutex_recv_heartbeat_count);
-
break;
}
case RECV_OPEN_SHELL: {