brightness: notify to skin process
authorgiwoong.kim <giwoong.kim@samsung.com>
Tue, 12 Mar 2013 01:30:17 +0000 (10:30 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Tue, 12 Mar 2013 01:30:17 +0000 (10:30 +0900)
added brightness protocol

Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/hw/maru_brightness.c
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java
tizen/src/skin/maruskin_operation.c
tizen/src/skin/maruskin_server.c
tizen/src/skin/maruskin_server.h

index 7489568bc358c2d6f869ce697243bfd9002a6179..a170dbac44ad66120c068192506f26be1ff772fb 100644 (file)
@@ -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 = {
index 9a6f3fbd5d7dc001ffa15ad64f19939099dc96a5..30ca206f43f705f1caed7fca7828517168df9721 100644 (file)
@@ -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);
 
index 2ce38829531368656bb4252b6424177097fc9db2..01dc15050dcb3de17259ef84efdde96448858a68 100644 (file)
@@ -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<SkinSendData> 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;
                        }
 
index 3395e30e9fcaeb4316eef749d5b553e497b8279e..301c0485a443f92ae12b5ee888b94ab77555760d 100644 (file)
@@ -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 <giwoong.kim@samsung.com>
@@ -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);
index 4186b57f2c581b96762f36090e2a2d9c5d4bec45..17458a8ad2ac6c7c5b6df3a06de341639ed171ec 100644 (file)
@@ -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;
index ee5e13a14f4d147be292a2e971dcd8653369deed..59207972bba5f642e4b6319c1fe5392ca0e1ad18 100644 (file)
 #ifndef MARUSKIN_SERVER_H_
 #define MARUSKIN_SERVER_H_
 
+#include <stdbool.h>
+
 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);