Prevent from entering "sleep" state via pmapi. 96/11996/2
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Sun, 10 Nov 2013 07:43:58 +0000 (16:43 +0900)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Tue, 12 Nov 2013 11:49:27 +0000 (03:49 -0800)
1. Using pmapi for power manager control.
Now we can control power manager without power-manager modification.
2. Retab emuld.c

Change-Id: I89e6472769d3f3d9929f605e1dda6835fd782311
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
CMakeLists.txt
packaging/emuld.spec
src/emuld.c

index 53bfe39c9258160cc420f76c061bedbf2e16e0bd..a8fb97466a8a2532a35cf0b78d602f1bba78179f 100644 (file)
@@ -37,6 +37,6 @@ add_definitions(-Iinclude)
 ADD_EXECUTABLE(${PROJECT_NAME} src/emuld.c src/get_status.c)
 
 target_link_libraries(${PROJECT_NAME} ${rpkgs_LDFLAGS} ${GLES_LDFLAGS})
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} "-lpthread -lvconf" )
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} "-lpthread -lvconf -lpmapi" )
 
 install(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin)
index ab9beca559d100cd690173625ef8b85bb2b828fb..3715b8b5d2a2a1d579cc697c9676abaa30cd6f9a 100644 (file)
@@ -8,6 +8,7 @@ Group: SDK/Other
 Source1001: packaging/emuld.manifest
 BuildRequires: cmake
 BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(pmapi)
 
 %description
 A emulator daemon is used for communication emulator between and ide.
@@ -59,8 +60,6 @@ chmod 770 %{_prefix}/bin/emuld
 mkdir -p /opt/nfc
 touch /opt/nfc/sdkMsg
 
-%postun
-
 %files
 %defattr(-,root,root,-)
 %{_prefix}/bin/emuld
index 78be1ca1d51f792d023d4fa5530ba9d8f114e88b..f9a36daa352132e489867ab06bfd46c470a7a7c9 100755 (executable)
@@ -38,20 +38,25 @@ License: GNU General Public License
 #include "emuld_common.h"
 #include "emuld.h"
 
+#include "pmapi.h"
+
 #define MAX_CONNECT_TRY_COUNT  (60 * 3)
+
+#define PMAPI_RETRY_COUNT      3
+
 /* global definition */
 unsigned short sdbd_port = SDBD_PORT;
 unsigned short vmodem_port = VMODEM_PORT;
 unsigned short gpsd_port = GPSD_PORT;
 unsigned short sensord_port = SENSORD_PORT;
 
-int g_svr_sockfd;                      /* global server socket fd */
-int g_svr_port;                        /* global server port number */
-int g_vm_sockfd;               /* vmodem fd */
-int g_sdbd_sockfd = -1;                /* sdbd fd */
+int g_svr_sockfd;                              /* global server socket fd */
+int g_svr_port;                                        /* global server port number */
+int g_vm_sockfd;                       /* vmodem fd */
+int g_sdbd_sockfd = -1;                    /* sdbd fd */
 static int g_vm_connect_status;        /* connection status between emuld and vmodem  */
 int g_sdcard_sockfd = -1;
-int g_get_status_sockfd = -1;   /* return status of devive to the injector */
+int g_get_status_sockfd = -1;  /* return status of devive to the injector */
 
 pthread_t tid[MAX_CLIENT + 1];
 
@@ -62,18 +67,18 @@ struct sockaddr_in si_sensord_other, si_gpsd_other;
 int uSensordFd, uGpsdFd, sslen=sizeof(si_sensord_other), sglen=sizeof(si_gpsd_other);
 
 struct {
-       int  cli_sockfd;                                /* client socket fds */
-       unsigned short cli_port;              /* client connection port */
+       int  cli_sockfd;                        /* client socket fds */
+       unsigned short cli_port;    /* client connection port */
 } g_client[MAX_CLIENT];
 
-int g_epoll_fd;                                /* epoll fd */
+int g_epoll_fd;                                /* epoll fd */
 
 static pthread_mutex_t mutex_vmconnect = PTHREAD_MUTEX_INITIALIZER;
 
 struct epoll_event g_events[MAX_EVENTS]; 
 
 void TAPIMessageInit(LXT_MESSAGE *packet)
