From: Jinhyung Choi Date: Mon, 16 Jun 2014 01:44:16 +0000 (+0900) Subject: sensors: added device data to provide driver & minor bug fixed. X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~344 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6dc69a8a4469435666db9ac844a49f3adea376ef;p=sdk%2Femulator%2Fqemu.git sensors: added device data to provide driver & minor bug fixed. - added null terminated string at the end of message parsing - light message type is fixed Change-Id: Ieec61e42272024b12b2453052c6757b9748062c3 Signed-off-by: Jinhyung Choi --- diff --git a/tizen/src/ecs/ecs_sensor.c b/tizen/src/ecs/ecs_sensor.c index e524c31115..4d82e7c1d9 100644 --- a/tizen/src/ecs/ecs_sensor.c +++ b/tizen/src/ecs/ecs_sensor.c @@ -75,6 +75,7 @@ static int get_parse_val (const char* buf, char* tmp) memset(tmp, 0, sizeof(TEMP_BUF_SIZE)); index = parse_val(buf, 0x0a, tmp); + tmp[index - 1] = 0; return index; } diff --git a/tizen/src/hw/maru_virtio_sensor.c b/tizen/src/hw/maru_virtio_sensor.c index 9dd2d4dacd..94fda1efb3 100644 --- a/tizen/src/hw/maru_virtio_sensor.c +++ b/tizen/src/hw/maru_virtio_sensor.c @@ -42,19 +42,35 @@ MULTI_DEBUG_CHANNEL(qemu, virtio-sensor); #define _MAX_BUF 1024 #define __MAX_BUF_SENSOR 32 +static pthread_mutex_t accel_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t geo_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t gyro_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t light_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t proxi_mutex = PTHREAD_MUTEX_INITIALIZER; + static char accel_xyz [__MAX_BUF_SENSOR] = {'0',',','9','8','0','6','6','5',',','0'}; +static int accel_enable = 0; +static int accel_delay = 200000000; static char geo_raw [__MAX_BUF_SENSOR] = {'0',' ','-','9','0',' ','0',' ','3'}; static char geo_tesla [__MAX_BUF_SENSOR] = {'1',' ','0',' ','-','1','0'}; +static int geo_enable = 0; +static int geo_delay = 200000000; static int gyro_x_raw = 0; static int gyro_y_raw = 0; static int gyro_z_raw = 0; +static int gyro_enable = 0; +static int gyro_delay = 200000000; static int light_adc = 65535; static int light_level = 10; +static int light_enable = 0; +static int light_delay = 200000000; static int proxi_vo = 8; +static int proxi_enable = 0; +static int proxi_delay = 200000000; VirtIOSENSOR* vsensor; static int sensor_capability = 0; @@ -136,37 +152,109 @@ static void __set_sensor_data (enum sensor_types type, char* data, int len) return; } + TRACE("set_sensor_data with type '%d' with data '%s'", type, data); + switch (type) { case sensor_type_accel: + pthread_mutex_lock(&accel_mutex); strcpy(accel_xyz, data); + pthread_mutex_unlock(&accel_mutex); + break; + case sensor_type_accel_enable: + pthread_mutex_lock(&accel_mutex); + sscanf(data, "%d", &accel_enable); + pthread_mutex_unlock(&accel_mutex); + break; + case sensor_type_accel_delay: + pthread_mutex_lock(&accel_mutex); + sscanf(data, "%d", &accel_delay); + pthread_mutex_unlock(&accel_mutex); + break; + case sensor_type_gyro_enable: + pthread_mutex_lock(&gyro_mutex); + sscanf(data, "%d", &gyro_enable); + pthread_mutex_unlock(&gyro_mutex); + break; + case sensor_type_gyro_delay: + pthread_mutex_lock(&gyro_mutex); + sscanf(data, "%d", &gyro_delay); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_x: + pthread_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_x_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_y: + pthread_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_y_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_z: + pthread_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_z_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro: + pthread_mutex_lock(&gyro_mutex); sscanf(data, "%d %d %d", &gyro_x_raw, &gyro_y_raw, &gyro_z_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_light_adc: + pthread_mutex_lock(&light_mutex); sscanf(data, "%d", &light_adc); light_level = (light_adc / 6554) % 10 + 1; + pthread_mutex_unlock(&light_mutex); break; case sensor_type_light_level: + pthread_mutex_lock(&light_mutex); sscanf(data, "%d", &light_level); + pthread_mutex_unlock(&light_mutex); + break; + case sensor_type_light_enable: + pthread_mutex_lock(&light_mutex); + sscanf(data, "%d", &light_enable); + pthread_mutex_unlock(&light_mutex); + break; + case sensor_type_light_delay: + pthread_mutex_lock(&light_mutex); + sscanf(data, "%d", &light_delay); + pthread_mutex_unlock(&light_mutex); break; case sensor_type_proxi: + pthread_mutex_lock(&proxi_mutex); sscanf(data, "%d", &proxi_vo); + pthread_mutex_unlock(&proxi_mutex); + break; + case sensor_type_proxi_enable: + pthread_mutex_lock(&proxi_mutex); + sscanf(data, "%d", &proxi_enable); + pthread_mutex_unlock(&proxi_mutex); + break; + case sensor_type_proxi_delay: + pthread_mutex_lock(&proxi_mutex); + sscanf(data, "%d", &proxi_delay); + pthread_mutex_unlock(&proxi_mutex); break; case sensor_type_mag: + pthread_mutex_lock(&geo_mutex); strcpy(geo_tesla, data); + pthread_mutex_unlock(&geo_mutex); break; case sensor_type_tilt: + pthread_mutex_lock(&geo_mutex); strcpy(geo_raw, data); + pthread_mutex_unlock(&geo_mutex); + break; + case sensor_type_geo_enable: + pthread_mutex_lock(&geo_mutex); + sscanf(data, "%d", &geo_enable); + pthread_mutex_unlock(&geo_mutex); + break; + case sensor_type_geo_delay: + pthread_mutex_lock(&geo_mutex); + sscanf(data, "%d", &geo_delay); + pthread_mutex_unlock(&geo_mutex); break; default: return; @@ -184,35 +272,105 @@ static void __get_sensor_data(enum sensor_types type, char* msg_info) sprintf(msg_info, "%d", sensor_capability); break; case sensor_type_accel: + pthread_mutex_lock(&accel_mutex); strcpy(msg_info, accel_xyz); + pthread_mutex_unlock(&accel_mutex); + break; + case sensor_type_accel_enable: + pthread_mutex_lock(&accel_mutex); + sprintf(msg_info, "%d", accel_enable); + pthread_mutex_unlock(&accel_mutex); + break; + case sensor_type_accel_delay: + pthread_mutex_lock(&accel_mutex); + sprintf(msg_info, "%d", accel_delay); + pthread_mutex_unlock(&accel_mutex); break; case sensor_type_mag: + pthread_mutex_lock(&geo_mutex); strcpy(msg_info, geo_tesla); + pthread_mutex_unlock(&geo_mutex); break; case sensor_type_tilt: + pthread_mutex_lock(&geo_mutex); strcpy(msg_info, geo_raw); + pthread_mutex_unlock(&geo_mutex); + break; + case sensor_type_geo_enable: + pthread_mutex_lock(&geo_mutex); + sprintf(msg_info, "%d", geo_enable); + pthread_mutex_unlock(&geo_mutex); + break; + case sensor_type_geo_delay: + pthread_mutex_lock(&geo_mutex); + sprintf(msg_info, "%d", geo_delay); + pthread_mutex_unlock(&geo_mutex); break; case sensor_type_gyro: - sprintf(msg_info, "%d, %d, %d", gyro_x_raw, gyro_y_raw, gyro_z_raw); + pthread_mutex_lock(&gyro_mutex); + sprintf(msg_info, "%d,%d,%d", gyro_x_raw, gyro_y_raw, gyro_z_raw); + pthread_mutex_unlock(&gyro_mutex); + break; + case sensor_type_gyro_enable: + pthread_mutex_lock(&gyro_mutex); + sprintf(msg_info, "%d", gyro_enable); + pthread_mutex_unlock(&gyro_mutex); + break; + case sensor_type_gyro_delay: + pthread_mutex_lock(&gyro_mutex); + sprintf(msg_info, "%d", gyro_delay); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_x: + pthread_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_x_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_y: + pthread_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_y_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_z: + pthread_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_z_raw); + pthread_mutex_unlock(&gyro_mutex); break; case sensor_type_light: case sensor_type_light_adc: + pthread_mutex_lock(&light_mutex); sprintf(msg_info, "%d", light_adc); + pthread_mutex_unlock(&light_mutex); break; case sensor_type_light_level: + pthread_mutex_lock(&light_mutex); sprintf(msg_info, "%d", light_level); + pthread_mutex_unlock(&light_mutex); + break; + case sensor_type_light_enable: + pthread_mutex_lock(&light_mutex); + sprintf(msg_info, "%d", light_enable); + pthread_mutex_unlock(&light_mutex); + break; + case sensor_type_light_delay: + pthread_mutex_lock(&light_mutex); + sprintf(msg_info, "%d", light_delay); + pthread_mutex_unlock(&light_mutex); break; case sensor_type_proxi: + pthread_mutex_lock(&proxi_mutex); sprintf(msg_info, "%d", proxi_vo); + pthread_mutex_unlock(&proxi_mutex); + break; + case sensor_type_proxi_enable: + pthread_mutex_lock(&proxi_mutex); + sprintf(msg_info, "%d", proxi_enable); + pthread_mutex_unlock(&proxi_mutex); + break; + case sensor_type_proxi_delay: + pthread_mutex_lock(&proxi_mutex); + sprintf(msg_info, "%d", proxi_delay); + pthread_mutex_unlock(&proxi_mutex); break; default: return; diff --git a/tizen/src/hw/maru_virtio_sensor.h b/tizen/src/hw/maru_virtio_sensor.h index 2370c6e98c..a66cefefdb 100644 --- a/tizen/src/hw/maru_virtio_sensor.h +++ b/tizen/src/hw/maru_virtio_sensor.h @@ -45,15 +45,25 @@ enum request_cmd { enum sensor_types { sensor_type_list = 0, sensor_type_accel, + sensor_type_accel_enable, + sensor_type_accel_delay, sensor_type_geo, + sensor_type_geo_enable, + sensor_type_geo_delay, sensor_type_gyro, + sensor_type_gyro_enable, + sensor_type_gyro_delay, sensor_type_gyro_x, sensor_type_gyro_y, sensor_type_gyro_z, sensor_type_light, + sensor_type_light_enable, + sensor_type_light_delay, sensor_type_light_adc, sensor_type_light_level, sensor_type_proxi, + sensor_type_proxi_enable, + sensor_type_proxi_delay, sensor_type_mag, sensor_type_tilt, sensor_type_max @@ -111,7 +121,7 @@ void req_sensor_data(enum sensor_types type, enum request_cmd req, char* data, i req_sensor_data(sensor_type_mag, request_get, NULL, 0); #define get_sensor_light() \ - req_sensor_data(sensor_type_light, request_get, NULL, 0); + req_sensor_data(sensor_type_light_adc, request_get, NULL, 0); #define get_sensor_proxi() \ req_sensor_data(sensor_type_proxi, request_get, NULL, 0);