From db67bf6f46dad107293803e0b283bd2a159b2f2a Mon Sep 17 00:00:00 2001 From: Jinhyung Choi Date: Sat, 17 May 2014 12:04:10 +0900 Subject: [PATCH] wearable: added emuld binary for pedometer Change-Id: Ic3b7c459174a58dc348e21f99ed51fa3c6c407e2 Signed-off-by: Jinhyung Choi --- CMakeLists.txt | 75 ++++++++----------- include/emuld.h | 6 +- packaging/emuld.spec | 8 +- src/device.cpp | 174 +------------------------------------------- src/emuld.cpp | 201 ++------------------------------------------------- src/emuld_proc.cpp | 36 --------- wearable/emuld | Bin 0 -> 67692 bytes 7 files changed, 41 insertions(+), 459 deletions(-) create mode 100755 wearable/emuld diff --git a/CMakeLists.txt b/CMakeLists.txt index c6fe952..0b8fc56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,62 +1,49 @@ cmake_minimum_required(VERSION 2.6) project(emuld CXX) -# to install pkgconfig setup file. -SET(EXEC_PREFIX "\${prefix}") -#SET(LIBDIR "\${prefix}/lib") -SET(INCLUDEDIR "\${prefix}/include") -SET(VERSION 1.1) - -set(PROJECT_MAJOR_VERSION "1") -set(PROJECT_MINOR_VERSION "1") -set(PROJECT_RELEASE_VERSION "0") -set(CMAKE_VERBOSE_MAKEFILE OFF) - IF("$ENV{CFLAGS}" MATCHES "-DMOBILE") - OPTION(USE_D_MOBILE "Use Mobile Def" ON) -ENDIF() + # to install pkgconfig setup file. + SET(EXEC_PREFIX "\${prefix}") + SET(INCLUDEDIR "\${prefix}/include") + SET(VERSION 1.1) -IF("$ENV{CFLAGS}" MATCHES "-DWEARABLE") - OPTION(USE_D_WEARABLE "Use Wearable Def" ON) -ENDIF() + set(PROJECT_MAJOR_VERSION "1") + set(PROJECT_MINOR_VERSION "1") + set(PROJECT_RELEASE_VERSION "0") + set(CMAKE_VERBOSE_MAKEFILE OFF) -SET(SRCS - src/emuld.cpp - src/evdi.cpp - src/emuld_proc.cpp - src/client.cpp - src/device.cpp -) + OPTION(USE_D_MOBILE "Use Mobile Def" ON) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) + SET(SRCS + src/emuld.cpp + src/evdi.cpp + src/emuld_proc.cpp + src/client.cpp + src/device.cpp + ) -INCLUDE(FindPkgConfig) + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) -SET(PKG_MODULE - vconf - deviced - dlog -) + INCLUDE(FindPkgConfig) -IF(USE_D_MOBILE) - SET(PKG_MODULE ${PKG_MODULE} + SET(PKG_MODULE + vconf + deviced + dlog pmapi ) -ENDIF(USE_D_MOBILE) -pkg_check_modules(PKGS REQUIRED ${PKG_MODULE}) + pkg_check_modules(PKGS REQUIRED ${PKG_MODULE}) -IF(USE_D_MOBILE) - ADD_DEFINITIONS("-DMOBILE") -ELSEIF(USE_D_WEARABLE) - ADD_DEFINITIONS("-DWEARABLE") -ENDIF() + ADD_DEFINITIONS("-DENABLE_DLOG_OUT") + ADD_DEFINITIONS(-Wall -O3 -omit-frame-pointer) -ADD_DEFINITIONS("-DENABLE_DLOG_OUT") -ADD_DEFINITIONS(-Wall -O3 -omit-frame-pointer) + ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) -ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} -lpthread) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} -lpthread) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin) +ELSE() + INSTALL(FILES ${CMAKE_SOURCE_DIR}/wearable/${PROJECT_NAME} DESTINATION /usr/bin) +ENDIF() -INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin) diff --git a/include/emuld.h b/include/emuld.h index e03efc3..e768c60 100644 --- a/include/emuld.h +++ b/include/emuld.h @@ -63,12 +63,8 @@ #define MAX_EVENTS 10000 #define MAX_GETCNT 10 #define DEFAULT_PORT 3577 -#ifdef MOBILE #define VMODEM_PORT 3578 -#endif -#ifdef WEARABLE -#define PEDOMETER_PORT 3600 -#endif + #define SRV_IP "10.0.2.2" #define ID_SIZE 10 #define HEADER_SIZE 4 diff --git a/packaging/emuld.spec b/packaging/emuld.spec index 5c80f0a..8c1f091 100644 --- a/packaging/emuld.spec +++ b/packaging/emuld.spec @@ -1,5 +1,5 @@ Name: emuld -Version: 0.5.2 +Version: 0.5.3 Release: 0 Summary: Emulator daemon License: Apache-2.0 @@ -33,10 +33,6 @@ A emulator daemon is used for communication between guest and host %prep %setup -q -%if ("%{_repository}" == "wearable") -export CFLAGS+=" -DWEARABLE" -%endif - %if ("%{_repository}" == "mobile") export CFLAGS+=" -DMOBILE" %endif @@ -63,12 +59,14 @@ cp LICENSE %{buildroot}/usr/share/license/%{name} %make_install %clean +%if ("%{_repository}" == "mobile") make clean rm -rf CMakeCache.txt rm -rf CMakeFiles rm -rf cmake_install.cmake rm -rf Makefile rm -rf install_manifest.txt +%endif %post chmod 770 %{_prefix}/bin/emuld diff --git a/src/device.cpp b/src/device.cpp index ce3104c..0da47c3 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -43,9 +43,7 @@ #include "emuld.h" #include "emuld_common.h" -#ifdef MOBILE static int battery_level = 50; -#endif pthread_t d_tid[16]; @@ -126,70 +124,6 @@ static void system_cmd(const char* msg) } } -#ifdef WEARABLE - -#define DBUS_SEND_CMD "dbus-send --system --type=method_call --print-reply --reply-timeout=120000 --dest=org.tizen.system.deviced /Org/Tizen/System/DeviceD/SysNoti org.tizen.system.deviced.SysNoti." -static void dbus_send(const char* device, const char* option) -{ - const char* dbus_send_cmd = DBUS_SEND_CMD; - char* cmd; - - if (device == NULL || option == NULL) - return; - - cmd = (char*)malloc(512); - if (cmd == NULL) - return; - - memset(cmd, 0, 512); - - sprintf(cmd, "%s%s string:\"%s\" %s", dbus_send_cmd, device, device, option); - - system_cmd(cmd); - LOGINFO("dbus_send: %s", cmd); - - free(cmd); -} - -#define POWER_SUPPLY "power_supply" -#define FULL "Full" -#define CHARGING "Charging" -#define DISCHARGING "Discharging" -static void dbus_send_power_supply(int capacity, int charger) -{ - const char* power_device = POWER_SUPPLY; - char state [16]; - char option [128]; - memset(state, 0, 16); - memset(option, 0, 128); - - if (capacity == 100 && charger == 1) { - memcpy(state, FULL, 4); - } else if (charger == 1) { - memcpy(state, CHARGING, 8); - } else { - memcpy(state, DISCHARGING, 11); - } - - sprintf(option, "int32:5 string:\"%d\" string:\"%s\" string:\"Good\" string:\"%d\" string:\"1\"", - capacity, state, (charger + 1)); - - dbus_send(power_device, option); -} - -#define USB_DEVICE "device_changed" -static void dbus_send_usb(int on) -{ - const char* usb_device = USB_DEVICE; - char option [128]; - memset(option, 0, 128); - - sprintf(option, "int32:2 string:\"usb\" string:\"%d\"", on); - - dbus_send(usb_device, option); -} -#endif - int parse_motion_data(int len, char *buffer) { int len1=0; @@ -303,7 +237,7 @@ int parse_usbkeyboard_data(int len, char *buffer) return 0; } -#ifdef MOBILE + int parse_batterylevel_data(int len, char *buffer) { int len1=0, id = 0, ret = 0; @@ -453,72 +387,7 @@ int parse_batterylevel_data(int len, char *buffer) return 0; } -#endif -#ifdef WEARABLE - -#define FILE_BATTERY_CAPACITY "/sys/class/power_supply/battery/capacity" -#define FILE_BATTERY_CHARGER_ONLINE "/sys/devices/platform/jack/charger_online" -#define FILE_BATTERY_CHARGE_FULL "/sys/class/power_supply/battery/charge_full" -#define FILE_BATTERY_CHARGE_NOW "/sys/class/power_supply/battery/charge_now" - -static int read_from_file(const char* file_name) -{ - int ret; - FILE* fd; - int value; - - fd = fopen(file_name, "r"); - if(!fd) - { - LOGERR("fopen fail: %s", file_name); - return -1; - } - - ret = fscanf(fd, "%d", &value); - fclose(fd); - if (ret <= 0) { - LOGERR("failed to get value"); - return -1; - } - - return value; -} - -static void write_to_file(const char* file_name, int value) -{ - FILE* fd; - - fd = fopen(file_name, "w"); - if(!fd) - { - LOGERR("fopen fail: %s", file_name); - return; - } - fprintf(fd, "%d", value); - fclose(fd); -} - -int set_battery_data(void) -{ - int charger_online = 0; - int battery_level = 0; - - battery_level = read_from_file(FILE_BATTERY_CAPACITY); - LOGINFO("battery level: %d", battery_level); - if (battery_level < 0) - return -1; - - charger_online = read_from_file(FILE_BATTERY_CHARGER_ONLINE); - LOGINFO("charge_online: %d", charger_online); - if (charger_online < 0) - return -1; - - dbus_send_power_supply(battery_level, charger_online); - - return 0; -} -#endif int parse_earjack_data(int len, char *buffer) { int len1=0; @@ -555,7 +424,6 @@ int parse_earjack_data(int len, char *buffer) return 0; } -#ifdef MOBILE int parse_usb_data(int len, char *buffer) { int len1=0; @@ -590,39 +458,6 @@ int parse_usb_data(int len, char *buffer) system_cmd("/usr/bin/sys_event device_usb_chgdet"); return 0; } -#endif - -#ifdef WEARABLE -#define FILE_USB_ONLINE "/sys/devices/platform/jack/usb_online" -int parse_usb_data(int len, char *buffer) -{ - int len1=0; - char tmpbuf[255]; - int x; - - #ifdef SENSOR_DEBUG - LOG("read data: %s", buffer); - #endif - // read param count - memset(tmpbuf, '\0', sizeof(tmpbuf)); - len1 = parse_val(buffer+len, 0x0a, tmpbuf); - len += len1; - - /* first data */ - memset(tmpbuf, '\0', sizeof(tmpbuf)); - len1 = parse_val(buffer+len, 0x0a, tmpbuf); - len += len1; - - x = atoi(tmpbuf); - - write_to_file(FILE_USB_ONLINE, x); - - // because time based polling - dbus_send_usb(x); - - return 0; -} -#endif int parse_rssi_data(int len, char *buffer) { @@ -1252,16 +1087,9 @@ void device_parser(char *buffer) LOGERR("usbkeyboard parse error!"); break; case BATTERYLEVEL: -#ifdef MOBILE ret = parse_batterylevel_data(len, buffer); if(ret < 0) LOGERR("batterylevel parse error!"); -#endif -#ifdef WEARABLE - ret = set_battery_data(); - if(ret < 0) - LOGERR("batterylevel parse error!"); -#endif break; case EARJACK: ret = parse_earjack_data(len, buffer); diff --git a/src/emuld.cpp b/src/emuld.cpp index 33e3961..1bbe41a 100644 --- a/src/emuld.cpp +++ b/src/emuld.cpp @@ -30,28 +30,14 @@ #include "emuld_common.h" #include "emuld.h" #include "synbuf.h" -#ifdef MOBILE #include "pmapi.h" -#endif - -#ifdef WEARABLE -#include "deviced/dd-display.h" -#endif #define PMAPI_RETRY_COUNT 3 #define MAX_CONNECT_TRY_COUNT (60 * 3) #define SRV_IP "10.0.2.2" /* global definition */ -#ifdef MOBILE unsigned short vmodem_port = VMODEM_PORT; -#endif - -#ifdef WEARABLE -unsigned short pedometer_port = PEDOMETER_PORT; -static int g_pedometer_connect_status;/* connection status between emuld and pedometer daemon */ -static pthread_mutex_t mutex_pedometerconnect = PTHREAD_MUTEX_INITIALIZER; -#endif /* global server port number */ int g_svr_port; @@ -91,7 +77,6 @@ void systemcall(const char* param) LOGERR("system call failure(command = %s)", param); } -#ifdef MOBILE void set_lock_state(int state) { int i = 0; int ret = 0; @@ -114,7 +99,6 @@ void set_lock_state(int state) { LOGERR("Emulator Daemon: Failed to call pm_lock/unlock_state()."); } } -#endif /*--------------------------------------------------------------- function : init_data0 @@ -148,108 +132,6 @@ static void set_vm_connect_status(const int v) g_vm_connect_status = v; } -#ifdef WEARABLE - -bool is_pedometer_connected(void) -{ - _auto_mutex _(&mutex_pedometerconnect); - - if (g_pedometer_connect_status != 1) - return false; - - return true; -} - -void set_pedometer_connect_status(const int v) -{ - _auto_mutex _(&mutex_pedometerconnect); - - g_pedometer_connect_status = v; -} - -void* init_pedometer_connect(void* data) -{ - struct sockaddr_in pedometer_addr; - int ret = -1; - - set_pedometer_connect_status(0); - - LOGINFO("init_pedometer_connect start\n"); - - pthread_detach(pthread_self()); - /* Open TCP Socket */ - if ((g_fd[fdtype_pedometer] = socket(AF_INET, SOCK_STREAM, 0)) < 0) - { - LOGERR("Server Start Fails. : Can't open stream socket \n"); - exit(0); - } - - /* Address Setting */ - memset( &pedometer_addr , 0 , sizeof(pedometer_addr)) ; - - pedometer_addr.sin_family = AF_INET; - pedometer_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - pedometer_addr.sin_port = htons(pedometer_port); - - while (ret < 0 && !exit_flag) - { - ret = connect(g_fd[fdtype_pedometer], (struct sockaddr *)&pedometer_addr, sizeof(pedometer_addr)); - - LOGDEBUG("pedometer_sockfd: %d, connect ret: %d\n", g_fd[fdtype_pedometer], ret); - - if(ret < 0) { - LOGDEBUG("connection failed to pedometer! try \n"); - sleep(1); - } - } - - epoll_ctl_add(g_fd[fdtype_pedometer]); - - set_pedometer_connect_status(1); - - pthread_exit((void *) 0); -} - -void recv_from_pedometer(int fd) -{ - printf("recv_from_pedometer\n"); - - ijcommand ijcmd; - if (!read_ijcmd(fd, &ijcmd)) - { - LOGERR("fail to read ijcmd\n"); - - set_pedometer_connect_status(0); - - close(fd); - - if (pthread_create(&tid[3], NULL, init_pedometer_connect, NULL) != 0) - { - LOGERR("pthread create fail!"); - } - return; - } - - LOGDEBUG("pedometer data length: %d", ijcmd.msg.length); - const int tmplen = HEADER_SIZE + ijcmd.msg.length; - char* tmp = (char*) malloc(tmplen); - - if (tmp) - { - memcpy(tmp, &ijcmd.msg, HEADER_SIZE); - if (ijcmd.msg.length > 0) - memcpy(tmp + HEADER_SIZE, ijcmd.data, ijcmd.msg.length); - - if(!ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_PEDOMETER, (const char*) tmp, tmplen)) { - LOGERR("msg_send_to_evdi: failed\n"); - } - - free(tmp); - } -} - -#endif - bool epoll_ctl_add(const int fd) { struct epoll_event events; @@ -386,7 +268,6 @@ fail: } /*------------------------------- end of function init_server0 */ -#ifdef MOBILE static void* init_vm_connect(void* data) { struct sockaddr_in vm_addr; @@ -429,7 +310,6 @@ static void* init_vm_connect(void* data) pthread_exit((void *) 0); } -#endif static bool epoll_init(void) { @@ -584,12 +464,12 @@ bool read_id(const int fd, ijcommand* ijcmd) } LOGDEBUG("identifier: %s", readbuf); -#ifdef MOBILE + memset(ijcmd->cmd, '\0', sizeof(ijcmd->cmd)); int parselen = parse_val(readbuf, 0x0a, ijcmd->cmd); LOGDEBUG("parse_len: %d, buf = %s, fd=%d", parselen, ijcmd->cmd, fd); -#endif + if (readbuf) { free(readbuf); @@ -599,7 +479,6 @@ bool read_id(const int fd, ijcommand* ijcmd) return true; } -#ifdef MOBILE void recv_from_vmodem(int fd) { LOGDEBUG("recv_from_vmodem"); @@ -648,7 +527,6 @@ void recv_from_vmodem(int fd) } } } -#endif void recv_from_ij(int fd) { @@ -721,7 +599,6 @@ static bool accept_proc(const int server_fd) return true; } -#ifdef MOBILE static void msgproc_suspend(int fd, ijcommand* ijcmd, bool evdi) { if (ijcmd->msg.action == SUSPEND_LOCK) { @@ -760,7 +637,6 @@ static void send_default_suspend_req(void) if (packet) free(packet); } -#endif static synbuf g_synbuf; @@ -772,7 +648,6 @@ void process_evdi_command(ijcommand* ijcmd) { msgproc_sensor(fd, ijcmd, true); } -#ifdef MOBILE else if (strncmp(ijcmd->cmd, "telephony", 9) == 0) { msgproc_telephony(fd, ijcmd, true); @@ -781,13 +656,6 @@ void process_evdi_command(ijcommand* ijcmd) { msgproc_suspend(fd, ijcmd, true); } -#endif -#ifdef WEARABLE - else if (strncmp(ijcmd->cmd, "pedometer", 9) == 0) - { - msgproc_pedometer(fd, ijcmd, true); - } -#endif else if (strncmp(ijcmd->cmd, "location", 8) == 0) { msgproc_location(fd, ijcmd, true); @@ -854,14 +722,14 @@ static void recv_from_evdi(evdi_fd fd) readed = g_synbuf.read((char*)&ijcmd.msg, HEADER_SIZE); if (readed < HEADER_SIZE) return; -#ifdef MOBILE + int act = ijcmd.msg.action; int grp = ijcmd.msg.group; int len = ijcmd.msg.length; LOGDEBUG("HEADER : action = %d, group = %d, length = %d", act, grp, len); -#endif + if (ijcmd.msg.length > 0) { ijcmd.data = (char*) malloc(ijcmd.msg.length); @@ -904,22 +772,14 @@ static bool server_process(void) { accept_proc(fd_tmp); } -#ifdef WEARABLE - else if (fd_tmp == g_fd[fdtype_pedometer]) - { - recv_from_pedometer(fd_tmp); - } -#endif else if (fd_tmp == g_fd[fdtype_device]) { recv_from_evdi(fd_tmp); } -#ifdef MOBILE else if(fd_tmp == g_fd[fdtype_vmodem]) { recv_from_vmodem(fd_tmp); } -#endif else { recv_from_ij(fd_tmp); @@ -929,40 +789,15 @@ static bool server_process(void) return false; } -#ifdef WEARABLE -void set_display_lock_state() { - int i = 0; - int ret = 0; - // Now we blocking to enter "SLEEP". - while(i < PMAPI_RETRY_COUNT ) { - ret = display_lock_state(LCD_OFF, STAY_CUR_STATE, 0); - LOGINFO("display_lock_state() return: %d", ret); - if(ret == 0) - { - break; - } - ++i; - sleep(10); - } - if (i == PMAPI_RETRY_COUNT) { - LOGERR("Emulator Daemon: Failed to call display_lock_state().\n"); - } -} -#endif - int main( int argc , char *argv[]) { int state; -#ifdef WEARABLE - int pedometer_state; -#endif - LOGINFO("emuld start"); /* entry , argument check and process */ if(argc < 3){ g_svr_port = DEFAULT_PORT; - }else { + } else { if(strcmp("-port", argv[1]) == 0 ) { g_svr_port = atoi(argv[2]); if(g_svr_port < 1024) { @@ -995,7 +830,6 @@ int main( int argc , char *argv[]) set_vm_connect_status(0); -#ifdef MOBILE if(pthread_create(&tid[0], NULL, init_vm_connect, NULL) != 0) { LOGERR("pthread create fail!"); @@ -1004,18 +838,7 @@ int main( int argc , char *argv[]) } send_default_suspend_req(); -#endif -#ifdef WEARABLE - if(pthread_create(&tid[3], NULL, init_pedometer_connect, NULL) != 0) - { - LOGERR("pthread create fail!"); - close(g_epoll_fd); - exit(0); - } - - set_display_lock_state(); -#endif bool is_exit = false; while(!is_exit) @@ -1037,21 +860,7 @@ int main( int argc , char *argv[]) { LOGERR("mutex_vmconnect is failed to destroy."); } -#ifdef WEARABLE - if (!is_pedometer_connected()) - { - int status; - pthread_join(tid[3], (void **)&status); - LOGINFO("pedometer thread end %d\n", status); - } - - pedometer_state = pthread_mutex_destroy(&mutex_pedometerconnect); - if (pedometer_state != 0) - { - LOGERR("mutex_pedometerconnect is failed to destroy."); - } -#endif stop_listen(); if (g_fd[fdtype_server]) diff --git a/src/emuld_proc.cpp b/src/emuld_proc.cpp index 65875ad..382dbe9 100644 --- a/src/emuld_proc.cpp +++ b/src/emuld_proc.cpp @@ -527,42 +527,6 @@ bool msgproc_telephony(const int sockfd, ijcommand* ijcmd, const bool is_evdi) return true; } -#ifdef WEARABLE - -void print_binary(const char* data, const int len) -{ - int i; - printf("[DATA: "); - for(i = 0; i < len; i++) { - if(i == len - 1) { - printf("%02x]\n", data[i]); - } else { - printf("%02x,", data[i]); - } - } -} - -bool msgproc_pedometer(const int sockfd, ijcommand* ijcmd, const bool is_evdi) -{ - int sent = 0; - - if (!is_pedometer_connected()) - return false; - - print_binary(ijcmd->data, 18); - - sent = send(g_fd[fdtype_pedometer], ijcmd->data, ijcmd->msg.length, 0); - if (sent == -1) - { - perror("pedometer send error"); - } - - LOGDEBUG("sent to pedometer daemon: %d byte", sent); - - return true; -} -#endif - bool msgproc_sensor(const int sockfd, ijcommand* ijcmd, const bool is_evdi) { LOGDEBUG("msgproc_sensor"); diff --git a/wearable/emuld b/wearable/emuld new file mode 100755 index 0000000000000000000000000000000000000000..5246a5f56cf6daa1c189066aa4c405299bc3fb3b GIT binary patch literal 67692 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 m2R!56@s0}