-{       
+{
        packet->length = 0;
        packet->group = 0;
        packet->action = 0;
@@ -356,7 +361,7 @@ int umount_sdcard(void)
        memset(file_name, '\0', sizeof(file_name));
        LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
        if(packet == NULL){
-           return ret;
+               return ret;
        }
        memset(packet, 0, sizeof(LXT_MESSAGE));
 
@@ -397,8 +402,8 @@ int umount_sdcard(void)
        }
 
        if(packet){
-           free(packet);
-           packet = NULL;
+               free(packet);
+               packet = NULL;
        }
        return ret;
 }
@@ -459,8 +464,8 @@ void userpool_add(int cli_fd, unsigned short cli_port)
                if(g_client[i].cli_sockfd == -1) break;
        }
        if( i >= MAX_CLIENT ){
-           close(cli_fd);
-           return;
+               close(cli_fd);
+               return;
        }
 
        LOG("g_client[%d].cli_port: %d", i, cli_port);
@@ -586,15 +591,15 @@ int recv_data(int event_fd, char** r_databuf, int size)
        r_tmpbuf = (char*)malloc(alloc_size);
        if(r_tmpbuf == NULL)
        {
-           return -1;
+               return -1;
        }
 
        char* databuf = (char*)malloc(alloc_size);
        if(databuf == NULL)
        {
-           free(r_tmpbuf);
-           *r_databuf = NULL;
-           return -1;
+               free(r_tmpbuf);
+               *r_databuf = NULL;
+               return -1;
        }
 
        memset(databuf, '\0', alloc_size);
@@ -714,7 +719,7 @@ void client_recv(int event_fd)
 
        LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
        if (!packet)
-           return;
+               return;
 
        memset(packet, 0, sizeof(*packet));
 
@@ -937,9 +942,9 @@ void client_recv(int event_fd)
                        r_databuf = NULL;
                        recvd_size = recv_data(event_fd, &r_databuf, packet->length);
                        if(r_databuf == NULL){
-                           free(packet);
-                           packet = NULL;
-                           return;
+                               free(packet);
+                               packet = NULL;
+                               return;
                        }
                        LOG("nfc data recv buffer: %s", r_databuf);
 
@@ -1007,7 +1012,7 @@ void client_recv(int event_fd)
                        if(recvd_size <= 0){
                                LOG("client_recv: recv_data err");
                                if(r_databuf) {
-                                       free(r_databuf);
+                                               free(r_databuf);
                                        r_databuf = NULL;
                                }
                                if(packet) {
@@ -1057,7 +1062,7 @@ void client_recv(int event_fd)
 
                                LXT_MESSAGE* mntData = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
                                if(mntData == NULL){
-                                   break;
+                                       break;
                                }
                                memset(mntData, 0, sizeof(LXT_MESSAGE));
 
@@ -1353,6 +1358,18 @@ void setting_location(char* databuf)
        }
 }
 
+void set_lock_state() {
+       int i = 0;
+       // Now we blocking to enter "SLEEP".
+       while (i < PMAPI_RETRY_COUNT && pm_lock_state(LCD_OFF, STAY_CUR_STATE, 0) == -1) {
+               ++i;
+               sleep(10);
+       }
+       if (i == PMAPI_RETRY_COUNT) {
+               fprintf(stderr, "Emulator Daemon: Failed to call pm_lock_state().\n");
+       }
+}
+
 int main( int argc , char *argv[])
 {
        if(log_print == 1)
@@ -1385,7 +1402,7 @@ int main( int argc , char *argv[])
        /* init server */
        init_server0(g_svr_port);
 
-       epoll_init();    /* epoll initialize  */
+       epoll_init();    /* epoll initialize  */
 
        set_vm_connect_status(0);
 
@@ -1394,6 +1411,8 @@ int main( int argc , char *argv[])
 
        udp_init();
 
+       set_lock_state();
+
        bool is_exit = false;
        /* main loop */
        while(!is_exit)
@@ -1402,8 +1421,8 @@ int main( int argc , char *argv[])
        } /* infinite loop while end. */
 
        if(pthread_mutex_destroy(&mutex_vmconnect)) {
-        // TODO: error...
-    }
+               // TODO: error...
+       }
 
        fprintf(stderr, "emuld exit\n");