1、驱动文件RANGE:
(1)
/*
Range: unit(ug 1g=1 000 000 ug)
option(2g,4g,8g)
G would be defined on android HAL
Precision: bit wide of valid data
Boundary: Max positive count
Gravity_step: gravity value indicated by per count
*/
#define FREAD_MASK 0 /* enabled(1<<1) only if reading MSB 8bits*/
#define MMA845X_RANGE 2000000
/* mma8452 */
#define MMA8452_PRECISION 12
#define MMA8452_BOUNDARY (0x1 << (MMA8452_PRECISION - 1))
#define MMA8452_GRAVITY_STEP MMA845X_RANGE / MMA8452_BOUNDARY
(2)
result = ((int)high_byte << (MMA8452_PRECISION-8)) | ((int)low_byte >> (16-MMA8452_PRECISION)); //合并数据
if (result < MMA8452_BOUNDARY) //判断符号
result = result* MMA8452_GRAVITY_STEP;
else
result = ~( ((~result & (0x7fff>>(16-MMA8452_PRECISION)) ) + 1) * MMA8452_GRAVITY_STEP) + 1;
(1)MMA IOCTL (mma8452.h )
#define MMAIO 0xA1
/* IOCTLs for MMA8452 library */
#define ECS_IOCTL_INIT _IO(MMAIO, 0x01)
// #define ECS_IOCTL_RESET _IO(MMAIO, 0x04)
#define ECS_IOCTL_CLOSE _IO(MMAIO, 0x02)
#define ECS_IOCTL_START _IO(MMAIO, 0x03)
// #define ECS_IOCTL_GETDATA _IOR(MMAIO, 0x08, char[RBUFF_SIZE+1])
/* IOCTLs for APPs */
#define ECS_IOCTL_APP_SET_RATE _IOW(MMAIO, 0x10, char)
(2)(nusensors.h)
#define ACCELERATION_RATIO_ANDROID_TO_HW (9.80665f / 1000000)
(3)(MmaSensor.c