furi_hal_tests.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include <stdio.h>
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include <lp5562_reg.h>
  5. #include "../minunit.h"
  6. #define DATA_SIZE 4
  7. static void furi_hal_i2c_int_setup() {
  8. furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
  9. }
  10. static void furi_hal_i2c_int_teardown() {
  11. furi_hal_i2c_release(&furi_hal_i2c_handle_power);
  12. }
  13. MU_TEST(furi_hal_i2c_int_1b) {
  14. bool ret = false;
  15. uint8_t data_one = 0;
  16. // 1 byte: read, write, read
  17. ret = furi_hal_i2c_read_reg_8(
  18. &furi_hal_i2c_handle_power,
  19. LP5562_ADDRESS,
  20. LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
  21. &data_one,
  22. LP5562_I2C_TIMEOUT);
  23. mu_assert(ret, "0 read_reg_8 failed");
  24. mu_assert(data_one != 0, "0 invalid data");
  25. ret = furi_hal_i2c_write_reg_8(
  26. &furi_hal_i2c_handle_power,
  27. LP5562_ADDRESS,
  28. LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
  29. data_one,
  30. LP5562_I2C_TIMEOUT);
  31. mu_assert(ret, "1 write_reg_8 failed");
  32. ret = furi_hal_i2c_read_reg_8(
  33. &furi_hal_i2c_handle_power,
  34. LP5562_ADDRESS,
  35. LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
  36. &data_one,
  37. LP5562_I2C_TIMEOUT);
  38. mu_assert(ret, "2 read_reg_8 failed");
  39. mu_assert(data_one != 0, "2 invalid data");
  40. }
  41. MU_TEST(furi_hal_i2c_int_3b) {
  42. bool ret = false;
  43. uint8_t data_many[DATA_SIZE] = {0};
  44. // 3 byte: read, write, read
  45. data_many[0] = LP5562_CHANNEL_BLUE_CURRENT_REGISTER;
  46. ret = furi_hal_i2c_tx(
  47. &furi_hal_i2c_handle_power, LP5562_ADDRESS, data_many, 1, LP5562_I2C_TIMEOUT);
  48. mu_assert(ret, "3 tx failed");
  49. ret = furi_hal_i2c_rx(
  50. &furi_hal_i2c_handle_power,
  51. LP5562_ADDRESS,
  52. data_many + 1,
  53. DATA_SIZE - 1,
  54. LP5562_I2C_TIMEOUT);
  55. mu_assert(ret, "4 rx failed");
  56. for(size_t i = 0; i < DATA_SIZE; i++) mu_assert(data_many[i] != 0, "4 invalid data_many");
  57. ret = furi_hal_i2c_tx(
  58. &furi_hal_i2c_handle_power, LP5562_ADDRESS, data_many, DATA_SIZE, LP5562_I2C_TIMEOUT);
  59. mu_assert(ret, "5 tx failed");
  60. ret = furi_hal_i2c_tx(
  61. &furi_hal_i2c_handle_power, LP5562_ADDRESS, data_many, 1, LP5562_I2C_TIMEOUT);
  62. mu_assert(ret, "6 tx failed");
  63. ret = furi_hal_i2c_rx(
  64. &furi_hal_i2c_handle_power,
  65. LP5562_ADDRESS,
  66. data_many + 1,
  67. DATA_SIZE - 1,
  68. LP5562_I2C_TIMEOUT);
  69. mu_assert(ret, "7 rx failed");
  70. for(size_t i = 0; i < DATA_SIZE; i++) mu_assert(data_many[i] != 0, "7 invalid data_many");
  71. }
  72. MU_TEST(furi_hal_i2c_int_1b_fail) {
  73. bool ret = false;
  74. uint8_t data_one = 0;
  75. // 1 byte: fail, read, fail, write, fail, read
  76. data_one = 0;
  77. ret = furi_hal_i2c_read_reg_8(
  78. &furi_hal_i2c_handle_power,
  79. LP5562_ADDRESS + 0x10,
  80. LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
  81. &data_one,
  82. LP5562_I2C_TIMEOUT);
  83. mu_assert(!ret, "8 read_reg_8 failed");
  84. mu_assert(data_one == 0, "8 invalid data");
  85. ret = furi_hal_i2c_read_reg_8(
  86. &furi_hal_i2c_handle_power,
  87. LP5562_ADDRESS,
  88. LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
  89. &data_one,
  90. LP5562_I2C_TIMEOUT);
  91. mu_assert(ret, "9 read_reg_8 failed");
  92. mu_assert(data_one != 0, "9 invalid data");
  93. }
  94. MU_TEST_SUITE(furi_hal_i2c_int_suite) {
  95. MU_SUITE_CONFIGURE(&furi_hal_i2c_int_setup, &furi_hal_i2c_int_teardown);
  96. MU_RUN_TEST(furi_hal_i2c_int_1b);
  97. MU_RUN_TEST(furi_hal_i2c_int_3b);
  98. MU_RUN_TEST(furi_hal_i2c_int_1b_fail);
  99. }
  100. int run_minunit_test_furi_hal() {
  101. MU_RUN_SUITE(furi_hal_i2c_int_suite);
  102. return MU_EXIT_CODE;
  103. }