*
*/
+#include <sys/mount.h>
+#include <errno.h>
+#include <unistd.h>
+
// SD Card
#include <dirent.h>
#include <sys/stat.h>
-#include <sys/mount.h>
#include <stdio.h>
#include <stdlib.h>
#include <mntent.h>
// SDCard
#define IJTYPE_SDCARD "sdcard"
+// HDS
+#define IJTYPE_HDS "hds"
+
char SDpath[256];
// Location
LOGINFO("start sdcard umount");
- pthread_cancel(tid[1]);
+ pthread_cancel(tid[TID_SDCARD]);
for (i = 0; i < 10; i++)
{
ret = access(file_name, F_OK);
if (ret == 0)
{
- LOGDEBUG("SDpath is %s", SDpath);
+ LOGDEBUG("SDpath is %s", SDpath);
- packet->length = strlen(SDpath); // length
- packet->group = 11; // sdcard
- packet->action = 0; // unmounted
+ packet->length = strlen(SDpath); // length
+ packet->group = 11; // sdcard
+ packet->action = 0; // unmounted
- const int tmplen = HEADER_SIZE + packet->length;
- char* tmp = (char*) malloc(tmplen);
- if (!tmp)
- break;
+ const int tmplen = HEADER_SIZE + packet->length;
+ char* tmp = (char*) malloc(tmplen);
+ if (!tmp)
+ break;
- memcpy(tmp, packet, HEADER_SIZE);
- memcpy(tmp + HEADER_SIZE, SDpath, packet->length);
+ memcpy(tmp, packet, HEADER_SIZE);
+ memcpy(tmp + HEADER_SIZE, SDpath, packet->length);
- ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_SDCARD, (const char*) tmp, tmplen);
+ ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_SDCARD, (const char*) tmp, tmplen);
- free(tmp);
+ free(tmp);
memset(SDpath, '\0', sizeof(SDpath));
sprintf(SDpath, "umounted");
if (!param)
break;
- if (pthread_create(&tid[1], NULL, mount_sdcard, (void*) param) != 0)
+ if (pthread_create(&tid[TID_SDCARD], NULL, mount_sdcard, (void*) param) != 0)
LOGERR("mount sdcard pthread create fail!");
}
return message;
}
-static void* setting_device(void* data)
+static void* getting_location(void* data)
{
pthread_detach(pthread_self());
break;
}
- if (msg == 0)
- {
- LOGDEBUG("send error message to injector");
- memset(packet, 0, sizeof(LXT_MESSAGE));
- packet->length = 0;
- packet->group = STATUS;
- packet->action = param->ActionID;
- }
- else
- {
- LOGDEBUG("send data to injector");
- }
-
- const int tmplen = HEADER_SIZE + packet->length;
- char* tmp = (char*) malloc(tmplen);
- if (tmp)
- {
- memcpy(tmp, packet, HEADER_SIZE);
- if (packet->length > 0)
- memcpy(tmp + HEADER_SIZE, msg, packet->length);
-
- ijmsg_send_to_evdi(g_fd[fdtype_device], param->type_cmd, (const char*) tmp, tmplen);
-
- free(tmp);
+ if (msg == 0)
+ {
+ LOGDEBUG("send error message to injector");
+ memset(packet, 0, sizeof(LXT_MESSAGE));
+ packet->length = 0;
+ packet->group = STATUS;
+ packet->action = param->ActionID;
+ }
+ else
+ {
+ LOGDEBUG("send data to injector");
+ }
+
+ const int tmplen = HEADER_SIZE + packet->length;
+ char* tmp = (char*) malloc(tmplen);
+ if (tmp)
+ {
+ memcpy(tmp, packet, HEADER_SIZE);
+ if (packet->length > 0)
+ memcpy(tmp + HEADER_SIZE, msg, packet->length);
+
+ ijmsg_send_to_evdi(g_fd[fdtype_device], param->type_cmd, (const char*) tmp, tmplen);
+
+ free(tmp);
}
if(msg != 0)
param->ActionID = ijcmd->msg.action;
memcpy(param->type_cmd, ijcmd->cmd, ID_SIZE);
- if (pthread_create(&tid[2], NULL, setting_device, (void*) param) != 0)
+ if (pthread_create(&tid[TID_LOCATION], NULL, getting_location, (void*) param) != 0)
{
LOGERR("location pthread create fail!");
return;
}
}
+static char* make_header_msg(int group, int action)
+{
+ char *tmp = (char*) malloc(HEADER_SIZE);
+ if (!tmp)
+ return NULL;
+
+ memset(tmp, 0, HEADER_SIZE);
+
+ memcpy(tmp + 2, &group, 1);
+ memcpy(tmp + 3, &action, 1);
+
+ return tmp;
+}
+
+#define MSG_GROUP_HDS 100
+
+void* mount_hds(void* data)
+{
+ int i, ret = 0;
+ char* tmp;
+ int group, action;
+
+ LOGINFO("start hds mount thread");
+
+ pthread_detach(pthread_self());
+
+ usleep(1000);
+
+ for (i = 0; i < 10; i++)
+ {
+ ret = mount("fileshare", "/mnt/host", "9p", 0,
+ "trans=virtio,version=9p2000.L,msize=65536");
+ if(ret == 0) {
+ action = 1;
+ break;
+ } else {
+ LOGERR("%d trial: mount is failed with errno: %d", i, errno);
+ }
+ usleep(100);
+ }
+
+ group = MSG_GROUP_HDS;
+
+ if (i == 10 || ret != 0)
+ action = 2;
+
+ tmp = make_header_msg(group, action);
+ if (!tmp) {
+ LOGERR("failed to alloc: out of resource.");
+ pthread_exit((void *) 0);
+ return NULL;
+ }
+
+ ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_HDS, (const char*) tmp, HEADER_SIZE);
+
+ free(tmp);
+
+ pthread_exit((void *) 0);
+}
+
+int umount_hds(void)
+{
+ int ret = 0;
+ char* tmp;
+ int group, action;
+
+ pthread_cancel(tid[TID_HDS]);
+
+ LOGINFO("unmount /mnt/host.");
+
+ ret = umount("/mnt/host");
+ if (ret != 0) {
+ LOGERR("unmount failed with error num: %d", errno);
+ action = 4;
+ } else {
+ action = 3;
+ }
+
+ group = MSG_GROUP_HDS;
+
+ tmp = make_header_msg(group, action);
+ if (!tmp) {
+ LOGERR("failed to alloc: out of resource.");
+ return -1;
+ }
+
+ LOGINFO("send result with action %d to evdi", action);
+
+ ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_HDS, (const char*) tmp, HEADER_SIZE);
+
+ free(tmp);
+
+ return 0;
+}
+
+void msgproc_hds(const int sockfd, ijcommand* ijcmd)
+{
+ LOGDEBUG("msgproc_hds");
+
+ if (ijcmd->msg.action == 1) {
+ if (pthread_create(&tid[TID_HDS], NULL, mount_hds, NULL) != 0)
+ LOGERR("mount hds pthread create fail!");
+ } else if (ijcmd->msg.action == 2) {
+ umount_hds();
+ } else {
+ LOGERR("unknown action cmd.");
+ }
+}
#define STATUS 15
#define RSSI_LEVEL 104
-static int battery_level = 50;
-
enum sensor_type{
MOTION = 6,
USBKEYBOARD = 7,
SENSOR_MOTION_MOVE_MOVETOCALL = 1
};
+static void system_cmd(const char* msg)
+{
+ int ret = system(msg);
+ if (ret == -1) {
+ LOGERR("system command is failed: %s", msg);
+ }
+}
+
+#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 DEVICE_CHANGED "device_changed"
+
+static void dbus_send_usb(int on)
+{
+ const char* usb_device = DEVICE_CHANGED;
+ char option [128];
+ memset(option, 0, 128);
+
+ sprintf(option, "int32:2 string:\"usb\" string:\"%d\"", on);
+
+ dbus_send(usb_device, option);
+}
+
+static void dbus_send_earjack(int on)
+{
+ const char* earjack_device = DEVICE_CHANGED;
+ char option [128];
+ memset(option, 0, 128);
+
+ sprintf(option, "int32:2 string:\"earjack\" string:\"%d\"", on);
+
+ dbus_send(earjack_device, option);
+}
+
int parse_motion_data(int len, char *buffer)
{
int len1=0;
return 0;
}
-#define PATH_BATTERY_CAPACITY "sys/class/power_supply/battery/capacity"
-#define PATH_BATTERY_CHARGER_ON "/sys/devices/platform/jack/charger_online"
-#define PATH_BATTERY_CHARGE_FULL "/sys/class/power_supply/battery/charge_full"
-#define PATH_BATTERY_CHARGE_NOW "/sys/class/power_supply/battery/charge_now"
+#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"
-int parse_batterylevel_data(int len, char *buffer)
+static int read_from_file(const char* file_name)
{
- int len1=0, id = 0, ret = 0;
- char tmpbuf[255];
- int level = 0, charger = 0, charger_online = 0, charge_full = 0;
+ int ret;
FILE* fd;
+ int value;
- LOGDEBUG("read data: %s", buffer);
-
- // 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;
-
- id = atoi(tmpbuf);
- if(id == 1) // level
+ fd = fopen(file_name, "r");
+ if(!fd)
{
- memset(tmpbuf, '\0', sizeof(tmpbuf));
- len1 = parse_val(buffer+len, 0x0a, tmpbuf);
- len += len1;
-
- level = atoi(tmpbuf);
- battery_level = level;
-
- if(level == 100)
- {
- charger = 0;
- }
- else
- {
- charger = 1;
- }
-
- fd = fopen(PATH_BATTERY_CAPACITY, "w");
- if(!fd)
- {
- LOGERR("fopen fail");
- return -1;
- }
- fprintf(fd, "%d", level);
- fclose(fd);
-
- fd = fopen(PATH_BATTERY_CHARGER_ON, "r");
- if(!fd)
- {
- LOGERR("fopen fail");
- return -1;
- }
- ret = fscanf(fd, "%d", &charger_online);
- fclose(fd);
- if (ret < 0)
- {
- LOGERR("failed to get charger_online value");
- return -1;
- }
-
- LOGDEBUG("charge_online: %d", charger_online);
+ LOGERR("fopen fail: %s", file_name);
+ return -1;
+ }
- if(charger_online == 1 && level == 100)
- {
- charge_full = 1;
- }
- else
- {
- charge_full = 0;
- }
- LOGDEBUG("charge_full: %d", charge_full);
+ ret = fscanf(fd, "%d", &value);
+ fclose(fd);
+ if (ret <= 0) {
+ LOGERR("failed to get value");
+ return -1;
+ }
- fd = fopen(PATH_BATTERY_CHARGE_FULL, "w");
- if(!fd)
- {
- LOGERR("charge_full fopen fail");
- return -1;
- }
- fprintf(fd, "%d", charge_full);
- fclose(fd);
+ return value;
+}
- if(charger_online == 1)
- {
- fd = fopen(PATH_BATTERY_CHARGE_NOW, "w");
- if(!fd)
- {
- LOGERR("charge_now fopen fail");
- return -1;
- }
- fprintf(fd, "%d", charger);
- fclose(fd);
- }
+static void write_to_file(const char* file_name, int value)
+{
+ FILE* fd;
- // because time based polling
- systemcall("/usr/bin/sys_event device_charge_chgdet");
- }
- else if(id == 2)
+ fd = fopen(file_name, "w");
+ if(!fd)
{
- /* second data */
- memset(tmpbuf, '\0', sizeof(tmpbuf));
- len1 = parse_val(buffer+len, 0x0a, tmpbuf);
- len += len1;
-
- charger = atoi(tmpbuf);
- fd = fopen(PATH_BATTERY_CHARGER_ON, "w");
- if(!fd)
- {
- LOGERR("charger_online fopen fail");
- return -1;
- }
- fprintf(fd, "%d", charger);
- fclose(fd);
-
- fd = fopen(PATH_BATTERY_CHARGE_FULL, "w");
- if(!fd)
- {
- LOGERR("charge_full fopen fail");
- return -1;
- }
+ LOGERR("fopen fail: %s", file_name);
+ return;
+ }
+ fprintf(fd, "%d", value);
+ fclose(fd);
+}
- if(battery_level == 100 && charger == 1)
- {
- fprintf(fd, "%d", 1); // charge full
- charger = 0;
- }
- else
- {
- fprintf(fd, "%d", 0);
- }
- fclose(fd);
+int set_battery_data(void)
+{
+ int charger_online = 0;
+ int battery_level = 0;
- systemcall("/usr/bin/sys_event device_charge_chgdet");
+ battery_level = read_from_file(FILE_BATTERY_CAPACITY);
+ LOGINFO("battery level: %d", battery_level);
+ if (battery_level < 0)
+ return -1;
- fd = fopen(PATH_BATTERY_CHARGE_NOW, "w");
- if(!fd)
- {
- LOGERR("charge_now fopen fail");
- return -1;
- }
- fprintf(fd, "%d", charger);
- fclose(fd);
+ charger_online = read_from_file(FILE_BATTERY_CHARGER_ONLINE);
+ LOGINFO("charge_online: %d", charger_online);
+ if (charger_online < 0)
+ return -1;
- // because time based polling
- systemcall("/usr/bin/sys_event device_ta_chgdet");
- }
+ dbus_send_power_supply(battery_level, charger_online);
return 0;
}
-int parse_rssi_data(int len, char *buffer)
+#define PATH_JACK_EARJACK "/sys/devices/platform/jack/earjack_online"
+int parse_earjack_data(int len, char *buffer)
{
int len1=0;
char tmpbuf[255];
int x;
- char command[128];
- memset(command, '\0', sizeof(command));
+ FILE* fd;
LOGDEBUG("read data: %s", buffer);
x = atoi(tmpbuf);
- sprintf(command, "vconftool set -t int memory/telephony/rssi %d -i -f", x);
- systemcall(command);
+ fd = fopen(PATH_JACK_EARJACK, "w");
+ if(!fd)
+ {
+ LOGERR("earjack_online fopen fail");
+ return -1;
+ }
+ fprintf(fd, "%d", x);
+ fclose(fd);
+ // because time based polling
+ //FIXME: change to dbus
+ //system_cmd("/usr/bin/sys_event device_earjack_chgdet");
+ dbus_send_earjack(x);
return 0;
}
-#define PATH_JACK_EARJACK "/sys/devices/platform/jack/earjack_online"
-int parse_earjack_data(int len, char *buffer)
+#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;
- FILE* fd;
-
- LOGDEBUG("read data: %s", buffer);
+ #ifdef SENSOR_DEBUG
+ LOG("read data: %s", buffer);
+ #endif
// read param count
memset(tmpbuf, '\0', sizeof(tmpbuf));
len1 = parse_val(buffer+len, 0x0a, tmpbuf);
x = atoi(tmpbuf);
- fd = fopen(PATH_JACK_EARJACK, "w");
- if(!fd)
- {
- LOGERR("earjack_online fopen fail");
- return -1;
- }
- fprintf(fd, "%d", x);
- fclose(fd);
+ write_to_file(FILE_USB_ONLINE, x);
// because time based polling
- systemcall("/usr/bin/sys_event device_earjack_chgdet");
+ dbus_send_usb(x);
return 0;
}
-#define PATH_JACK_USB "/sys/devices/platform/jack/usb_online"
-int parse_usb_data(int len, char *buffer)
+
+int parse_rssi_data(int len, char *buffer)
{
int len1=0;
char tmpbuf[255];
int x;
- FILE* fd;
+ char command[128];
+ memset(command, '\0', sizeof(command));
- LOGDEBUG("read data: %s", buffer);
+ LOGINFO("read data: %s", buffer);
// read param count
memset(tmpbuf, '\0', sizeof(tmpbuf));
x = atoi(tmpbuf);
- fd = fopen(PATH_JACK_USB, "w");
- if(!fd)
- {
- LOGERR("usb_online fopen fail");
- return -1;
- }
- fprintf(fd, "%d", x);
- fclose(fd);
+ sprintf(command, "vconftool set -t int memory/telephony/rssi %d -i -f", x);
+ systemcall(command);
- // because time based polling
- systemcall("/usr/bin/sys_event device_usb_chgdet");
return 0;
}
-void device_parser(char *buffer)
+void setting_sensor(char *buffer)
{
int len = 0;
int ret = 0;
LOGERR("motion parse error!");
break;
case BATTERYLEVEL:
- ret = parse_batterylevel_data(len, buffer);
+ ret = set_battery_data();
if(ret < 0)
LOGERR("batterylevel parse error!");
break;
- case RSSI:
- ret = parse_rssi_data(len, buffer);
- if(ret < 0)
- LOGERR("rssi parse error!");
- break;
case EARJACK:
ret = parse_earjack_data(len, buffer);
if(ret < 0)
if(ret < 0)
LOGERR("usb parse error!");
break;
+ case RSSI:
+ ret = parse_rssi_data(len, buffer);
+ if(ret < 0)
+ LOGERR("rssi parse error!");
+ break;
default:
break;
}
}
-static int inline get_status(const char* filename)
-{
- int ret;
- int status = 0;
- FILE* fd = fopen(filename, "r");
- if(!fd)
- return -1;
-
- ret = fscanf(fd, "%d", &status);
- fclose(fd);
-
- if (ret < 0) {
- return ret;
- }
-
- return status;
-}
static int inline get_vconf_status(char* msg, const char* key, int buf_len)
{
return message;
}
-static void* setting_device(void* data)
+static void* getting_sensor(void* data)
{
pthread_detach(pthread_self());
param->ActionID = ijcmd->msg.action;
memcpy(param->type_cmd, ijcmd->cmd, ID_SIZE);
- if (pthread_create(&tid[2], NULL, setting_device, (void*)param) != 0)
+ if (pthread_create(&tid[TID_SENSOR], NULL, getting_sensor, (void*)param) != 0)
{
LOGERR("sensor pthread create fail!");
return;
else
{
if (ijcmd->data != NULL && strlen(ijcmd->data) > 0) {
- device_parser(ijcmd->data);
+ getting_sensor(ijcmd->data);
}
}
}