porthub.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "porthub.h"
  2. PortHub::PortHub() {}
  3. PortHub::PortHub(uint8_t iic_addr) { _iic_addr = iic_addr; }
  4. void PortHub::begin() { Wire.begin(); }
  5. uint16_t PortHub::hub_a_read_value(uint8_t reg) {
  6. Wire.beginTransmission(_iic_addr);
  7. Wire.write(reg | 0x06);
  8. Wire.endTransmission();
  9. uint8_t RegValue_L, RegValue_H;
  10. Wire.requestFrom(_iic_addr, 2);
  11. while (Wire.available()) {
  12. RegValue_L = Wire.read();
  13. RegValue_H = Wire.read();
  14. }
  15. return (RegValue_H << 8) | RegValue_L;
  16. }
  17. uint8_t PortHub::hub_d_read_value_A(uint8_t reg) {
  18. Wire.beginTransmission(_iic_addr);
  19. Wire.write(reg | 0x04);
  20. Wire.endTransmission();
  21. uint8_t RegValue;
  22. Wire.requestFrom(_iic_addr, 1);
  23. while (Wire.available()) {
  24. RegValue = Wire.read();
  25. }
  26. return RegValue;
  27. }
  28. uint8_t PortHub::hub_d_read_value_B(uint8_t reg) {
  29. Wire.beginTransmission(_iic_addr);
  30. Wire.write(reg | 0x05);
  31. Wire.endTransmission();
  32. uint8_t RegValue;
  33. Wire.requestFrom(_iic_addr, 1);
  34. while (Wire.available()) {
  35. RegValue = Wire.read();
  36. }
  37. return RegValue;
  38. }
  39. void PortHub::hub_d_wire_value_A(uint8_t reg, uint16_t level) {
  40. Wire.beginTransmission(_iic_addr);
  41. Wire.write(reg | 0x00);
  42. Wire.write(level & 0xff);
  43. Wire.endTransmission();
  44. }
  45. void PortHub::hub_d_wire_value_B(uint8_t reg, uint16_t level) {
  46. Wire.beginTransmission(_iic_addr);
  47. Wire.write(reg | 0x01);
  48. Wire.write(level & 0xff);
  49. Wire.endTransmission();
  50. }
  51. void PortHub::hub_a_wire_value_A(uint8_t reg, uint16_t duty) {
  52. Wire.beginTransmission(_iic_addr);
  53. Wire.write(reg | 0x02);
  54. Wire.write(duty & 0xff);
  55. Wire.endTransmission();
  56. }
  57. void PortHub::hub_a_wire_value_B(uint8_t reg, uint16_t duty) {
  58. Wire.beginTransmission(_iic_addr);
  59. Wire.write(reg | 0x03);
  60. Wire.write(duty & 0xff);
  61. Wire.endTransmission();
  62. }
  63. void PortHub::hub_wire_length(uint8_t reg, uint16_t length) {
  64. Wire.beginTransmission(_iic_addr);
  65. Wire.write(reg | 0x08);
  66. Wire.write(length & 0xff);
  67. Wire.write(length >> 8);
  68. Wire.endTransmission();
  69. }
  70. void PortHub::hub_wire_index_color(uint8_t reg, uint16_t num, uint8_t r,
  71. int8_t g, uint8_t b) {
  72. Wire.beginTransmission(_iic_addr);
  73. Wire.write(reg | 0x09);
  74. Wire.write(num & 0xff);
  75. Wire.write(num >> 8);
  76. Wire.write(r);
  77. Wire.write(g);
  78. Wire.write(b);
  79. Wire.endTransmission();
  80. }
  81. void PortHub::hub_wire_fill_color(uint8_t reg, uint16_t first, uint16_t count,
  82. uint8_t r, int8_t g, uint8_t b) {
  83. Wire.beginTransmission(_iic_addr);
  84. Wire.write(reg | 0x0a);
  85. Wire.write(first & 0xff);
  86. Wire.write(first >> 8);
  87. Wire.write(count & 0xff);
  88. Wire.write(count >> 8);
  89. Wire.write(r);
  90. Wire.write(g);
  91. Wire.write(b);
  92. Wire.endTransmission();
  93. }
  94. void PortHub::hub_wire_setBrightness(uint8_t reg, uint8_t brightness) {
  95. Wire.beginTransmission(_iic_addr);
  96. Wire.write(reg | 0x0b);
  97. Wire.write(brightness & 0xff);
  98. Wire.endTransmission();
  99. }