}
#else
if (errno != EINTR && errno != EAGAIN) {
- LOG_SEVERE("write error: %d\n", errno);
+ if (errno != EPIPE) {
+ LOG_SEVERE("write error: %d\n", errno);
+ }
return -1;
}
#endif
MSG_ACT_NETBRIDGE = 123
};
+enum injector_level {
+ level_accel = 1,
+ level_proxi = 2,
+ level_light = 3,
+ level_gyro = 4,
+ level_geo = 5,
+ level_battery = 8,
+ level_earjack = 9,
+ level_usb= 10,
+ level_tilt = 12,
+ level_magnetic = 13,
+ level_pressure = 20,
+ level_uv = 21,
+ level_hrm = 22,
+ level_pedo = 23,
+};
+
typedef struct sbuf {
int _netlen;
int _use;
typedef unsigned char type_group;
typedef unsigned char type_action;
+int parse_val(const char *buff, unsigned char data, char *parsbuf);
+int get_parse_val(const char *buf, char *tmp);
void read_val_short(const char *data, unsigned short *ret_val);
void read_val_char(const char *data, unsigned char *ret_val);
MULTI_DEBUG_CHANNEL(qemu, ecs);
+int parse_val(const char *buff, unsigned char data, char *parsbuf)
+{
+ int count = 0;
+
+ while (1) {
+ if (count > 40) {
+ return -1;
+ }
+ if (buff[count] == data) {
+ count++;
+ strncpy(parsbuf, buff, count);
+ return count;
+ }
+ count++;
+ }
+
+ return 0;
+}
+
+int get_parse_val(const char *buf, char *tmp)
+{
+ int index = 0;
+
+ memset(tmp, 0, strlen(tmp));
+
+ index = parse_val(buf, 0x0a, tmp);
+ if (index > 1) {
+ tmp[index - 1] = 0;
+ }
+
+ return index;
+}
+
static void *build_master(ECS__Master *master, int *payloadsize)
{
int len_pack = ecs__master__get_packed_size(master);
free(status_msg);
}
+static void set_battery_data(int len, const char *data)
+{
+ char tmp[MAX_INJECTOR_REQ_DATA];
+ int id = 0, status = 0, level = 0;
+
+ /* remove item size */
+ len += get_parse_val(data + len, tmp);
+
+ /* id */
+ len += get_parse_val(data + len, tmp);
+ id = atoi(tmp);
+
+ /* status */
+ len += get_parse_val(data + len, tmp);
+ status = atoi(tmp);
+
+ if (id == 1) {
+ set_power_capacity(status);
+ if (status == 100) {
+ set_power_charge_full(1);
+ } else {
+ set_power_charge_full(0);
+ }
+ } else if (id == 2) {
+ level = get_power_capacity();
+ set_jack_charger(status);
+ if (level != 100 && status == 1) {
+ set_power_charge_now(1);
+ } else {
+ set_power_charge_now(0);
+ }
+ }
+}
+
+static void set_earjack_data(int len, const char *data)
+{
+ char tmpbuf[MAX_INJECTOR_REQ_DATA];
+ int x;
+
+ len += get_parse_val(data + len, tmpbuf);
+ len += get_parse_val(data + len, tmpbuf);
+
+ x = atoi(tmpbuf);
+
+ set_jack_earjack(x);
+}
+
+static void set_usb_data(int len, const char *data)
+{
+ char tmpbuf[MAX_INJECTOR_REQ_DATA];
+ int x;
+
+ len += get_parse_val(data + len, tmpbuf);
+ len += get_parse_val(data + len, tmpbuf);
+
+ x = atoi(tmpbuf);
+
+ set_jack_usb(x);
+}
+
+static void ecs_device_set_injector_data(const char *data)
+{
+ char tmpbuf[MAX_INJECTOR_REQ_DATA];
+ int len = get_parse_val(data, tmpbuf);
+
+ switch (atoi(tmpbuf)) {
+ case level_battery:
+ set_battery_data(len, data);
+ break;
+ case level_earjack:
+ set_earjack_data(len, data);
+ break;
+ case level_usb:
+ set_usb_data(len, data);
+ break;
+ default:
+ break;
+ }
+}
+
static bool injector_req_sensor(ECS_Client *ccli, ECS__InjectorReq *msg, char *cmd)
{
char data[MAX_INJECTOR_REQ_DATA];
return true;
} else if (msg->data.data && msg->data.len > 0) {
ecs_sensor_set_injector_data((char *) msg->data.data);
+ ecs_device_set_injector_data((char *) msg->data.data);
return injector_send(ccli, msg, cmd);
}
MULTI_DEBUG_CHANNEL(qemu, ecs);
#define TEMP_BUF_SIZE 255
-#define MAX_VAL_LENGTH 40
#define ACCEL_MAX 1961330
#define SENSOR_ANGLE_MIN 0
#define SENSOR_ANGLE_MAX 360
-static int parse_val(const char *buff, unsigned char data, char *parsbuf)
-{
- int count = 0;
-
- while (1) {
- if (count > MAX_VAL_LENGTH) {
- return -1;
- }
- if (buff[count] == data) {
- count++;
- strncpy(parsbuf, buff, count);
- return count;
- }
- count++;
- }
-
- return 0;
-}
-
-static int get_parse_val(const char *buf, char *tmp)
-{
- int index = 0;
-
- memset(tmp, 0, strlen(tmp));
-
- index = parse_val(buf, 0x0a, tmp);
- tmp[index - 1] = 0;
-
- return index;
-}
-
int accel_min_max(double value)
{
int result = (int)value;
set_sensor_pedo(tmp, strlen(tmp));
}
-static void set_battery_data(int len, const char *data)
-{
- char tmp[TEMP_BUF_SIZE];
- int id = 0, status = 0, level = 0;
-
- /* remove item size */
- len += get_parse_val(data + len, tmp);
-
- /* id */
- len += get_parse_val(data + len, tmp);
- id = atoi(tmp);
-
- /* status */
- len += get_parse_val(data + len, tmp);
- status = atoi(tmp);
-
- if (id == 1) {
- set_power_capacity(status);
- if (status == 100) {
- set_power_charge_full(1);
- } else {
- set_power_charge_full(0);
- }
- } else if (id == 2) {
- level = get_power_capacity();
- set_jack_charger(status);
- if (level != 100 && status == 1) {
- set_power_charge_now(1);
- } else {
- set_power_charge_now(0);
- }
- }
-}
-
void ecs_sensor_set_injector_data(const char *data)
{
char tmpbuf[TEMP_BUF_SIZE];
case level_geo:
_req_set_sensor_geo(len, data);
break;
- case level_battery:
- set_battery_data(len, data);
- break;
case level_tilt:
_req_set_sensor_tilt(len, data);
break;
#ifndef __ECS_SENSOR_H__
#define __ECS_SENSOR_H__
-enum injector_level {
- level_accel = 1,
- level_proxi = 2,
- level_light = 3,
- level_gyro = 4,
- level_geo = 5,
- level_battery = 8,
- level_tilt = 12,
- level_magnetic = 13,
- level_pressure = 20,
- level_uv = 21,
- level_hrm = 22,
- level_pedo = 23,
-};
-
/* skin rotation request */
int accel_min_max(double value);
#if defined(CONFIG_QT)
send_to_sdb_client(client, runstate_check(RUN_STATE_SUSPENDED));
}
-static int parse_val(char* buff, unsigned char data, char* parsbuf)
-{
- int count = 0;
-
- while (1) {
- if (count > 12) {
- return -1;
- }
-
- if (buff[count] == data) {
- count++;
- strncpy(parsbuf, buff, count);
- return count;
- }
-
- count++;
- }
-
- return 0;
-}
-
#define SDB_SERVER_PORT 26097
static void register_sdb_server(char* readbuf, struct sockaddr_in* client_addr)
{