static int aac_sensor_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos) { struct sensor_device *dev; //sensors_vec_t vec[ID_MAX]; int x=0,y=0,z=0,temp; char data[255],*curr; char bit; int event; int result; dev=&sensor_priv; event=wait_for_completion_timeout(&dev->data_comp,get_poll_time()); result = aac_sensor_query(dev,event); //get new data down(&sensor_data_mutex); curr=data; if(result == 0){ if(event){ bit=GET_BITS(dev->values[MMA_TILT],MMA_TILT_ALERT); if(!bit){ bit=GET_BITS(dev->values[3],MMA_TILT_POLA); // board e2 #if defined(CONFIG_BOARD_E2) if(bit==POLA_LEFT){ x=180; }else if(bit==POLA_RIGHT){ x=0; }else if(bit==POLA_UP){ x=270; }else if(bit==POLA_DOWN){ x=90; }else{ event=0; } #endif //board 3e #if defined(CONFIG_BOARD_E3) if(bit==POLA_LEFT){ x=0; }else if(bit==POLA_RIGHT){ x=180; }else if(bit==POLA_UP){ x=270; }else if(bit==POLA_DOWN){ x=90; }else{ event=0; } #endif //board g0 #if defined(CONFIG_BOARD_G0)||defined(CONFIG_BOARD_G0_3G) if(bit==POLA_LEFT){ x=90; }else if(bit==POLA_RIGHT){ x=270; }else if(bit==POLA_UP){ x=180; }else if(bit==POLA_DOWN){ x=0; }else{ event=0; } #endif //board h0 #if defined(CONFIG_BOARD_H0) if(bit==POLA_LEFT){ x=180; }else if(bit==POLA_RIGHT){ x=0; }else if(bit==POLA_UP){ x=90; }else if(bit==POLA_DOWN){ x=270; }else{ event=0; } #endif //board i0 #if defined(CONFIG_BOARD_I0)||defined(CONFIG_BOARD_K0) if(bit==POLA_LEFT){ x=270; }else if(bit==POLA_RIGHT){ x=90; }else if(bit==POLA_UP){ x=0; }else if(bit==POLA_DOWN){ x=180; }else{ event=0; } #endif //board j0 #if defined(CONFIG_BOARD_J0)||defined(CONFIG_BOARD_L0) if(bit==POLA_LEFT){ x=270; }else if(bit==POLA_RIGHT){ x=90; }else if(bit==POLA_UP){ x=180; }else if(bit==POLA_DOWN){ x=0; }else{ event=0; } #endif if(x==dev->orientation){ event=0; }else{ dev->orientation=x; } }else{ event=0; } } //ID_ACCELERATION if(event==0){ x=dev->axis[0]; y=dev->axis[1]; z=dev->axis[2]; //board e2 #if defined(CONFIG_BOARD_E2) temp=x; x=y;y=temp;z=-z; #endif //board e3 #if defined(CONFIG_BOARD_E3) temp=x; x=x;y=y;z=-z; #endif // board g0 #if defined(CONFIG_BOARD_G0)||defined(CONFIG_BOARD_G0_3G) temp=x; x=y;y=temp;z=-z; #endif // board h0 #if defined(CONFIG_BOARD_H0) temp=x; x=y;y=temp;z=-z; #endif #if defined(CONFIG_BOARD_I0)||defined(CONFIG_BOARD_K0) temp=x; x=y;y=temp;z=-z; #endif #if defined(CONFIG_BOARD_J0)||defined(CONFIG_BOARD_L0) temp=x; x=y;y=-temp;z=-z; #endif sprintf(curr,"%s:%d:%d:%d ", SENSER_NAME_AAC, x,y,z); curr+=strlen(curr); //ID_ORIENTATION }else { y=z=0; sprintf(curr,"%s:%d:%d:%d ", SENSER_NAME_ORI, x,y,z); curr+=strlen(curr); } if(event){ sensor_debug("event %d x=%d y=%d z=%d\n",event,x,y,z); sensor_debug("read data: %s (%d) x %d y %d z %d filt 0x%x status 0x%x\n",data,count, dev->axis[0],dev->axis[1],dev->axis[2], dev->values[MMA_TILT], dev->values[MMA_INTSU]); } } //time sprintf(curr,"sync:%lld", time_to_ns()); count=strlen(data); up(&sensor_data_mutex); if (copy_to_user(buf, data, count)) { return -EFAULT; } return count; }
uint64_t odp_time_to_ns(odp_time_t time) { return time_to_ns(time); }