hpm_ft5406.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. * Copyright (c) 2021 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_FT5406_H
  8. #define HPM_FT5406_H
  9. #include "hpm_common.h"
  10. #include "hpm_i2c_drv.h"
  11. #define FT5406_I2C_ADDR (0x38U)
  12. /*
  13. * FT5406 registers at operation mode
  14. */
  15. #define FT5406_DEVICE_MODE (0U)
  16. #define FT5406_GEST_ID (0x1U)
  17. #define FT5406_TD_STATUS (0x2U)
  18. #define FT5406_TOUCH1_XH (0x3U)
  19. #define FT5406_TOUCH1_XL (0x4U)
  20. #define FT5406_TOUCH1_YH (0x5U)
  21. #define FT5406_TOUCH1_YL (0x6U)
  22. #define FT5406_TOUCH2_XH (0x9U)
  23. #define FT5406_TOUCH2_XL (0xAU)
  24. #define FT5406_TOUCH2_YH (0xBU)
  25. #define FT5406_TOUCH2_YL (0xCU)
  26. #define FT5406_TOUCH3_XH (0xFU)
  27. #define FT5406_TOUCH3_XL (0x10U)
  28. #define FT5406_TOUCH3_YH (0x11U)
  29. #define FT5406_TOUCH3_YL (0x12U)
  30. #define FT5406_TOUCH4_XH (0x15U)
  31. #define FT5406_TOUCH4_XL (0x16U)
  32. #define FT5406_TOUCH4_YH (0x17U)
  33. #define FT5406_TOUCH4_YL (0x18U)
  34. #define FT5406_TOUCH5_XH (0x1BU)
  35. #define FT5406_TOUCH5_XL (0x1CU)
  36. #define FT5406_TOUCH5_YH (0x1DU)
  37. #define FT5406_TOUCH5_YL (0x1EU)
  38. #define FT5406_ID_G_THGROUP (0x80U)
  39. #define FT5406_ID_G_THPEAK (0x81U)
  40. #define FT5406_ID_G_THCAL (0x82U)
  41. #define FT5406_ID_G_THWARTER (0x83U)
  42. #define FT5406_ID_G_THTEMP (0x84U)
  43. #define FT5406_ID_G_CTRL (0x86U)
  44. #define FT5406_ID_G_TIME_ENTER_MONITOR (0x87U)
  45. #define FT5406_ID_G_PERIODACTIVE (0x88U)
  46. #define FT5406_ID_G_PERIODMONITOR (0x89U)
  47. #define FT5406_ID_G_AUTO_CLB_MODE (0xA0U)
  48. #define FT5406_ID_G_LIB_VERSION_H (0xA1U)
  49. #define FT5406_ID_G_LIB_VERSION_L (0xA2U)
  50. #define FT5406_ID_G_CIPHER (0xA3U)
  51. #define FT5406_ID_G_MODE (0xA4U)
  52. #define FT5406_ID_G_PMODE (0xA5U)
  53. #define FT5406_ID_G_FIRM_ID (0xA6U)
  54. #define FT5406_ID_G_STATE (0xA7U)
  55. #define FT5406_ID_G_FT5201ID (0xA8U)
  56. #define FT5406_ID_G_ERR (0xA9U)
  57. #define FT5406_ID_G_CLB (0xAAU)
  58. #define FT5406_ID_G_B_AREA_TH (0xAEU)
  59. #define FT5406_DEVICE_MODE_NORMAL (0)
  60. #define FT5406_DEVICE_MODE_SYS_INFO (1U)
  61. #define FT5406_DEVICE_MODE_TEST (2U)
  62. #define FT5406_STATUS_CONFIGURE (0)
  63. #define FT5406_STATUS_WORK (1U)
  64. #define FT5406_STATUS_CALIBRATION (2U)
  65. #define FT5406_STATUS_FACTORY (3U)
  66. #define FT5406_STATUS_AUTO_CALIBRATION (4U)
  67. #define FT5406_GESTURE_NO_GESTURE (0)
  68. #define FT5406_GESTURE_MOVE_UP (0x10U)
  69. #define FT5406_GESTURE_MOVE_LEFT (0x14U)
  70. #define FT5406_GESTURE_MOVE_DOWN (0x18U)
  71. #define FT5406_GESTURE_MOVE_RIGHT (0x1CU)
  72. #define FT5406_GESTURE_ZOOM_IN (0x48U)
  73. #define FT5406_GESTURE_ZOOM_OUT (0x49U)
  74. #define FT5406_MAX_TOUCH_POINTS (5U)
  75. typedef struct {
  76. uint8_t x_h;
  77. uint8_t x_l;
  78. uint8_t y_h;
  79. uint8_t y_l;
  80. uint16_t reserved;
  81. } ft5406_touch_point_t;
  82. typedef struct {
  83. uint8_t gesture;
  84. uint8_t status;
  85. ft5406_touch_point_t points[FT5406_MAX_TOUCH_POINTS];
  86. } ft5406_touch_data_t;
  87. typedef struct {
  88. I2C_Type *ptr;
  89. } ft5406_context_t;
  90. typedef struct {
  91. uint8_t mode;
  92. uint8_t bist_comm;
  93. uint8_t bist_stat;
  94. uint8_t reserved0[4];
  95. uint8_t uid[8];
  96. uint8_t bl_verh;
  97. uint8_t bl_verl;
  98. uint8_t fts_ic_verh;
  99. uint8_t fts_ic_verl;
  100. uint8_t app_idh;
  101. uint8_t app_idl;
  102. uint8_t app_verh;
  103. uint8_t app_verl;
  104. uint8_t reserved1[4];
  105. uint8_t cid[5];
  106. } ft5406_sys_info_t;
  107. #ifdef __cplusplus
  108. extern "C" {
  109. #endif
  110. /*
  111. * ft5406 initialization routine
  112. */
  113. hpm_stat_t ft5406_init(ft5406_context_t *context);
  114. /*
  115. * ft5406 set working mode
  116. */
  117. hpm_stat_t ft5406_set_mode(ft5406_context_t *context, uint8_t mode);
  118. /*
  119. * ft5406 get system information
  120. */
  121. hpm_stat_t ft5406_get_sys_info(ft5406_context_t *context,
  122. ft5406_sys_info_t *info);
  123. /*
  124. * ft5406 read touch data
  125. */
  126. hpm_stat_t ft5406_read_touch_data(ft5406_context_t *context,
  127. ft5406_touch_data_t *touch_data);
  128. /*
  129. * ft5406 read data
  130. */
  131. hpm_stat_t ft5406_read_data(ft5406_context_t *context, uint8_t addr,
  132. uint8_t *buf, uint32_t size);
  133. /*
  134. * ft5406 write value to given register
  135. */
  136. hpm_stat_t ft5406_write_register(ft5406_context_t *context,
  137. uint8_t reg, uint8_t val);
  138. /*
  139. * ft5406 read value of given register
  140. */
  141. hpm_stat_t ft5406_read_register(ft5406_context_t *context, uint8_t reg, uint8_t *buf);
  142. #ifdef __cplusplus
  143. }
  144. #endif
  145. #endif /* HPM_FT5406_H */