hwmsensor.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. /*
  2. * Copyright(C)2014 MediaTek Inc.
  3. * Modification based on code covered by the below mentioned copyright
  4. * and/or permission notice(S).
  5. */
  6. #ifndef __HWMSENSOR_H__
  7. #define __HWMSENSOR_H__
  8. #include <linux/ioctl.h>
  9. #define SENSOR_TYPE_ACCELEROMETER 1
  10. #define SENSOR_TYPE_MAGNETIC_FIELD 2
  11. #define SENSOR_TYPE_ORIENTATION 3
  12. #define SENSOR_TYPE_GYROSCOPE 4
  13. #define SENSOR_TYPE_LIGHT 5
  14. #define SENSOR_TYPE_PRESSURE 6
  15. #define SENSOR_TYPE_TEMPERATURE 7
  16. #define SENSOR_TYPE_PROXIMITY 8
  17. #define SENSOR_TYPE_GRAVITY 9
  18. #define SENSOR_TYPE_LINEAR_ACCELERATION 10
  19. #define SENSOR_TYPE_ROTATION_VECTOR 11
  20. #define SENSOR_TYPE_HUMIDITY 12
  21. #define SENSOR_TYPE_GAME_ROTATION_VECTOR 15
  22. #define SENSOR_TYPE_SIGNIFICANT_MOTION 17
  23. #define SENSOR_TYPE_STEP_DETECTOR 18
  24. #define SENSOR_TYPE_STEP_COUNTER 19
  25. #define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR 20
  26. #define SENSOR_TYPE_HEART_RATE 21
  27. #define SENSOR_TYPE_TILT_DETECTOR 22
  28. #define SENSOR_TYPE_WAKE_GESTURE 23
  29. #define SENSOR_TYPE_GLANCE_GESTURE 24
  30. #define SENSOR_TYPE_PICK_UP_GESTURE 25
  31. #define SENSOR_TYPE_PEDOMETER (26)
  32. #define SENSOR_STRING_TYPE_PEDOMETER "android.sensor.pedometer"
  33. #define SENSOR_TYPE_IN_POCKET (27)
  34. #define SENSOR_STRING_TYPE_IN_POCKET "android.sensor.in_pocket"
  35. #define SENSOR_TYPE_ACTIVITY (28)
  36. #define SENSOR_STRING_TYPE_ACTIVITY "android.sensor.activity"
  37. #define SENSOR_TYPE_FACE_DOWN (29)
  38. #define SENSOR_STRING_TYPE_FACE_DOWN "android.sensor.face_down"
  39. #define SENSOR_TYPE_SHAKE (30)
  40. #define SENSOR_STRING_TYPE_SHAKE "android.sensor.shake"
  41. #define SENSOR_TYPE_BRINGTOSEE (31)
  42. #define SENSOR_STRING_TYPE_BRINGTOSEE "android.sensor.bring_to_see"
  43. /*---------------------------------------------------------------------------*/
  44. #define ID_BASE 0
  45. #define ID_ORIENTATION (ID_BASE+SENSOR_TYPE_ORIENTATION-1)
  46. #define ID_MAGNETIC (ID_BASE+SENSOR_TYPE_MAGNETIC_FIELD-1)
  47. #define ID_ACCELEROMETER (ID_BASE+SENSOR_TYPE_ACCELEROMETER-1)
  48. #define ID_LINEAR_ACCELERATION (ID_BASE+SENSOR_TYPE_LINEAR_ACCELERATION-1)
  49. #define ID_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_ROTATION_VECTOR-1)
  50. #define ID_GAME_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_GAME_ROTATION_VECTOR-1)
  51. #define ID_GRAVITY (ID_BASE+SENSOR_TYPE_GRAVITY-1)
  52. #define ID_GYROSCOPE (ID_BASE+SENSOR_TYPE_GYROSCOPE-1)
  53. #define ID_PROXIMITY (ID_BASE+SENSOR_TYPE_PROXIMITY-1)
  54. #define ID_LIGHT (ID_BASE+SENSOR_TYPE_LIGHT-1)
  55. #define ID_PRESSURE (ID_BASE+SENSOR_TYPE_PRESSURE-1)
  56. #define ID_TEMPRERATURE (ID_BASE+SENSOR_TYPE_TEMPERATURE-1)
  57. #define ID_HUMIDITY (ID_BASE+SENSOR_TYPE_HUMIDITY-1)
  58. #define ID_SIGNIFICANT_MOTION (ID_BASE+SENSOR_TYPE_SIGNIFICANT_MOTION-1)
  59. #define ID_STEP_DETECTOR (ID_BASE+SENSOR_TYPE_STEP_DETECTOR-1)
  60. #define ID_STEP_COUNTER (ID_BASE+SENSOR_TYPE_STEP_COUNTER-1)
  61. #define ID_GEOMAGNETIC_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR-1)
  62. #define ID_HEART_RATE (ID_BASE+SENSOR_TYPE_HEART_RATE-1)
  63. #define ID_TILT_DETECTOR (ID_BASE+SENSOR_TYPE_TILT_DETECTOR-1)
  64. #define ID_WAKE_GESTURE (ID_BASE+SENSOR_TYPE_WAKE_GESTURE-1)
  65. #define ID_GLANCE_GESTURE (ID_BASE+SENSOR_TYPE_GLANCE_GESTURE-1)
  66. #define ID_PICK_UP_GESTURE (ID_BASE+SENSOR_TYPE_PICK_UP_GESTURE-1)
  67. #define ID_PEDOMETER (ID_BASE+SENSOR_TYPE_PEDOMETER-1)
  68. #define ID_ACTIVITY (ID_BASE+SENSOR_TYPE_ACTIVITY-1)
  69. #define ID_IN_POCKET (ID_BASE+SENSOR_TYPE_IN_POCKET-1)
  70. #define ID_FACE_DOWN (ID_BASE+SENSOR_TYPE_FACE_DOWN-1)
  71. #define ID_SHAKE (ID_BASE+SENSOR_TYPE_SHAKE-1)
  72. #define ID_BRINGTOSEE (ID_BASE+SENSOR_TYPE_BRINGTOSEE-1)
  73. #define ID_SENSOR_MAX_HANDLE (ID_BASE+SENSOR_TYPE_BRINGTOSEE)
  74. #define ID_NONE (ID_SENSOR_MAX_HANDLE+1)
  75. #define ID_OFFSET (1)
  76. #define MAX_ANDROID_SENSOR_NUM (ID_SENSOR_MAX_HANDLE+1)
  77. #define MAX_SENSOR_DATA_UPDATE_ONCE (20)
  78. /*---------------------------------------------------------------------------*/
  79. #define SENSOR_ORIENTATION (1 << ID_ORIENTATION)
  80. #define SENSOR_MAGNETIC (1 << ID_MAGNETIC)
  81. #define SENSOR_ACCELEROMETER (1 << ID_ACCELEROMETER)
  82. #define SENSOR_GYROSCOPE (1 << ID_GYROSCOPE)
  83. #define SENSOR_PROXIMITY (1 << ID_PROXIMITY)
  84. #define SENSOR_LIGHT (1 << ID_LIGHT)
  85. #define SENSOR_PRESSURE (1 << ID_PRESSURE)
  86. #define SENSOR_TEMPRERATURE (1 << ID_TEMPRERATURE)
  87. #define SENSOR_HUMIDITY (1 << ID_HUMIDITY)
  88. #define SENSOR_GRAVITY (1 << ID_GRAVITY)
  89. #define SENSOR_LINEAR_ACCELERATION (1 << ID_LINEAR_ACCELERATION)
  90. #define SENSOR_ROTATION_VECTOR (1 << ID_ROTATION_VECTOR)
  91. #define SENSOR_SIGNIFICANT_MOTION (1 << ID_SIGNIFICANT_MOTION)
  92. #define SENSOR_STEP_DETECTOR (1 << ID_STEP_DETECTOR)
  93. #define SENSOR_STEP_COUNTER (1 << ID_STEP_COUNTER)
  94. #define SENSOR_GEOMAGNETIC_ROTATION_VECTOR (1 << ID_GEOMAGNETIC_ROTATION_VECTOR)
  95. #define SENSOR_HEART_RATE (1 << ID_HEART_RATE)
  96. #define SENSOR_TILT_DETECTOR (1 << ID_TILT_DETECTOR)
  97. #define SENSOR_WAKE_GESTURE (1 << ID_WAKE_GESTURE)
  98. #define SENSOR_GLANCE_GESTURE (1 << ID_GLANCE_GESTURE)
  99. #define SENSOR_PICK_UP_GESTURE (1 << ID_PICK_UP_GESTURE)
  100. #define SENSOR_PEDOMETER (1 << ID_PEDOMETER)
  101. #define SENSOR_IN_POCKET (1 << ID_IN_POCKET)
  102. #define SENSOR_ACTIVITY (1 << ID_ACTIVITY)
  103. #define SENSOR_FACE_DOWN (1 << ID_FACE_DOWN)
  104. #define SENSOR_SHAKE (1 << ID_SHAKE)
  105. #define SENSOR_BRINGTOSEE (1 << ID_BRINGTOSEE)
  106. /*----------------------------------------------------------------------------*/
  107. #define HWM_INPUTDEV_NAME "hwmdata"
  108. #define HWM_SENSOR_DEV_NAME "hwmsensor"
  109. #define HWM_SENSOR_DEV "/dev/hwmsensor"
  110. #define C_MAX_HWMSEN_EVENT_NUM 4
  111. /*----------------------------------------------------------------------------*/
  112. #define ACC_PL_DEV_NAME "m_acc_pl"
  113. #define ACC_INPUTDEV_NAME "m_acc_input"
  114. #define ACC_MISC_DEV_NAME "m_acc_misc"
  115. #define MAG_PL_DEV_NAME "m_mag_pl"
  116. #define MAG_INPUTDEV_NAME "m_mag_input"
  117. #define MAG_MISC_DEV_NAME "m_mag_misc"
  118. #define GYRO_PL_DEV_NAME "m_gyro_pl"
  119. #define GYRO_INPUTDEV_NAME "m_gyro_input"
  120. #define GYRO_MISC_DEV_NAME "m_gyro_misc"
  121. #define ALSPS_PL_DEV_NAME "m_alsps_pl"
  122. #define ALSPS_INPUTDEV_NAME "m_alsps_input"
  123. #define ALSPS_MISC_DEV_NAME "m_alsps_misc"
  124. #define BARO_PL_DEV_NAME "m_baro_pl"
  125. #define BARO_INPUTDEV_NAME "m_baro_input"
  126. #define BARO_MISC_DEV_NAME "m_baro_misc"
  127. #define HMDY_PL_DEV_NAME "m_hmdy_pl"
  128. #define HMDY_INPUTDEV_NAME "m_hmdy_input"
  129. #define HMDY_MISC_DEV_NAME "m_hmdy_misc"
  130. #define STEP_C_PL_DEV_NAME "m_step_c_pl"
  131. #define STEP_C_INPUTDEV_NAME "m_step_c_input"
  132. #define STEP_C_MISC_DEV_NAME "m_step_c_misc"
  133. #define INPK_PL_DEV_NAME "m_inpk_pl"
  134. #define INPK_INPUTDEV_NAME "m_inpk_input"
  135. #define INPK_MISC_DEV_NAME "m_inpk_misc"
  136. #define SHK_PL_DEV_NAME "m_shk_pl"
  137. #define SHK_INPUTDEV_NAME "m_shk_input"
  138. #define SHK_MISC_DEV_NAME "m_shk_misc"
  139. #define FDN_PL_DEV_NAME "m_fdn_pl"
  140. #define FDN_INPUTDEV_NAME "m_fdn_input"
  141. #define FDN_MISC_DEV_NAME "m_fdn_misc"
  142. #define PKUP_PL_DEV_NAME "m_pkup_pl"
  143. #define PKUP_INPUTDEV_NAME "m_pkup_input"
  144. #define PKUP_MISC_DEV_NAME "m_pkup_misc"
  145. #define ACT_PL_DEV_NAME "m_act_pl"
  146. #define ACT_INPUTDEV_NAME "m_act_input"
  147. #define ACT_MISC_DEV_NAME "m_act_misc"
  148. #define PDR_PL_DEV_NAME "m_pdr_pl"
  149. #define PDR_INPUTDEV_NAME "m_pdr_input"
  150. #define PDR_MISC_DEV_NAME "m_pdr_misc"
  151. #define HRM_PL_DEV_NAME "m_hrm_pl"
  152. #define HRM_INPUTDEV_NAME "m_hrm_input"
  153. #define HRM_MISC_DEV_NAME "m_hrm_misc"
  154. #define TILT_PL_DEV_NAME "m_tilt_pl"
  155. #define TILT_INPUTDEV_NAME "m_tilt_input"
  156. #define TILT_MISC_DEV_NAME "m_tilt_misc"
  157. #define WAG_PL_DEV_NAME "m_wag_pl"
  158. #define WAG_INPUTDEV_NAME "m_wag_input"
  159. #define WAG_MISC_DEV_NAME "m_wag_misc"
  160. #define GLG_PL_DEV_NAME "m_glg_pl"
  161. #define GLG_INPUTDEV_NAME "m_glg_input"
  162. #define GLG_MISC_DEV_NAME "m_glg_misc"
  163. #define TEMP_PL_DEV_NAME "m_temp_pl"
  164. #define TEMP_INPUTDEV_NAME "m_temp_input"
  165. #define TEMP_MISC_DEV_NAME "m_temp_misc"
  166. #define BATCH_PL_DEV_NAME "m_batch_pl"
  167. #define BATCH_INPUTDEV_NAME "m_batch_input"
  168. #define BATCH_MISC_DEV_NAME "m_batch_misc"
  169. #define BTS_PL_DEV_NAME "m_bts_pl"
  170. #define BTS_INPUTDEV_NAME "m_bts_input"
  171. #define BTS_MISC_DEV_NAME "m_bts_misc"
  172. #define GRV_PL_DEV_NAME "m_grv_pl"
  173. #define GRV_INPUTDEV_NAME "m_grv_input"
  174. #define GRV_MISC_DEV_NAME "m_grv_misc"
  175. #define GMRV_PL_DEV_NAME "m_gmrv_pl"
  176. #define GMRV_INPUTDEV_NAME "m_gmrv_input"
  177. #define GMRV_MISC_DEV_NAME "m_gmrv_misc"
  178. #define GRAV_PL_DEV_NAME "m_grav_pl"
  179. #define GRAV_INPUTDEV_NAME "m_grav_input"
  180. #define GRAV_MISC_DEV_NAME "m_grav_misc"
  181. #define LA_PL_DEV_NAME "m_la_pl"
  182. #define LA_INPUTDEV_NAME "m_la_input"
  183. #define LA_MISC_DEV_NAME "m_la_misc"
  184. #define RV_PL_DEV_NAME "m_rv_pl"
  185. #define RV_INPUTDEV_NAME "m_rv_input"
  186. #define RV_MISC_DEV_NAME "m_rv_misc"
  187. #define FREEFALL_PL_DEV_NAME "m_frfl_pl"
  188. #define FREEFALL_INPUTDEV_NAME "m_frfl_input"
  189. #define FREEFALL_MISC_DEV_NAME "m_frfl_misc"
  190. #define PDR_PL_DEV_NAME "m_pdr_pl"
  191. #define PDR_INPUTDEV_NAME "m_pdr_input"
  192. #define PDR_MISC_DEV_NAME "m_pdr_misc"
  193. #define EVENT_TYPE_SENSOR 0x01
  194. #define EVENT_TYPE_SENSOR_EXT 0x02
  195. #define EVENT_SENSOR_ACCELERATION SENSOR_ACCELEROMETER
  196. #define EVENT_SENSOR_MAGNETIC SENSOR_MAGNETIC
  197. #define EVENT_SENSOR_ORIENTATION SENSOR_ORIENTATION
  198. #define EVENT_SENSOR_GYROSCOPE SENSOR_GYROSCOPE
  199. #define EVENT_SENSOR_LIGHT SENSOR_LIGHT
  200. #define EVENT_SENSOR_PRESSURE SENSOR_PRESSURE
  201. #define EVENT_SENSOR_TEMPERATURE SENSOR_TEMPRERATURE
  202. #define EVENT_SENSOR_PROXIMITY SENSOR_PROXIMITY
  203. #define EVENT_SENSOR_GRAVITY SENSOR_PRESSURE
  204. #define EVENT_SENSOR_LINEAR_ACCELERATION SENSOR_TEMPRERATURE
  205. #define EVENT_SENSOR_ROTATION_VECTOR SENSOR_PROXIMITY
  206. /*-----------------------------------------------------------------------------*/
  207. enum {
  208. HWM_MODE_DISABLE = 0,
  209. HWM_MODE_ENABLE = 1,
  210. };
  211. /*------------sensors data----------------------------------------------------*/
  212. struct hwm_sensor_data {
  213. /* sensor identifier */
  214. int sensor;
  215. /* sensor values */
  216. int values[6];
  217. /* sensor values divide */
  218. uint32_t value_divide;
  219. /* sensor accuracy */
  220. int8_t status;
  221. /* whether updata? */
  222. int update;
  223. /* time is in nanosecond */
  224. int64_t time;
  225. uint32_t reserved;
  226. };
  227. struct hwm_trans_data {
  228. struct hwm_sensor_data data[MAX_SENSOR_DATA_UPDATE_ONCE];
  229. uint64_t data_type;
  230. };
  231. #define MAX_BATCH_DATA_PER_QUREY 18
  232. struct batch_trans_data {
  233. int numOfDataReturn;
  234. int numOfDataLeft;
  235. struct hwm_sensor_data data[MAX_BATCH_DATA_PER_QUREY];
  236. };
  237. /*----------------------------------------------------------------------------*/
  238. #define HWM_IOC_MAGIC 0x91
  239. /* set delay */
  240. #define HWM_IO_SET_DELAY _IOW(HWM_IOC_MAGIC, 0x01, uint32_t)
  241. /* wake up */
  242. #define HWM_IO_SET_WAKE _IO(HWM_IOC_MAGIC, 0x02)
  243. /* Enable/Disable sensor */
  244. #define HWM_IO_ENABLE_SENSOR _IOW(HWM_IOC_MAGIC, 0x03, uint32_t)
  245. #define HWM_IO_DISABLE_SENSOR _IOW(HWM_IOC_MAGIC, 0x04, uint32_t)
  246. /* Enable/Disable sensor */
  247. #define HWM_IO_ENABLE_SENSOR_NODATA _IOW(HWM_IOC_MAGIC, 0x05, uint32_t)
  248. #define HWM_IO_DISABLE_SENSOR_NODATA _IOW(HWM_IOC_MAGIC, 0x06, uint32_t)
  249. /* Get sensors data */
  250. #define HWM_IO_GET_SENSORS_DATA _IOWR(HWM_IOC_MAGIC, 0x07, struct hwm_trans_data)
  251. /*----------------------------------------------------------------------------*/
  252. #define BATCH_IOC_MAGIC 0x92
  253. /* Get sensor data */
  254. #define BATCH_IO_GET_SENSORS_DATA _IOWR(BATCH_IOC_MAGIC, 0x01, struct batch_trans_data)
  255. #endif /* __HWMSENSOR_H__ */