step_counter.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. struct bma400_int_enable step_int;
  14. int8_t rslt;
  15. uint8_t test_dur = 30;
  16. uint32_t step_count;
  17. uint8_t activity;
  18. set_interface(BMA400_SPI_INTF, &bma);
  19. rslt = bma400_init(&bma);
  20. print_rslt(rslt);
  21. rslt = bma400_soft_reset(&bma);
  22. print_rslt(rslt);
  23. step_int.type = BMA400_STEP_COUNTER_INT_EN;
  24. step_int.conf = BMA400_ENABLE;
  25. rslt = bma400_enable_interrupt(&step_int, 1, &bma);
  26. print_rslt(rslt);
  27. rslt = bma400_set_power_mode(BMA400_NORMAL_MODE, &bma);
  28. print_rslt(rslt);
  29. printf("Steps counted, Activity classifier\r\n");
  30. while (test_dur) {
  31. bma.delay_ms(1000);
  32. rslt = bma400_get_steps_counted(&step_count, &activity, &bma);
  33. printf("%ld", step_count);
  34. switch (activity) {
  35. case BMA400_STILL_ACT:
  36. printf(", Still\r\n");
  37. break;
  38. case BMA400_WALK_ACT:
  39. printf(", Walking\r\n");
  40. break;
  41. case BMA400_RUN_ACT:
  42. printf(", Running\r\n");
  43. break;
  44. default:
  45. printf(", undefined\r\n");
  46. break;
  47. }
  48. test_dur--;
  49. }
  50. return 0;
  51. }
  52. void set_interface(enum bma400_intf intf, struct bma400_dev *dev)
  53. {
  54. switch (intf) {
  55. case BMA400_I2C_INTF:
  56. dev->intf_ptr = NULL; /* To attach your interface device reference */
  57. dev->delay_ms = delay_ms;
  58. dev->dev_id = BMA400_I2C_ADDRESS_SDO_LOW;
  59. dev->read = i2c_reg_read;
  60. dev->write = i2c_reg_write;
  61. dev->intf = BMA400_I2C_INTF;
  62. break;
  63. case BMA400_SPI_INTF:
  64. dev->intf_ptr = NULL; /* To attach your interface device reference */
  65. dev->dev_id = 0; /* Could be used to identify the chip select line. */
  66. dev->read = spi_reg_read;
  67. dev->write = spi_reg_write;
  68. dev->intf = BMA400_SPI_INTF;
  69. break;
  70. default:
  71. printf("Interface not supported.\r\n");
  72. }
  73. }
  74. void delay_ms(uint32_t period)
  75. {
  76. /* Wait for a period amount of ms*/
  77. }
  78. int8_t i2c_reg_write(void *intf_ptr, uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  79. {
  80. /* Write to registers using I2C. Return 0 for a successful execution. */
  81. return -1;
  82. }
  83. int8_t i2c_reg_read(void *intf_ptr, uint8_t i2c_addr, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  84. {
  85. /* Read from registers using I2C. Return 0 for a successful execution. */
  86. return -1;
  87. }
  88. int8_t spi_reg_write(void *intf_ptr, uint8_t cs, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  89. {
  90. /* Write to registers using SPI. Return 0 for a successful execution. */
  91. return -1;
  92. }
  93. int8_t spi_reg_read(void *intf_ptr, uint8_t cs, uint8_t reg_addr, uint8_t *reg_data, uint16_t length)
  94. {
  95. /* Read from registers using SPI. Return 0 for a successful execution. */
  96. return -1;
  97. }
  98. void print_rslt(int8_t rslt)
  99. {
  100. switch (rslt) {
  101. case BMA400_OK:
  102. /* Do nothing */
  103. break;
  104. case BMA400_E_NULL_PTR:
  105. printf("Error [%d] : Null pointer\r\n", rslt);
  106. break;
  107. case BMA400_E_COM_FAIL:
  108. printf("Error [%d] : Communication failure\r\n", rslt);
  109. break;
  110. case BMA400_E_DEV_NOT_FOUND:
  111. printf("Error [%d] : Device not found\r\n", rslt);
  112. break;
  113. case BMA400_E_INVALID_CONFIG:
  114. printf("Error [%d] : Invalid configuration\r\n", rslt);
  115. break;
  116. case BMA400_W_SELF_TEST_FAIL:
  117. printf("Warning [%d] : Self test failed\r\n", rslt);
  118. break;
  119. default:
  120. printf("Error [%d] : Unknown error code\r\n", rslt);
  121. break;
  122. }
  123. }