Si115X.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #ifndef SI115X_H
  2. #define SI115X_H
  3. #include <Arduino.h>
  4. #include <Wire.h>
  5. class Si115X
  6. {
  7. public:
  8. typedef enum {
  9. DEVICE_ADDRESS = 0x53
  10. } UnitAddress;
  11. typedef enum {
  12. RESET_CMD_CTR = 0x00,
  13. RESET_SW = 0x01,
  14. FORCE = 0x11,
  15. PAUSE = 0x12,
  16. START = 0x13,
  17. PARAM_QUERY = 0x40,
  18. PARAM_SET = 0x80
  19. } CommandCodes;
  20. typedef enum {
  21. PART_ID = 0x00,
  22. REV_ID = 0x01,
  23. MFR_ID = 0x02,
  24. INFO_0 = 0x03,
  25. INFO_1 = 0x04,
  26. HOSTIN_3 = 0x07,
  27. HOSTIN_2 = 0x08,
  28. HOSTIN_1 = 0x09,
  29. HOSTIN_0 = 0x0A,
  30. COMMAND = 0x0B,
  31. IRQ_ENABLE = 0x0F,
  32. RESPONSE_1 = 0x10,
  33. RESPONSE_0 = 0x11,
  34. IRQ_STATUS = 0x12,
  35. HOSTOUT_0 = 0x13,
  36. HOSTOUT_1 = 0x14,
  37. HOSTOUT_2 = 0x15,
  38. HOSTOUT_3 = 0x16,
  39. HOSTOUT_4 = 0x17,
  40. HOSTOUT_5 = 0x18,
  41. HOSTOUT_6 = 0x19,
  42. HOSTOUT_7 = 0x1A,
  43. HOSTOUT_8 = 0x1B,
  44. HOSTOUT_9 = 0x1C,
  45. HOSTOUT_10 = 0x1D,
  46. HOSTOUT_11 = 0x1E,
  47. HOSTOUT_12 = 0x1F,
  48. HOSTOUT_13 = 0x20,
  49. HOSTOUT_14 = 0x21,
  50. HOSTOUT_15 = 0x22,
  51. HOSTOUT_16 = 0x23,
  52. HOSTOUT_17 = 0x24,
  53. HOSTOUT_18 = 0x25,
  54. HOSTOUT_19 = 0x26,
  55. HOSTOUT_20 = 0x27,
  56. HOSTOUT_21 = 0x28,
  57. HOSTOUT_22 = 0x29,
  58. HOSTOUT_23 = 0x2A,
  59. HOSTOUT_24 = 0x2B,
  60. HOSTOUT_25 = 0x2C
  61. } RegisterAddress;
  62. typedef enum {
  63. I2C_ADDR = 0x00,
  64. CHAN_LIST = 0x01,
  65. ADCCONFIG_0 = 0x02,
  66. ADCSENS_0 = 0x03,
  67. ADCPOST_0 = 0x04,
  68. MEASCONFIG_0 = 0x05,
  69. ADCCONFIG_1 = 0x06,
  70. ADCPOST_1 = 0x08,
  71. ADCSENS_1 = 0x07,
  72. MEASCONFIG_1 = 0x09,
  73. ADCCONFIG_2 = 0x0A,
  74. ADCSENS_2 = 0x0B,
  75. ADCPOST_2 = 0x0C,
  76. MEASCONFIG_2 = 0x0D,
  77. ADCCONFIG_3 = 0x0E,
  78. ADCSENS_3 = 0x0F,
  79. ADCPOST_3 = 0x10,
  80. MEASCONFIG_3 = 0x11,
  81. ADCCONFIG_4 = 0x12,
  82. ADCSENS_4 = 0x13,
  83. ADCPOST_4 = 0x14,
  84. MEASCONFIG_4 = 0x15,
  85. ADCCONFIG_5 = 0x16,
  86. ADCSENS_5 = 0x17,
  87. ADCPOST_5 = 0x18,
  88. MEASCONFIG_5 = 0x19,
  89. MEASRATE_H = 0x1A,
  90. MEASRATE_L = 0x1B,
  91. MEASCOUNT_0 = 0x1C,
  92. MEASCOUNT_1 = 0x1D,
  93. MEASCOUNT_2 = 0x1E,
  94. LED1_A = 0x1F,
  95. LED1_B = 0x20,
  96. LED3_A = 0x21,
  97. LED3_B = 0x22,
  98. LED2_A = 0x23,
  99. LED2_B = 0x24,
  100. THRESHOLD0_H = 0x25,
  101. THRESHOLD0_L = 0x26,
  102. THRESHOLD1_H = 0x27,
  103. THRESHOLD1_L = 0x28,
  104. UPPER_THRESHOLD_H = 0x29,
  105. UPPER_THRESHOLD_L = 0x2A,
  106. BURST = 0x2B,
  107. LOWER_THRESHOLD_H = 0x2C,
  108. LOWER_THRESHOLD_L = 0x2D
  109. } ParameterAddress;
  110. Si115X(uint8_t addr = DEVICE_ADDRESS);
  111. void config_channel(uint8_t index, const uint8_t *conf);
  112. void write_data(uint8_t addr, const uint8_t *data, size_t len);
  113. int read_register(uint8_t addr, uint8_t reg, int bytesOfData);
  114. uint8_t read_register(uint8_t addr, uint8_t reg) {
  115. return read_register(addr, reg, 1);
  116. }
  117. void write_register(uint8_t addr, uint8_t reg, uint8_t val) {
  118. uint8_t data[2] = {reg, val};
  119. write_data(addr, data, 2);
  120. }
  121. void param_set(uint8_t loc, uint8_t val);
  122. int param_query(uint8_t loc);
  123. uint8_t send_command(uint8_t code);
  124. int get_int_from_bytes(const uint8_t *data, size_t len);
  125. bool Begin(bool mode);
  126. bool Begin(void) {
  127. return Begin(false);
  128. }
  129. uint16_t ReadIR(void);
  130. uint16_t ReadVisible(void);
  131. uint8_t ReadByte(uint8_t Reg);
  132. private:
  133. bool is_autonomous;
  134. uint8_t device_address;
  135. };
  136. #endif