i2c_utils.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "luat_base.h"
  2. #include "i2c_utils.h"
  3. #include "luat_i2c.h"
  4. #define LUAT_LOG_TAG "i2c"
  5. #include "luat_log.h"
  6. static uint8_t i2c_tools_id = 0;
  7. uint8_t strtonum(const char* str){
  8. uint8_t data;
  9. if (strcmp(str, "0x")){
  10. data = (uint8_t)strtol(str, NULL, 0);
  11. }else{
  12. data = atoi(str);
  13. }
  14. return data;
  15. }
  16. void i2c_help(void){
  17. LLOGD("---------------i2c tools help:---------------");
  18. LLOGD("i2c tools scan i2c_id");
  19. LLOGD("i2c tools recv i2c_id address register [len=1]");
  20. LLOGD("i2c tools send i2c_id address [register] data_0 data_1 ...");
  21. }
  22. uint8_t i2c_init(const uint8_t i2c_id){
  23. i2c_tools_id = i2c_id;
  24. return (luat_i2c_setup(i2c_tools_id, 0));
  25. }
  26. uint8_t i2c_probe(char addr){
  27. uint8_t data[2] = {0x00};
  28. return (luat_i2c_send(i2c_tools_id, addr, data, 2,1) ==0);
  29. }
  30. uint8_t i2c_write(char addr, uint8_t* data, int len){
  31. return (luat_i2c_send(i2c_tools_id, addr, data, len,1) == 0);
  32. }
  33. uint8_t i2c_read(uint8_t addr, uint8_t reg, uint8_t* buffer, uint8_t len){
  34. int ret = 0;
  35. ret = luat_i2c_send(i2c_tools_id, addr, &reg, 1,0);
  36. if (ret != 0)return -1;
  37. ret = luat_i2c_recv(i2c_tools_id, addr, buffer, len);
  38. if (ret != 0)return -1;
  39. return 0;
  40. }
  41. void i2c_scan(void){
  42. LLOGD("ID 0 1 2 3 4 5 6 7 8 9 a b c d e f");
  43. char buff[64] = {0};
  44. for(unsigned char i=0; i<8; i++){
  45. sprintf_(buff, "%d0: ", i);
  46. for(unsigned char j=0; j<16; j++){
  47. char addr = i*16+j;
  48. if( i2c_probe(addr) == 1){
  49. sprintf_(buff + 4 + j*3, "%02X ", addr);
  50. }else{
  51. sprintf_(buff + 4 + j*3, "-- ");
  52. }
  53. }
  54. LLOGD("%s", buff);
  55. }
  56. }