hi all,
I refered to the sensors_qemu.c and the htc_sensors.c to write own
sensor hardware module.
but mine doesn't work well...
it always stuck inside the while(1) in the data__poll() {...} can't get
out...
below is part of my data__poll()
SensorData* data = (void*)dev;
int i, fds[MAX_NUM_SENSORS];
uint32_t new_sensors = 0;
/* the pick_sensor(...) is same as the sensors_qemu.c */
if (data->pendingSensors) {
return pick_sensor(data, values);
}
for (i = 0; i < MAX_NUM_SENSORS; i++) fds[i] = data->event_fds[i];
while (1) {
int ret, val;
list302dl_data lis_data;
char magnetic_data[5];
if (gactive_sensors | ID_TEMPERATURE) {
ret = ioctl(fds[ID_TEMPERATURE],
SCP1000_READ_TEMPERATURE, &val);
if (ret >= 0) {
new_sensors |= ID_TEMPERATURE;
data->sensors[ID_TEMPERATURE].temperature = (float)val / 20.0;
} else {
data->sensors[ID_TEMPERATURE].temperature = 0;
}
}
...other sensor type
if (android_atomic_swap(0x0, &gwake) == 0x1) {
return 0x7FFFFFFF;
}
if (new_sensors) {
data->pendingSensors = new_sensors;
int64_t t = data__now_ns();
while (new_sensors) {
uint32_t i = 31 - __builtin_clz(new_sensors);
new_sensors &= ~(1<<i);
data->sensors[i].time = t;
}
return pick_sensor(data, values);
}
}
and, below is my control_wake function
static int
control__wake(struct sensors_control_device_t *dev)
{
android_atomic_write(0x1, &gwake);
return 0;
}
and, below is my control__open_data_source function
static native_handle_t*
control__open_data_source(struct sensors_control_device_t *dev)
{
SensorControl* ctl = (void*)dev;
native_handle_t* handle;
handle = native_handle_create(MAX_NUM_SENSORS, 0);
handle->data[ID_TEMPERATURE] = open(SCP1000D11PATH, O_RDONLY);
handle->data[ID_PRESSURE] = handle->data[0];
handle->data[ID_MAGNETIC_FIELD] = open(AKMPATH, O_RDONLY);
handle->data[ID_ACCELERATION] = open(GSENSORPATH, O_RDONLY);
return handle;
}
I need some advance, please ~ thanks.
--
Regards
Y-C Wang
--
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting