Hi,
I am using a a custom board which is similar to blaze but uses omap 4460 processor.I am using ICS on my custom board.There was no HAL for gyroscope so i wrote my own HAL but i am not getting any values for X Y and Z.Below is the code i wrote.The driver works fine.
Following is my HAL code:#include <fcntl.h>#include <errno.h>#include <math.h>#include <poll.h>#include <unistd.h>#include <dirent.h>#include <sys/select.h>#include <cutils/log.h>#include "ewtsa.h"#define FETCH_FULL_EVENT_BEFORE_RETURN 0/*****************************************************************************/ewtsaSensor::ewtsaSensor() : SensorBase(NULL, "ewtsa"), mEnabled(0), mInputReader(4), mHasPendingEvent(false){ mPendingEvent.version = sizeof(sensors_event_t); mPendingEvent.sensor = ID_GY; mPendingEvent.type = SENSOR_TYPE_GYROSCOPE; memset(mPendingEvent.data, 0, sizeof(mPendingEvent.data)); if (data_fd) { strcpy(input_sysfs_path, "/sys/bus/i2c/drivers/ewtsa/4-0068/"); input_sysfs_path_len = strlen(input_sysfs_path); } }ewtsaSensor::~ewtsaSensor() { if (mEnabled) { enable(0, 0); }}int ewtsaSensor::setInitialState() { struct input_absinfo absinfo_x; struct input_absinfo absinfo_y; struct input_absinfo absinfo_z; float value; if (!ioctl(data_fd, EVIOCGABS(EVENT_TYPE_GYRO_X), &absinfo_x) && !ioctl(data_fd, EVIOCGABS(EVENT_TYPE_GYRO_X), &absinfo_y) && !ioctl(data_fd, EVIOCGABS(EVENT_TYPE_GYRO_X), &absinfo_z)) { value = absinfo_x.value; mPendingEvent.data[0] = value * CONVERT_GYRO_X; value = absinfo_x.value; mPendingEvent.data[1] = value * CONVERT_GYRO_Y; value = absinfo_x.value; mPendingEvent.data[2] = value * CONVERT_GYRO_Z; mHasPendingEvent = true; } return 0;}int ewtsaSensor::enable(int32_t, int en) { int flags = en ? 1 : 0; if (flags != mEnabled) { int fd; strcpy(&input_sysfs_path[input_sysfs_path_len],"enable"); fd = open(input_sysfs_path, O_RDWR); if (fd >= 0) { char buf[2]; int err;buf[1] = 0; if (flags) { buf[0] = '1'; } else { buf[0] = '0'; } err = write(fd, buf, sizeof(buf)); close(fd); mEnabled = flags; setInitialState(); return 0; } return -1; } return 0;} 63,1 43%bool ewtsaSensor::hasPendingEvents() const { return mHasPendingEvent;}int ewtsaSensor::setDelay(int32_t handle, int64_t delay_ns){ int fd; strcpy(&input_sysfs_path[input_sysfs_path_len], "delay"); fd = open(input_sysfs_path, O_RDWR); if (fd >= 0) { char buf[80]; int32_t delay_ms = (int32_t)delay_ns/1000000; sprintf(buf, "%d", delay_ms); write(fd, buf, strlen(buf)+1); close(fd); return 0; } return -1;}int ewtsaSensor::readEvents(sensors_event_t* data, int count){ if (count < 1) return -EINVAL; if (mHasPendingEvent) { mHasPendingEvent = false; mPendingEvent.timestamp = getTimestamp(); *data = mPendingEvent; return mEnabled ? 1 : 0; } ssize_t n = mInputReader.fill(data_fd); if (n < 0) return n; int numEventReceived = 0; input_event const* event;#if FETCH_FULL_EVENT_BEFORE_RETURNagain:#endif while (count && mInputReader.readEvent(&event)) { int type = event->type; if (type == EV_REL) { float value = event->value; if (event->code == EVENT_TYPE_GYRO_X) { mPendingEvent.data[0] = value * CONVERT_GYRO_X; } else if (event->code == EVENT_TYPE_GYRO_Y) { mPendingEvent.data[1] = value * CONVERT_GYRO_Y; } else if (event->code == EVENT_TYPE_GYRO_Z) { mPendingEvent.data[2] = value * CONVERT_GYRO_Z; } } else if (type == EV_SYN) { mPendingEvent.timestamp = timevalToNano(event->time); if (mEnabled) { *data++ = mPendingEvent; count--; numEventReceived++; } } else { LOGE("ewtsa: unknown event (type=%d, code=%d)", type, event->code); } mInputReader.next(); }#if FETCH_FULL_EVENT_BEFORE_RETURN 167,1 91% try again instead of returning with nothing and redoing poll. */ if (numEventReceived == 0 && mEnabled == 1) { n = mInputReader.fill(data_fd); if (n) goto again; }#endif return numEventReceived;} 179,0-1 BotPlease tell me what change I have to do hereThanks
Haran
Haran;
Could you check that android.hardware.sensor.gyroscope.xml is in /system/etc/permissions/?
this file is referenced from ./mydroid/device/ti/blaze_tablet/device.mk as PRODUCT_COPY_FILES and it is needed to get access to Gyroscope HW.
see next post
http://e2e.ti.com/support/omap/f/849/t/185611.aspx
Hi Manuel,
This permission is already there.
Now the data is coming but its not changing.(driver side is working properly).
What next ????
Abhijit
Abhijit,
Can you provide more information about your use case?
1. What application are you using to test sensor changes?
2. What changes have you made so far?
3. How is being sensor open?
Manuel,
Gyroscope is working fine on my custom board.
I was using Sensortest application provided by TI.
Problem was in HAL code.
Thanks for your support