basic.c 3.0 KB

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