- --- sensors.c 2010-02-02 13:21:25.000000000 +0100
- +++ sensors_.c 2010-02-02 13:21:06.000000000 +0100
- -137,53 +135,31 @@
- LOGD("using %s (name=%s,phys=%s)", devname, name, phys);
- break;
- }
- - close(fd);
- - fd = -1;
- - }
- - }
- - closedir(dir);
- - if(fd==-1) {
- - int status;
- - char buf[5] = {0x14,0,0,0,0};
- - int retries=10;
- -
- - fd=open("/dev/bma150", O_RDONLY);
- - if (fd < 0) {
- - LOGD("bma_open: bma150 open FAILED");
- - return fd;
- - }
- - 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
- - // BWIDTH: 25-750Hz digital, 1500Hz analog
- - buf[1] = (buf[1] & 0xe7) | (BMA_RANGE_2G << 3);
- - status = ioctl(fd, BMA_IOCTL_WRITE, buf);
- - if (status < 0) {
- - LOGE("bma_open: failed to write bwidth range: %d", status);
- - return status;
- - }
- + if (!strcmp(name, "bma150")) {
- + bzero(phys, 20);
- + ioctl(fd, EVIOCGPHYS(sizeof(phys)-1), &phys);
- axis_order[0]=-1;
- axis_order[1]=2;
- axis_order[2]=-3;
- parse_axis_order();
- + bma150=1;
- +
- + LOGD("using %s (name=%s,phys=%s)", devname, name, phys);
- + break;
- + }
- + close(fd);
- + fd = -1;
- + }
- }
- + closedir(dir);
- return fd;
- }
- int sFD=-1;
- int evdev_close(struct hw_device_t *dev) {
- #ifdef DEBUG
- - LOGE("called evdev_close");
- + LOGD("called evdev_close");
- #endif
- close(sFD);
- sFD=-1;
- -194,7 +170,7 @@
- native_handle_t *hdl=native_handle_create(1,0);
- hdl->data[0]=sFD;
- #ifdef DEBUG
- - LOGE("called open_data_source");
- + LOGD("called open_data_source");
- #endif
- return hdl;
- }
- -202,7 +178,7 @@
- int activated=0;
- int activate(struct sensors_control_device_t *dev, int handle, int enabled) {
- #ifdef DEBUG
- - LOGE("sensors activate handle=%d, enabled=%d", handle, enabled);
- + LOGD("sensors activate handle=%d, enabled=%d", handle, enabled);
- #endif
- if(enabled)
- activated|=1<<handle;
- -211,52 +187,31 @@
- enabled=!!( ( activated&(1<<SENSOR_TYPE_ACCELEROMETER)) |
- (activated&(1<<SENSOR_TYPE_ORIENTATION)));
- - if(bma150) {
- - char buf[8] = {0, 0, 0, 0, 0, 0, 0, 0};;
- - int status;
- - int mode;
- - int retries=20;
- - if (enabled)
- - mode = BMA_MODE_NORMAL;
- - else
- - mode = BMA_MODE_SLEEP;
- - buf[0] = mode;
- - do {
- - status = ioctl(sFD, BMA_IOCTL_SET_MODE, buf);
- - } while( status < 0 && retries-- > 0 );
- - if (status < 0) {
- - LOGE("activate: IGNORING error setting mode after %d retries (fd=%d, mode=%d, result=%d)", 20, sFD, mode, status);
- - return 0; //XXX: return status;
- - }
- - return 1;
- - }
- //TODO Change file path ?
- char *filename;
- asprintf(&filename, "/sys/class/i2c-adapter/i2c-0/%s/enable", phys+4);
- FILE *fd=fopen(filename, "w");
- free(filename);
- - if(!fd)
- + if(!fd) {
- + LOGD("sensors activate couldn't open %s\n", filename);
- return -1;
- + }
- fprintf(fd, "%d\n", enabled);
- fclose(fd);
- - LOGE("sensors activate returing 1");
- + LOGD("sensors activate returing 1");
- return 1;
- }
- int set_delay(struct sensors_control_device_t *dev, int32_t ms) {
- #ifdef DEBUG
- - LOGE("sensors set_delay(%d)", ms);
- + LOGD("sensors set_delay(%d)", ms);
- #endif
- if(ms==0) {
- //Stupid app ? ok ....
- ms=100;
- }
- - if(bma150) {
- - wait_time=ms;
- - return 1;
- - }
- char *filename;
- asprintf(&filename, "/sys/class/i2c-adapter/i2c-0/%s/rate", phys+4);
- FILE *fd=fopen(filename, "w");
- -270,21 +225,21 @@
- int wake(struct sensors_control_device_t *dev) {
- //Might need a core server
- #ifdef DEBUG
- - LOGE("called wake");
- + LOGD("called wake");
- #endif
- return 0;
- }
- int data_open(struct sensors_data_device_t *dev, native_handle_t* nh) {
- #ifdef DEBUG
- - LOGE("Called data_open");
- + LOGD("Called data_open");
- #endif
- return 0;
- }
- int data_close(struct sensors_data_device_t *dev, native_handle_t* nh) {
- #ifdef DEBUG
- - LOGE("Called data close");
- + LOGD("Called data close");
- #endif
- return 0;
- }
- -328,7 +283,7 @@
- }
- #define MS2 100.0//To be finely calibrated
- -double oldx=0,oldy=0,oldz=0,rawx=0,rawy=0,rawz=0;
- +double oldx=0,oldy=0,oldz=0,rawx=0,rawy=0,rawz=0,rawtemp=0;
- int state=0;
- int errcnt=0;
- int data_poll(struct sensors_data_device_t *dev, sensors_data_t* data) {
- -336,14 +291,16 @@
- int ret;
- double value;
- double dat[3];
- + static float temp=0;
- + static float gFactor = GRAVITY_EARTH * 2.0f / 512.0f;
- #ifdef DEBUG
- - LOGE("called data poll");
- + LOGD("called data poll");
- #endif
- data->time=time(NULL)*1000*1000*1000;
- if(state==1) {
- #ifdef DEBUG
- - LOGE("Got accel data, send orientation");
- + LOGD("Got accel data, send orientation");
- #endif
- state=2;
- data->sensor=SENSOR_TYPE_ORIENTATION;
- -359,17 +316,17 @@
- data->orientation.pitch=-data->orientation.pitch;
- data->orientation.roll=asin(oldx/value)*180.0/3.14159;
- #ifdef DEBUG
- - LOGE("Returing orientation %f,%f,%f\n", data->acceleration.x, data->acceleration.y, data->acceleration.z);
- + LOGD("Returing orientation %f,%f,%f\n", data->acceleration.x, data->acceleration.y, data->acceleration.z);
- #endif
- return SENSOR_TYPE_ORIENTATION;
- } else if(state==2) {
- #ifdef DEBUG
- - LOGE("Sent orientation, send light");
- + LOGD("Sent orientation, send light");
- #endif
- state=3;
- value=read_light();
- if(value<0) {
- - LOGE("Or not...");
- + LOGD("Or not...");
- return data_poll(dev, data);
- }
- data->sensor=SENSOR_TYPE_LIGHT;
- -377,55 +334,34 @@
- return SENSOR_TYPE_LIGHT;
- } else if(state==3) {
- #ifdef DEBUG
- - LOGE("Sent light, send proximity");
- + LOGD("Sent light, send proximity");
- #endif
- - state=0;
- + state=4;
- value=read_prox();
- if(value<0) {
- - LOGE("Or not...");
- + LOGD("Or not...");
- return data_poll(dev, data);
- }
- data->sensor=SENSOR_TYPE_PROXIMITY;
- data->distance=value;
- return SENSOR_TYPE_PROXIMITY;
- + } else if(state==4 && bma150) {
- +#ifdef DEBUG
- + LOGD("Sent temperature");
- +#endif
- + state=0;
- + data->sensor=SENSOR_TYPE_TEMPERATURE;
- + data->temperature=temp;
- +#ifdef DEBUG
- + LOGD("Returing temp %f\n", data->temperature);
- +#endif
- + return SENSOR_TYPE_TEMPERATURE;
- }
- + else state = 0;
- +
- if(sFD<0)
- sFD=open_input();
- - if(bma150) {
- - short accel[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- - int retries=20;
- - int status;
- - static float gFactor = 9.81 * 2.0f / 512.0f;
- -
- - //We should check for Delta t instead of waiting constant time.
- - usleep(wait_time*1000);
- - do {
- - 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;
- -
- - } else {
- int got=0;
- while(!got) {
- ret=read(sFD, &event, sizeof(event));
- -437,7 +373,7 @@
- if(ret<sizeof(event))//Hu ?
- continue;
- #ifdef DEBUG
- - LOGE("Got event type: %d/%d/%d", event.type, event.code, event.value);
- + LOGD("Got event type: %d/%d/%d", event.type, event.code, event.value);
- #endif
- switch(event.type) {
- case EV_SYN:
- -451,12 +387,21 @@
- rawy=event.value;
- if(event.code==ABS_Z)
- rawz=event.value;
- + if(event.code==EVENT_TYPE_TEMPERATURE)
- + rawtemp=event.value;
- break;
- default:
- - LOGE("Got unknown event type: %d/%d/%d", event.type, event.code, event.value);
- + LOGD("Got unknown event type: %d/%d/%d", event.type, event.code, event.value);
- break;
- };
- }
- + if(bma150) {
- + dat[0]=rawx*gFactor;
- + dat[1]=rawy*gFactor;
- + dat[2]=rawz*gFactor;
- + temp = -30.0 + (float)rawtemp/2;
- + }
- + else {
- dat[0]=rawx/MS2;
- dat[1]=rawy/MS2;
- dat[2]=rawz/MS2;
- -469,18 +414,18 @@
- data->acceleration.y=oldy;
- data->acceleration.z=oldz;
- #ifdef DEBUG
- - LOGE("Returing %f,%f,%f\n", data->acceleration.x, data->acceleration.y, data->acceleration.z);
- + LOGD("Returing %f,%f,%f\n", data->acceleration.x, data->acceleration.y, data->acceleration.z);
- #endif
- return SENSOR_TYPE_ACCELEROMETER;
- }
- int evdev_open(const struct hw_module_t* module, const char* id, struct hw_device_t** device) {
- #ifdef DEBUG
- - LOGE("evdev_open");
- + LOGD("evdev_open");
- #endif
- if(strcmp(id, SENSORS_HARDWARE_CONTROL)==0) {
- #ifdef DEBUG
- - LOGE("evdev_open hw ctl");
- + LOGD("evdev_open hw ctl");
- #endif
- struct sensors_control_device_t *dev;
- *device=malloc(sizeof(struct sensors_control_device_t));
- -501,12 +446,12 @@
- if(sFD<0)
- return -1;
- #ifdef DEBUG
- - LOGE("evdev_open hw ctl returning ok");
- + LOGD("evdev_open hw ctl returning ok");
- #endif
- return 1;
- } else if(strcmp(id, SENSORS_HARDWARE_DATA)==0) {
- #ifdef DEBUG
- - LOGE("evdev_open hw data");
- + LOGD("evdev_open hw data");
- #endif
- struct sensors_data_device_t *dev;
- *device=malloc(sizeof(struct sensors_data_device_t));
- -525,7 +470,7 @@
- if(sFD<0)
- return -1;
- #ifdef DEBUG
- - LOGE("evdev_open hw data returning ok");
- + LOGD("evdev_open hw data returning ok");
- #endif
- return 1;
- } else {