#include "description.h"
#include "control.h"
#include "calibration.h"
+#include "filtering.h"
/*
* This table maps syfs entries in scan_elements directories to sensor types,
*/
sensor_desc[s].requiredPermission = "";
sensor_desc[s].flags = sensor_get_flags(s);
+ sensor_desc[s].minDelay = sensor_get_min_delay(s);
sensor_desc[s].maxDelay = sensor_get_max_delay(s);
+ ALOGI("Sensor %d (%s) type(%d) minD(%ld) maxD(%ld) flags(%2.2x)\n",
+ s, sensor_info[s].friendly_name, sensor_desc[s].type,
+ sensor_desc[s].minDelay, sensor_desc[s].maxDelay, sensor_desc[s].flags);
+
+ /* We currently do not implement batching when we'll so
+ * these should be overriden appropriately
+ */
+ sensor_desc[s].fifoReservedEventCount = 0;
+ sensor_desc[s].fifoMaxEventCount = 0;
if (sensor_info[s].internal_name[0] == '\0') {
/*
sensor_type == SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) {
struct gyro_cal* calibration_data = calloc(1, sizeof(struct gyro_cal));
sensor_info[s].cal_data = calibration_data;
+ struct filter* f_data = (struct filter*) calloc(1, sizeof(struct filter));
+ f_data->x_buff = (struct circ_buff*) calloc(1, sizeof (struct circ_buff));
+ f_data->y_buff = (struct circ_buff*) calloc(1, sizeof (struct circ_buff));
+ f_data->z_buff = (struct circ_buff*) calloc(1, sizeof (struct circ_buff));
+ f_data->x_buff->buff = (float*)calloc(SAMPLE_SIZE, sizeof(float));
+ f_data->y_buff->buff = (float*)calloc(SAMPLE_SIZE, sizeof(float));
+ f_data->z_buff->buff = (float*)calloc(SAMPLE_SIZE, sizeof(float));
+ f_data->x_buff->size = SAMPLE_SIZE;
+ f_data->y_buff->size = SAMPLE_SIZE;
+ f_data->z_buff->size = SAMPLE_SIZE;
+ sensor_info[s].filter = f_data;
}
if (sensor_type == SENSOR_TYPE_MAGNETIC_FIELD) {
unsigned int dev_num;
int i, c;
unsigned int is_poll_sensor;
+ char buf[MAX_NAME_SIZE];
int cal_idx = 0;
int uncal_idx = 0;
strncpy(sensor_info[uncal_idx].motion_trigger_name,
sensor_info[cal_idx].motion_trigger_name,
MAX_NAME_SIZE);
+
+ /* Add "Uncalibrated " prefix to sensor name */
+ strcpy(buf, sensor_info[cal_idx].friendly_name);
+ snprintf(sensor_info[uncal_idx].friendly_name,
+ MAX_NAME_SIZE,
+ "%s %s", "Uncalibrated", buf);
break;
}
}
for (i = 0; i < sensor_count; i++)
switch (sensor_catalog[sensor_info[i].catalog_index].type) {
case SENSOR_TYPE_MAGNETIC_FIELD:
+ if (sensor_info[i].cal_data != NULL) {
+ free(sensor_info[i].cal_data);
+ sensor_info[i].cal_data = NULL;
+ sensor_info[i].cal_level = 0;
+ }
+ break;
case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED:
case SENSOR_TYPE_GYROSCOPE:
if (sensor_info[i].cal_data != NULL) {
sensor_info[i].cal_level = 0;
}
break;
+ if (sensor_info[i].filter != NULL) {
+ free(((struct filter*)sensor_info[i].filter)->x_buff->buff);
+ free(((struct filter*)sensor_info[i].filter)->y_buff->buff);
+ free(((struct filter*)sensor_info[i].filter)->z_buff->buff);
+ free(((struct filter*)sensor_info[i].filter)->x_buff);
+ free(((struct filter*)sensor_info[i].filter)->y_buff);
+ free(((struct filter*)sensor_info[i].filter)->z_buff);
+ free(sensor_info[i].filter);
+ sensor_info[i].filter = NULL;
+ }
default:
break;
}