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)
#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
Name: emuld
-Version: 0.5.2
+Version: 0.5.3
Release: 0
Summary: Emulator daemon
License: Apache-2.0
%prep
%setup -q
-%if ("%{_repository}" == "wearable")
-export CFLAGS+=" -DWEARABLE"
-%endif
-
%if ("%{_repository}" == "mobile")
export CFLAGS+=" -DMOBILE"
%endif
%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
#include "emuld.h"
#include "emuld_common.h"
-#ifdef MOBILE
static int battery_level = 50;
-#endif
pthread_t d_tid[16];
}
}
-#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;
return 0;
}
-#ifdef MOBILE
+
int parse_batterylevel_data(int len, char *buffer)
{
int len1=0, id = 0, ret = 0;
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;
return 0;
}
-#ifdef MOBILE
int parse_usb_data(int len, char *buffer)
{
int len1=0;
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)
{
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);
#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;
LOGERR("system call failure(command = %s)", param);
}
-#ifdef MOBILE
void set_lock_state(int state) {
int i = 0;
int ret = 0;
LOGERR("Emulator Daemon: Failed to call pm_lock/unlock_state().");
}
}
-#endif
/*---------------------------------------------------------------
function : init_data0
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;
}
/*------------------------------- end of function init_server0 */
-#ifdef MOBILE
static void* init_vm_connect(void* data)
{
struct sockaddr_in vm_addr;
pthread_exit((void *) 0);
}
-#endif
static bool epoll_init(void)
{
}
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);
return true;
}
-#ifdef MOBILE
void recv_from_vmodem(int fd)
{
LOGDEBUG("recv_from_vmodem");
}
}
}
-#endif
void recv_from_ij(int fd)
{
return true;
}
-#ifdef MOBILE
static void msgproc_suspend(int fd, ijcommand* ijcmd, bool evdi)
{
if (ijcmd->msg.action == SUSPEND_LOCK) {
if (packet)
free(packet);
}
-#endif
static synbuf g_synbuf;
{
msgproc_sensor(fd, ijcmd, true);
}
-#ifdef MOBILE
else if (strncmp(ijcmd->cmd, "telephony", 9) == 0)
{
msgproc_telephony(fd, ijcmd, true);
{
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);
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);
{
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);
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) {
set_vm_connect_status(0);
-#ifdef MOBILE
if(pthread_create(&tid[0], NULL, init_vm_connect, NULL) != 0)
{
LOGERR("pthread create fail!");
}
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)
{
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])
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");