hal_gpio_i2c_interface.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "driver.h"
  2. #include <linux/types.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include "com_gpio.h"
  6. #include "hal_interface_api.h"
  7. #include "linux/fcntl.h"
  8. /*
  9. bus: 1,2,3
  10. address: 8bit
  11. */
  12. int stm32_gpio_i2c_master_write(int fd, uint8_t address, uint8_t *pBuf, uint16_t size)
  13. {
  14. int ret = 0;
  15. gpio_i2c_t i2c_arg;
  16. i2c_arg.DevAddress = address;
  17. i2c_arg.WriteLen = size;
  18. memcpy(i2c_arg.Buf, pBuf, size);
  19. ret = ioctl(fd, GPIO_I2C_MASTER_TRANSFER, &i2c_arg);
  20. if(ret != 0)
  21. {
  22. printf("Write i2c failed! ADDR: %#x\n", address);
  23. }
  24. return ret;
  25. }
  26. int stm32_gpio_i2c_master_read(int fd, uint8_t address, uint8_t *pBuf, uint16_t size)
  27. {
  28. int ret;
  29. gpio_i2c_t i2c_arg;
  30. i2c_arg.DevAddress = address;
  31. i2c_arg.ReadLen = size;
  32. ret = ioctl(fd, GPIO_I2C_MASTER_RECEIVE, &i2c_arg);
  33. if(ret != 0)
  34. {
  35. printf("Read i2c failed! ADDR: %#x\n", address);
  36. }
  37. memcpy(pBuf, i2c_arg.Buf, size);
  38. return 0;
  39. }
  40. int stm32_gpio_i2c_master_write_read(int fd, uint8_t address, uint8_t *pWrBuf, uint8_t wrsize, uint8_t *pRdBuf, uint16_t rdsize)
  41. {
  42. int ret;
  43. gpio_i2c_t i2c_arg;
  44. i2c_arg.DevAddress = address;
  45. i2c_arg.WriteLen = wrsize;
  46. i2c_arg.ReadLen = rdsize;
  47. memcpy(i2c_arg.Buf, pWrBuf, wrsize);
  48. ret = ioctl(fd, GPIO_I2C_MASTER_TRANSFER_RECV, &i2c_arg);
  49. if(ret != 0)
  50. {
  51. printf("Read i2c failed! ADDR: %#x\n", address);
  52. return -1;
  53. }
  54. memcpy(pRdBuf, i2c_arg.Buf, rdsize);
  55. return 0;
  56. }