#ifndef _GSENSOR_H_ #define _GSENSOR_H_ #include "kwrap/ioctl.h" #if defined __FREERTOS #define GSEN_OPEN(...) 0 #define GSEN_IOCTL gsen_ioctl #define GSEN_CLOSE(...) #endif #if defined __LINUX #define GSEN_OPEN open #define GSEN_IOCTL ioctl #define GSEN_CLOSE close #endif #define IOC_GSENSOR_PARKING_MODE _VOS_IOW('w', 8, unsigned int) #define IOC_GSENSOR_PARKING_SENSITIVITY _VOS_IOW('w', 9, unsigned int) #if defined(__FREERTOS) int gsen_ioctl (int fd, unsigned int cmd, unsigned long arg); #endif // for axis data typedef enum { GSENSOR_AXIS_X, GSENSOR_AXIS_Y, GSENSOR_AXIS_Z, ENUM_DUMMY4WORD(GSENSOR_AXIS) } GSENSOR_AXIS; // for get status typedef enum { GSENSOR_ORIENT_0, GSENSOR_ORIENT_90, GSENSOR_ORIENT_180, GSENSOR_ORIENT_270, ENUM_DUMMY4WORD(GSENSOR_ORIENT) } GSENSOR_ORIENT; typedef enum { GSENSOR_SHAKE_LEFT, GSENSOR_SHAKE_RIGHT, ENUM_DUMMY4WORD(GSENSOR_SHAKE) } GSENSOR_SHAKE; typedef enum { GSENSOR_SENSITIVITY_BEGIN = 0, GSENSOR_SENSITIVITY_OFF = GSENSOR_SENSITIVITY_BEGIN, GSENSOR_SENSITIVITY_LOW, GSENSOR_SENSITIVITY_MED, GSENSOR_SENSITIVITY_HIGH, GSENSOR_SENSITIVITY_END = GSENSOR_SENSITIVITY_HIGH, GSENSOR_SENSITIVITY_PARKING_BEGIN = 100, GSENSOR_SENSITIVITY_PARKING_OFF = GSENSOR_SENSITIVITY_PARKING_BEGIN, GSENSOR_SENSITIVITY_PARKING_LOW, GSENSOR_SENSITIVITY_PARKING_MED, GSENSOR_SENSITIVITY_PARKING_HIGH, GSENSOR_SENSITIVITY_PARKING_END = GSENSOR_SENSITIVITY_PARKING_HIGH, ENUM_DUMMY4WORD(GSENSOR_SENSITIVITY) } GSENSOR_SENSITIVITY; typedef struct { UINT32 Xacc; UINT32 Yacc; UINT32 Zacc; } AXIS_DATA; typedef struct { AXIS_DATA Axis; GSENSOR_ORIENT Ori; GSENSOR_SHAKE SH; UINT32 Dev; UINT32 ShakeState; } Gsensor_Data, *pGsensor_Data; #if 0 #include "i2c.h" typedef enum { GSENSOR_I2C_REGISTER_1BYTE = 1, GSENSOR_I2C_REGISTER_2BYTE = 2, ENUM_DUMMY4WORD(GSENSOR_I2C_REGISTER_BYTES) } GSENSOR_I2C_REGISTER_BYTES, *PGSENSOR_I2C_REGISTER_BYTES; typedef struct { I2C_SESSION I2C_Channel; GSENSOR_I2C_REGISTER_BYTES I2C_RegBytes; I2C_PINMUX I2C_PinMux; I2C_BUS_CLOCK I2C_BusClock; UINT32 I2C_Slave_WAddr; UINT32 I2C_Slave_RAddr; } GSENSOR_INFO,*PGSENSOR_INFO; // for axis data typedef enum { GSENSOR_AXIS_X, GSENSOR_AXIS_Y, GSENSOR_AXIS_Z, ENUM_DUMMY4WORD(GSENSOR_AXIS) } GSENSOR_AXIS; // for get status typedef enum { GSENSOR_ORIENT_0, GSENSOR_ORIENT_90, GSENSOR_ORIENT_180, GSENSOR_ORIENT_270, ENUM_DUMMY4WORD(GSENSOR_ORIENT) } GSENSOR_ORIENT; typedef enum { GSENSOR_SHAKE_LEFT, GSENSOR_SHAKE_RIGHT, ENUM_DUMMY4WORD(GSENSOR_SHAKE) } GSENSOR_SHAKE; typedef enum { GSENSOR_SENSITIVITY_BEGIN = 0, GSENSOR_SENSITIVITY_OFF = GSENSOR_SENSITIVITY_BEGIN, GSENSOR_SENSITIVITY_LOW, GSENSOR_SENSITIVITY_MED, GSENSOR_SENSITIVITY_HIGH, GSENSOR_SENSITIVITY_END = GSENSOR_SENSITIVITY_HIGH, GSENSOR_SENSITIVITY_PARKING_BEGIN = 100, GSENSOR_SENSITIVITY_PARKING_OFF = GSENSOR_SENSITIVITY_PARKING_BEGIN, GSENSOR_SENSITIVITY_PARKING_LOW, GSENSOR_SENSITIVITY_PARKING_MED, GSENSOR_SENSITIVITY_PARKING_HIGH, GSENSOR_SENSITIVITY_PARKING_END = GSENSOR_SENSITIVITY_PARKING_HIGH, ENUM_DUMMY4WORD(GSENSOR_SENSITIVITY) } GSENSOR_SENSITIVITY; typedef struct { UINT32 Xacc; UINT32 Yacc; UINT32 Zacc; } AXIS_DATA; typedef struct { AXIS_DATA Axis; GSENSOR_ORIENT Ori; GSENSOR_SHAKE SH; UINT32 Dev; UINT32 ShakeState; } Gsensor_Data, *pGsensor_Data; // common I2C related extern void GSensor_I2C_SetInfo(GSENSOR_INFO *pGSensorInfo); extern GSENSOR_INFO* GSensor_I2C_GetInfo(void); extern I2C_STS GSensor_I2C_Receive(UINT32 *value, BOOL bNACK, BOOL bStop); extern I2C_STS GSensor_I2C_Transmit(UINT32 value, BOOL bStart, BOOL bStop); extern BOOL GSensor_I2C_Init(GSENSOR_INFO GSensorInfo); extern void GSensor_I2C_WriteReg(UINT32 uiAddr, UINT32 uiValue); extern UINT32 GSensor_I2C_ReadReg(UINT32 uiAddr); // common GSensor API extern BOOL GSensor_open(void); extern BOOL GSensor_close(void); extern BOOL GSensor_IsOpened(void); extern BOOL GSensor_GetStatus(Gsensor_Data *GS_Data); extern BOOL GSensor_ParkingMode(void); extern void ClearIntSts(void); extern BOOL GSensor_CrashMode(void); extern void GSensor_SetSensitivity(GSENSOR_SENSITIVITY GSensorSensitivity); extern void GSensor_GetAxisValue(INT32 *pX, INT32 *pY, INT32 *pZ); extern void GSensor_I2C_Exit(void); extern void GSensor_I2C_Lock(void); #endif #endif //_GSENSOR_H_