From f0b730ad998440f51a66753772a66868868fbc2c Mon Sep 17 00:00:00 2001 From: "giwoong.kim" Date: Tue, 12 Mar 2013 10:30:17 +0900 Subject: [PATCH] brightness: notify to skin process added brightness protocol Signed-off-by: GiWoong Kim --- tizen/src/hw/maru_brightness.c | 31 +++++++++ .../emulator/skin/comm/ICommunicator.java | 1 + .../skin/comm/sock/SocketCommunicator.java | 65 ++++++++++++++----- tizen/src/skin/maruskin_operation.c | 14 ++-- tizen/src/skin/maruskin_server.c | 22 +++++++ tizen/src/skin/maruskin_server.h | 4 ++ 6 files changed, 114 insertions(+), 23 deletions(-) diff --git a/tizen/src/hw/maru_brightness.c b/tizen/src/hw/maru_brightness.c index 7489568bc3..a170dbac44 100644 --- a/tizen/src/hw/maru_brightness.c +++ b/tizen/src/hw/maru_brightness.c @@ -38,6 +38,7 @@ #include "pci.h" #include "maru_device_ids.h" #include "maru_brightness.h" +#include "skin/maruskin_server.h" #include "debug_ch.h" MULTI_DEBUG_CHANNEL(qemu, maru_brightness); @@ -75,6 +76,8 @@ uint8_t brightness_tbl[] = {100, /* level 0 : for dimming */ /* level 81 ~ 90 */ 226, 228, 229, 231, 232, 234, 235, 237, 238, 240, /* level 91 ~ 99 */ 241, 243, 244, 246, 247, 249, 250, 252, 253}; +QEMUBH *bh; + static uint64_t brightness_reg_read(void *opaque, target_phys_addr_t addr, unsigned size) @@ -117,10 +120,19 @@ static void brightness_reg_write(void *opaque, return; case BRIGHTNESS_OFF: INFO("brightness_off : %lld\n", val); + if (brightness_off == val) { + return; + } + brightness_off = val; + #ifdef TARGET_ARM vga_hw_invalidate(); #endif + + /* notify to skin process */ + qemu_bh_schedule(bh); + return; default: ERR("wrong brightness register write - addr : %d\n", (int)addr); @@ -134,6 +146,22 @@ static const MemoryRegionOps brightness_mmio_ops = { .endianness = DEVICE_LITTLE_ENDIAN, }; +static void brightness_exitfn(PCIDevice *dev) +{ + if (bh) { + qemu_bh_delete(bh); + } +} + +static void maru_brightness_bh(void *opaque) +{ + if (brightness_off == 0) { + notify_brightness(TRUE); + } else { + notify_brightness(FALSE); + } +} + static int brightness_initfn(PCIDevice *dev) { BrightnessState *s = DO_UPCAST(BrightnessState, dev, dev); @@ -147,6 +175,8 @@ static int brightness_initfn(PCIDevice *dev) "maru_brightness_mmio", BRIGHTNESS_REG_SIZE); pci_register_bar(&s->dev, 1, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->mmio_addr); + bh = qemu_bh_new(maru_brightness_bh, s); + return 0; } @@ -162,6 +192,7 @@ static void brightness_classinit(ObjectClass *klass, void *data) k->no_hotplug = 1; k->init = brightness_initfn; + k->exit = brightness_exitfn; } static TypeInfo brightness_info = { diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java index 9a6f3fbd5d..30ca206f43 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java @@ -263,6 +263,7 @@ public interface ICommunicator extends Runnable { DETAIL_INFO_DATA((short) 3), RAMDUMP_COMPLETE((short) 4), BOOTING_PROGRESS((short) 5), + BRIGHTNESS_VALUE((short) 6), SENSOR_DAEMON_START((short) 800), SHUTDOWN((short) 999); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java index 2ce3882953..01dc15050d 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java @@ -117,6 +117,7 @@ public class SocketCommunicator implements ICommunicator { private DataTranfer screenShotDataTransfer; private DataTranfer detailInfoTransfer; private DataTranfer progressDataTransfer; + private DataTranfer brightnessDataTransfer; private Thread sendThread; private LinkedList sendQueue; @@ -142,6 +143,10 @@ public class SocketCommunicator implements ICommunicator { this.progressDataTransfer.sleep = SCREENSHOT_WAIT_INTERVAL; this.progressDataTransfer.maxWaitTime = SCREENSHOT_WAIT_LIMIT; + this.brightnessDataTransfer = new DataTranfer(); + this.brightnessDataTransfer.sleep = SCREENSHOT_WAIT_INTERVAL; + this.brightnessDataTransfer.maxWaitTime = SCREENSHOT_WAIT_LIMIT; + this.heartbeatCount = new AtomicInteger(0); //this.heartbeatExecutor = Executors.newSingleThreadScheduledExecutor(); this.heartbeatTimer = new Timer(); @@ -263,9 +268,8 @@ public class SocketCommunicator implements ICommunicator { heartbeatTimer.schedule(heartbeatExecutor, 1, HEART_BEAT_INTERVAL * 1000); } - while ( true ) { - - if ( isTerminated ) { + while (true) { + if (isTerminated) { break; } @@ -275,16 +279,17 @@ public class SocketCommunicator implements ICommunicator { short cmd = dis.readShort(); int length = dis.readInt(); - if ( logger.isLoggable( Level.FINE ) ) { - logger.fine( "[Socket] read - reqId:" + reqId + ", command:" + cmd + ", dataLength:" + length ); + if (logger.isLoggable(Level.FINE)) { + logger.fine("[Socket] read - reqId:" + reqId + + ", command:" + cmd + ", dataLength:" + length); } ReceiveCommand command = null; try { - command = ReceiveCommand.getValue( cmd ); - } catch ( IllegalArgumentException e ) { - logger.severe( "unknown command:" + cmd ); + command = ReceiveCommand.getValue(cmd); + } catch (IllegalArgumentException e) { + logger.severe("unknown command:" + cmd); continue; } @@ -315,7 +320,7 @@ public class SocketCommunicator implements ICommunicator { break; } case BOOTING_PROGRESS: { - logger.info("received BOOTING_PROGRESS from QEMU."); + //logger.info("received BOOTING_PROGRESS from QEMU."); resetDataTransfer(progressDataTransfer); receiveData(progressDataTransfer, length); @@ -337,7 +342,7 @@ public class SocketCommunicator implements ICommunicator { if (value == 100 | value == 0) { /* this means progressbar will be - dispose soon */ + disposed soon */ if (skin.bootingProgress != null) { skin.bootingProgress = null; } @@ -347,27 +352,53 @@ public class SocketCommunicator implements ICommunicator { break; } + case BRIGHTNESS_VALUE: { + //logger.info("received BRIGHTNESS_VALUE from QEMU."); + + resetDataTransfer(brightnessDataTransfer); + receiveData(brightnessDataTransfer, length); + + byte[] receivedData = getReceivedData(brightnessDataTransfer); + if (null != receivedData) { + String strValue = new String(receivedData, 0, length - 1); + + int value = 1; + try { + value = Integer.parseInt(strValue); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + + if (value == 0) { + logger.info("display off"); + } else { + logger.info("display on"); + } + } + + break; + } case SENSOR_DAEMON_START: { - logger.info( "received SENSOR_DAEMON_START from QEMU." ); - synchronized ( this ) { + logger.info("received SENSOR_DAEMON_START from QEMU."); + synchronized (this) { isSensorDaemonStarted = true; } break; } case SHUTDOWN: { - logger.info( "received RESPONSE_SHUTDOWN from QEMU." ); - sendToQEMU( SendCommand.RESPONSE_SHUTDOWN, null ); + logger.info("received RESPONSE_SHUTDOWN from QEMU."); + sendToQEMU(SendCommand.RESPONSE_SHUTDOWN, null); terminate(); break; } default: { - logger.severe( "Unknown command from QEMU. command:" + cmd ); + logger.severe("Unknown command from QEMU. command:" + cmd); break; } } - } catch ( IOException e ) { - logger.log( Level.SEVERE, e.getMessage(), e ); + } catch (IOException e) { + logger.log(Level.SEVERE, e.getMessage(), e); break; } diff --git a/tizen/src/skin/maruskin_operation.c b/tizen/src/skin/maruskin_operation.c index 3395e30e9f..301c0485a4 100644 --- a/tizen/src/skin/maruskin_operation.c +++ b/tizen/src/skin/maruskin_operation.c @@ -1,7 +1,7 @@ /* * operation for emulator skin * - * 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 @@ -63,10 +63,11 @@ extern int port_shmid; MULTI_DEBUG_CHANNEL(qemu, skin_operation); -#define RESUME_KEY_SEND_INTERVAL 500 // milli-seconds -#define CLOSE_POWER_KEY_INTERVAL 1200 // milli-seconds -#define DATA_DELIMITER "#" // in detail info data -#define TIMEOUT_FOR_SHUTDOWN 10 // seconds + +#define RESUME_KEY_SEND_INTERVAL 500 /* milli-seconds */ +#define CLOSE_POWER_KEY_INTERVAL 1200 /* milli-seconds */ +#define DATA_DELIMITER "#" /* in detail info data */ +#define TIMEOUT_FOR_SHUTDOWN 10 /* seconds */ static int requested_shutdown_qemu_gracefully = 0; @@ -82,7 +83,8 @@ extern int tizen_base_port; static void* run_timed_shutdown_thread(void* args); static void send_to_emuld(const char* request_type, int request_size, const char* send_buf, int buf_size); -void start_display(uint64 handle_id, int lcd_size_width, int lcd_size_height, double scale_factor, short rotation_type) +void start_display(uint64 handle_id, + int lcd_size_width, int lcd_size_height, double scale_factor, short rotation_type) { INFO("start_display handle_id:%ld, lcd size:%dx%d, scale_factor:%f, rotation_type:%d\n", (long)handle_id, lcd_size_width, lcd_size_height, scale_factor, rotation_type); diff --git a/tizen/src/skin/maruskin_server.c b/tizen/src/skin/maruskin_server.c index 4186b57f2c..17458a8ad2 100644 --- a/tizen/src/skin/maruskin_server.c +++ b/tizen/src/skin/maruskin_server.c @@ -123,6 +123,7 @@ enum { SEND_DETAIL_INFO = 3, SEND_RAMDUMP_COMPLETE = 4, SEND_BOOTING_PROGRESS = 5, + SEND_BRIGHTNESS_VALUE = 6, SEND_SENSOR_DAEMON_START = 800, SEND_SHUTDOWN = 999, }; @@ -339,6 +340,27 @@ void notify_booting_progress(int progress_value) } } +void notify_brightness(bool on) +{ + char brightness_data[2] = { 0, }; + int brightness_value = 1; + + if (on == FALSE) { + brightness_value = 0; + } + + snprintf(brightness_data, 2, "%d", brightness_value); + TRACE("brightness value = %s\n", brightness_data); + + if (client_sock) { + if (0 > send_skin_data(client_sock, + SEND_BRIGHTNESS_VALUE, (unsigned char *)brightness_data, 2, 0)) { + + ERR("fail to send SEND_BRIGHTNESS_VALUE to skin.\n"); + } + } +} + int is_ready_skin_server(void) { return ready_server; diff --git a/tizen/src/skin/maruskin_server.h b/tizen/src/skin/maruskin_server.h index ee5e13a14f..59207972bb 100644 --- a/tizen/src/skin/maruskin_server.h +++ b/tizen/src/skin/maruskin_server.h @@ -30,12 +30,16 @@ #ifndef MARUSKIN_SERVER_H_ #define MARUSKIN_SERVER_H_ +#include + int start_skin_server(int argc, char** argv, int qemu_argc, char** qemu_argv); void shutdown_skin_server(void); void notify_sensor_daemon_start(void); void notify_ramdump_completed(void); void notify_booting_progress(int progress_value); +void notify_brightness(bool on); + int is_ready_skin_server(void); int get_skin_server_port(void); -- 2.34.1