Commit f1f9969a27032bc0ff45439b459716fa646acbe0
- Diff rendering mode:
- inline
- side by side
sensors/sensors.c
(54 / 2)
|   | |||
| 49 | 49 | //#define DEBUG | |
| 50 | 50 | ||
| 51 | 51 | char phys[20]; | |
| 52 | int open_input() | ||
| 53 | { | ||
| 52 | char axis_order[3]; | ||
| 53 | |||
| 54 | void parse_axis_order() { | ||
| 55 | int fd=open("/proc/cmdline", O_RDONLY); | ||
| 56 | char buf[1024]; | ||
| 57 | char *ptr,*ptr2; | ||
| 58 | int i; | ||
| 59 | buf[1023]=0; | ||
| 60 | if(fd<0) | ||
| 61 | return; | ||
| 62 | if(read(fd, buf, 1023)<0) { | ||
| 63 | close(fd); | ||
| 64 | return; | ||
| 65 | } | ||
| 66 | ptr=strstr(buf, "gsensor_axis="); | ||
| 67 | if(!ptr) | ||
| 68 | return; | ||
| 69 | if(ptr!=buf) | ||
| 70 | if(ptr[-1]!=' ') | ||
| 71 | return; | ||
| 72 | ptr+=strlen("gesnsor_axis="); | ||
| 73 | |||
| 74 | for(i=0;i<3;++i) { | ||
| 75 | ptr2=index(ptr, ','); | ||
| 76 | if(!ptr2) | ||
| 77 | ptr2=index(ptr, ' '); | ||
| 78 | if(ptr2) | ||
| 79 | *ptr2=0; | ||
| 80 | axis_order[i]=atoi(ptr); | ||
| 81 | ptr=ptr2+1; | ||
| 82 | } | ||
| 83 | } | ||
| 84 | |||
| 85 | int open_input() { | ||
| 54 | 86 | /* scan all input drivers and look for "kionix-ksd9" */ | |
| 55 | 87 | int fd = -1; | |
| 56 | 88 | const char *dirname = "/dev/input"; | |
| … | … | ||
| 111 | 111 | if (!strcmp(name, "kionix-kxsd9")) { | |
| 112 | 112 | bzero(phys, 20); | |
| 113 | 113 | ioctl(fd, EVIOCGPHYS(sizeof(phys)-1), &phys); | |
| 114 | if(strcmp(phys, "i2c/0-0019")==0) { | ||
| 115 | axis_order[0]=-1; | ||
| 116 | axis_order[1]=-2; | ||
| 117 | axis_order[2]=3; | ||
| 118 | } else { | ||
| 119 | axis_order[0]=1; | ||
| 120 | axis_order[1]=-2; | ||
| 121 | axis_order[2]=3; | ||
| 122 | } | ||
| 123 | parse_axis_order(); | ||
| 114 | 124 | ||
| 125 | |||
| 115 | 126 | LOGD("using %s (name=%s,phys=%s)", devname, name, phys); | |
| 116 | 127 | break; | |
| 117 | 128 | } | |
| … | … | ||
| 287 | 287 | break; | |
| 288 | 288 | }; | |
| 289 | 289 | } | |
| 290 | double dat[3]; | ||
| 291 | dat[0]=oldx/MS2; | ||
| 292 | dat[1]=oldy/MS2; | ||
| 293 | dat[2]=oldz/MS2; | ||
| 294 | |||
| 295 | data->acceleration.x=(axis_order[0]>0) ? dat[axis_order[0]] : -dat[-axis_order[0]]; | ||
| 296 | data->acceleration.y=(axis_order[1]>0) ? dat[axis_order[1]] : -dat[-axis_order[1]]; | ||
| 297 | data->acceleration.z=(axis_order[2]>0) ? dat[axis_order[2]] : -dat[-axis_order[2]]; | ||
| 298 | |||
| 290 | 299 | //It seems blackstone's accelerometer is upside down. | |
| 291 | 300 | if(strcmp(phys, "i2c/0-0019")==0) { | |
| 292 | 301 | data->acceleration.x=-oldx/MS2; |

