Untitled
By: a guest | Jan 29th, 2010 | Syntax:
None | Size: 2.28 KB | Hits: 21 | Expires: Never
--- /home/markus/linux-on-qualcomm-s-msm-android-hardware/sensors/sensors.c 2010-01-21 20:17:05.000000000 +0100
+++ sensors.c 2010-01-29 10:03:31.000000000 +0100
-141,14 +141,26 @@
fd = -1;
}
}
+ closedir(dir);
if(fd==-1) {
int status;
- char buf[5];
+ char buf[5] = {0x14,0,0,0,0};
+ int retries=10;
+
fd=open("/dev/bma150", O_RDONLY);
- if(fd==-1)
+ if (fd < 0) {
+ LOGD("bma_open: bma150 open FAILED");
return fd;
- buf[0]=0x14;
+ }
bma150=1;
+
+ status = ioctl(fd, BMA_IOCTL_INIT, buf);
+ status = ioctl(fd, BMA_IOCTL_READ, buf);
+ if (status < 0) {
+ LOGE("bma_open: failed to write bwidth range: %d", status);
+ return status;
+ }
+
// 2G = -2G .. 2G
// 4G = -4G .. 4G
// 8G = -8G .. 8G
-159,8 +171,12 @@
LOGE("bma_open: failed to write bwidth range: %d", status);
return status;
}
+ axis_order[0]=-1;
+ axis_order[1]=2;
+ axis_order[2]=-3;
+
+ parse_axis_order();
}
- closedir(dir);
return fd;
}
-196,7 +212,7 @@
enabled=!!( ( activated&(1<<SENSOR_TYPE_ACCELEROMETER)) |
(activated&(1<<SENSOR_TYPE_ORIENTATION)));
if(bma150) {
- char buf[8];
+ char buf[8] = {0, 0, 0, 0, 0, 0, 0, 0};;
int status;
int mode;
int retries=20;
-314,6 +330,7 @@
#define MS2 100.0//To be finely calibrated
double oldx=0,oldy=0,oldz=0,rawx=0,rawy=0,rawz=0;
int state=0;
+int errcnt=0;
int data_poll(struct sensors_data_device_t *dev, sensors_data_t* data) {
struct input_event event;
int ret;
-387,6 +404,23 @@
status = ioctl(sFD, BMA_IOCTL_READ_ACCELERATION, accel);
} while( status < 0 && retries-- > 0 );
+ if (status < 0) {
+ LOGE("Error polling for data after %d retries: %d, fd=%d", retries, status, sFD);
+ if(!errcnt) {
+ errcnt=1;
+ close(sFD);
+ sFD=-1;
+ return 0;
+ }
+ else {
+ PR_LN();
+ return -1;
+ }
+ } else {
+ errcnt=0;
+ LOGE("bma_open: BUFFER: %d:%d:%d", accel[0], accel[1], accel[2]);
+ }
+
dat[0]=accel[0]*gFactor;
dat[1]=accel[1]*gFactor;
dat[2]=accel[2]*gFactor;
-488,6 +522,8 @@
dev[0].poll=data_poll;
if(sFD<0)
sFD=open_input();
+ if(sFD<0)
+ return -1;
#ifdef DEBUG
LOGE("evdev_open hw data returning ok");
#endif