self_test.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include <stdio.h>
  2. #include "bma400.h"
  3. void set_interface(enum bma400_intf intf, struct bma400_dev *dev);
  4. void delay_ms(uint32_t period);
  5. int8_t i2c_reg_write(void *intf_ptr, uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length);
  6. int8_t i2c_reg_read(void *intf_ptr, uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length);
  7. int8_t spi_reg_write(void *intf_ptr, uint8_t cs, uint8_t reg_addr, uint8_t *reg_data, uint16_t length);
  8. int8_t spi_reg_read(void *intf_ptr, uint8_t cs, uint8_t reg_addr, uint8_t *reg_data, uint16_t length);
  9. void print_rslt(int8_t rslt);
  10. int main(int argc, char const *argv[])
  11. {
  12. struct bma400_dev bma;
  13. int8_t rslt;
  14. set_interface(BMA400_SPI_INTF, &bma);
  15. rslt = bma400_init(&bma);
  16. print_rslt(rslt);
  17. rslt = bma400_soft_reset(&bma);
  18. print_rslt(rslt);
  19. rslt = bma400_perform_self_test(&bma);
  20. print_rslt(rslt);
  21. if (rslt == BMA400_OK) {
  22. printf("Self test passed.\r\n");
  23. }
  24. return 0;
  25. }
  26. void set_interface(enum bma400_intf intf, struct bma400_dev *dev)
  27. {
  28. switch (intf) {
  29. case BMA400_I2C_INTF:
  30. dev->intf_ptr = NULL; /* To attach your interface device reference */
  31. dev->delay_ms = delay_ms;
  32. dev->dev_id = BMA400_I2C_ADDRESS_SDO_LOW;
  33. dev->read = i2c_reg_read;
  34. dev->write = i2c_reg_write;
  35. dev->intf = BMA400_I2C_INTF;
  36. break;
  37. case BMA400_SPI_INTF:
  38. dev->intf_ptr = NULL; /* To attach your interface device reference */
  39. dev->dev_id = 0; /* Could be used to identify the chip select line. */
  40. dev->read = spi_reg_read;
  41. dev->write = spi_reg_write;
  42. dev->intf = BMA400_SPI_INTF;
  43. break;
  44. default:
  45. printf("Interface not supported.\r\n");
  46. }
  47. }
  48. void delay_ms(uint32_t period)
  49. {
  50. /* Wait for a period amount of ms*/
  51. }
  52. int8_t i2c_reg_write(void *intf_ptr, uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  53. {
  54. /* Write to registers using I2C. Return 0 for a successful execution. */
  55. return -1;
  56. }
  57. int8_t i2c_reg_read(void *intf_ptr, uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  58. {
  59. /* Read from registers using I2C. Return 0 for a successful execution. */
  60. return -1;
  61. }
  62. int8_t spi_reg_write(void *intf_ptr, uint8_t cs, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  63. {
  64. /* Write to registers using SPI. Return 0 for a successful execution. */
  65. return -1;
  66. }
  67. int8_t spi_reg_read(void *intf_ptr, uint8_t cs, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  68. {
  69. /* Read from registers using SPI. Return 0 for a successful execution. */
  70. return -1;
  71. }
  72. void print_rslt(int8_t rslt)
  73. {
  74. switch (rslt) {
  75. case BMA400_OK:
  76. /* Do nothing */
  77. break;
  78. case BMA400_E_NULL_PTR:
  79. printf("Error [%d] : Null pointer\r\n", rslt);
  80. break;
  81. case BMA400_E_COM_FAIL:
  82. printf("Error [%d] : Communication failure\r\n", rslt);
  83. break;
  84. case BMA400_E_DEV_NOT_FOUND:
  85. printf("Error [%d] : Device not found\r\n", rslt);
  86. break;
  87. case BMA400_E_INVALID_CONFIG:
  88. printf("Error [%d] : Invalid configuration\r\n", rslt);
  89. break;
  90. case BMA400_W_SELF_TEST_FAIL:
  91. printf("Warning [%d] : Self test failed\r\n", rslt);
  92. break;
  93. default:
  94. printf("Error [%d] : Unknown error code\r\n", rslt);
  95. break;
  96. }
  97. }