luat_tp_reg.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef LUAT_TP_REG_H
  2. #define LUAT_TP_REG_H
  3. #include "luat_i2c.h"
  4. static inline int tp_i2c_write(luat_tp_config_t* luat_tp_config, uint8_t* cmd, size_t cmd_len, void* data, size_t data_len){
  5. size_t len = cmd_len+data_len;
  6. uint8_t data_reg[len];
  7. memcpy(data_reg, cmd, cmd_len);
  8. if (data_len){
  9. memcpy(data_reg+cmd_len, data, data_len);
  10. }
  11. if (luat_tp_config->soft_i2c != NULL){
  12. return i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, len, 1);
  13. }else{
  14. return luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, len, 1);
  15. }
  16. }
  17. static inline int tp_i2c_read(luat_tp_config_t* luat_tp_config, uint8_t* cmd, size_t cmd_len, void* data, size_t data_len, uint8_t stop){
  18. if (luat_tp_config->soft_i2c != NULL){
  19. i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)cmd, cmd_len, stop);
  20. return i2c_soft_recv(luat_tp_config->soft_i2c, luat_tp_config->address, data, data_len);
  21. }else{
  22. luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, (char *)cmd, cmd_len, stop);
  23. return luat_i2c_recv(luat_tp_config->i2c_id, luat_tp_config->address, data, data_len);
  24. }
  25. }
  26. static inline int tp_i2c_write_reg8(luat_tp_config_t* luat_tp_config, uint8_t reg, void* buff, size_t len){
  27. uint8_t data_reg[1] = {reg};
  28. return tp_i2c_write(luat_tp_config, data_reg, 1, buff, len);
  29. }
  30. static inline int tp_i2c_read_reg8(luat_tp_config_t* luat_tp_config, uint8_t reg, void* buff, size_t len, uint8_t stop){
  31. uint8_t data_reg[1] = {reg};
  32. return tp_i2c_read(luat_tp_config, data_reg, 1, buff, len, stop);
  33. }
  34. static inline int tp_i2c_write_reg16(luat_tp_config_t* luat_tp_config, uint16_t reg, void* buff, size_t len){
  35. uint8_t data_reg[sizeof(uint16_t)] = {reg>>8, reg&0xff};
  36. return tp_i2c_write(luat_tp_config, data_reg, sizeof(uint16_t), buff, len);
  37. }
  38. static inline int tp_i2c_read_reg16(luat_tp_config_t* luat_tp_config, uint16_t reg, void* buff, size_t len, uint8_t stop){
  39. uint8_t data_reg[sizeof(uint16_t)] = {reg>>8, reg&0xff};
  40. return tp_i2c_read(luat_tp_config, data_reg, sizeof(uint16_t), buff, len, stop);
  41. }
  42. static inline int tp_i2c_write_reg32(luat_tp_config_t* luat_tp_config, uint32_t reg, void* buff, size_t len){
  43. uint8_t data_reg[sizeof(uint32_t)] = {(reg>>24)&0xff,(reg>>16)&0xff,(reg>>8)&0xff,reg&0xff};
  44. return tp_i2c_write(luat_tp_config, data_reg, sizeof(uint32_t), buff, len);
  45. }
  46. static inline int tp_i2c_read_reg32(luat_tp_config_t* luat_tp_config, uint32_t reg, void* buff, size_t len, uint8_t stop){
  47. uint8_t data_reg[sizeof(uint32_t)] = {(reg>>24)&0xff,(reg>>16)&0xff,(reg>>8)&0xff,reg&0xff};
  48. return tp_i2c_read(luat_tp_config, data_reg, sizeof(uint32_t), buff, len, stop);
  49. }
  50. #endif