Send average value of current 10 data
authorjunkyu han <junkyu.han@samsung.com>
Thu, 11 Jan 2018 08:29:54 +0000 (17:29 +0900)
committerjunkyu han <junkyu.han@samsung.com>
Thu, 11 Jan 2018 11:43:00 +0000 (20:43 +0900)
src/resource_accelerometer.c

index 4a8a885..f7f476e 100644 (file)
 #include "view.h"
 #include "log.h"
 
+#define AVERAGE_COUNT 11
+#define BASE_VALUE 100
+
 static void __finalize(void);
 static void __start_sensing(void);
 static void __stop_sensing(void);
+static void __initialize_average_value_info();
 static void __sensor_value_changed_cb(sensor_h sensor, sensor_event_s *event, void *data);
 
+typedef struct _average_value_info {
+       int servo[11];
+       int speed[11];
+       int servo_sum;
+       int speed_sum;
+       int front;
+       bool ready_to_send;
+} average_value_info;
+
 static struct __accel_info_s {
        resource_info *sensor_info;
+       average_value_info avr_val;
 } accel_info = {
        .sensor_info = NULL,
+       .avr_val = { 0, },
 };
 
 resource_info *resource_accelerometer_init_sensor(resource_info *sensor_info)
@@ -120,16 +135,40 @@ static void __finalize(void)
        }
 
        resource_info_free(accel_info.sensor_info);
+       __initialize_average_value_info();
 }
 
 static void __sensor_value_changed_cb(sensor_h sensor, sensor_event_s *event, void *data)
 {
        _D("Time: [%llu], X: [%f], Y: [%f]", event->timestamp, event->values[0], event->values[1]);
 
+       accel_info.avr_val.servo_sum -= accel_info.avr_val.servo[accel_info.avr_val.front];
+       accel_info.avr_val.speed_sum -= accel_info.avr_val.speed[accel_info.avr_val.front];
+
+       accel_info.avr_val.servo[accel_info.avr_val.front] = event->values[0] * -BASE_VALUE;
+       accel_info.avr_val.speed[accel_info.avr_val.front] = event->values[1] * -BASE_VALUE;
+
+       accel_info.avr_val.servo_sum += accel_info.avr_val.servo[accel_info.avr_val.front];
+       accel_info.avr_val.speed_sum += accel_info.avr_val.speed[accel_info.avr_val.front];
+
+       accel_info.avr_val.front++;
+
+       if (accel_info.avr_val.front >= AVERAGE_COUNT)
+               accel_info.avr_val.ready_to_send = 1;
+
+       if (accel_info.avr_val.front % AVERAGE_COUNT == 0) {
+               accel_info.avr_val.front = 1;
+       }
+
+       if (!accel_info.avr_val.ready_to_send)
+               return;
+
        commu_data_s temp = { NULL, NULL };
 
-       temp.servo = event->values[0] * -100;
-       temp.speed = event->values[1] * -100;
+       temp.servo = accel_info.avr_val.servo_sum / 10;
+       temp.speed = accel_info.avr_val.speed_sum / 10;
+
+       _D("AVERAGE --- Time: [%llu], Servo: [%d], Speed: [%d]", event->timestamp, temp.servo, temp.speed);
 
        view_update_view_with_data((void *)&temp);
        communication_center_send_data((void *)&temp);
@@ -146,6 +185,11 @@ static void __start_sensing(void)
        }
 }
 
+static void __initialize_average_value_info(void)
+{
+       memset(&(accel_info.avr_val), 0, sizeof(accel_info.avr_val));
+}
+
 static void __stop_sensing(void)
 {
        int ret = 0;
@@ -163,5 +207,6 @@ static void __stop_sensing(void)
 
        view_update_view_with_data((void *)&temp);
        communication_center_send_data((void *)&temp);
+       __initialize_average_value_info();
 }