main.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include <stdarg.h>
  2. #include <stddef.h>
  3. #include <stdio.h>
  4. #include <rtthread.h>
  5. #include "rtthread_driver_spi.h"
  6. #include "chipset_interface.h"
  7. #include "platform_interface.h"
  8. #include "base/types.h"
  9. #include "utils/spool.h"
  10. #include <logging/bt_log_impl.h>
  11. #include <drivers/hci_driver.h>
  12. #include "host/hci_core.h"
  13. #include <bluetooth/bluetooth.h>
  14. #include <bluetooth/hci.h>
  15. extern void bt_ready(int err);
  16. extern void app_polling_work(void);
  17. int bt_init_hci_driver(void)
  18. {
  19. printk("bt_init_hci_driver \r\n");
  20. bt_BlueNRG_SPI_interface_t *p_interface = NULL;
  21. uint8_t spi_num;
  22. uint8_t device_num;
  23. p_interface = (bt_BlueNRG_SPI_interface_t *)bt_BlueNRG_get_SPI_interface();
  24. bt_BlueNRG_SPI_interface_t tmp = {0, 0, 0, 0, 0, 0, 0, 0};
  25. tmp.LSB_MSB = p_interface->LSB_MSB;
  26. tmp.Master_Slave = p_interface->Master_Slave;
  27. tmp.cs_pin_num = PKG_ZEPHYR_POLLING_HCI_SPI_CS_PIN_NUM;
  28. tmp.irq_pin_num = PKG_ZEPHYR_POLLING_HCI_SPI_IRQ_PIN_NUM;
  29. tmp.rate = PKG_ZEPHYR_POLLING_HCI_SPI_BAUDRATE;
  30. tmp.data_width = PKG_ZEPHYR_POLLING_HCI_SPI_DATA_WIDTH;
  31. tmp.CPOL = PKG_ZEPHYR_POLLING_HCI_SPI_CPOL;
  32. tmp.CPHA = PKG_ZEPHYR_POLLING_HCI_SPI_CPHA;
  33. spi_num = PKG_ZEPHYR_POLLING_HCI_SPI_BUS_INDEX;
  34. device_num = PKG_ZEPHYR_POLLING_HCI_SPI_DEVICE_INDEX;
  35. if (hci_driver_init(&tmp, device_num, spi_num) != 0)
  36. {
  37. printk("Error, SPI open failed.");
  38. return -1;
  39. }
  40. return 0;
  41. }
  42. void zephyr_polling_main(void* parameter)
  43. {
  44. int err = 0;
  45. bt_log_impl_register(bt_log_impl_local_instance());
  46. if (bt_init_hci_driver() < 0)
  47. {
  48. return;
  49. }
  50. bt_hci_chipset_driver_register(bt_hci_chipset_impl_local_instance());
  51. bt_storage_kv_register(bt_storage_kv_impl_local_instance());
  52. bt_timer_impl_local_init();
  53. /* Initialize the Bluetooth Subsystem */
  54. err = bt_enable(bt_ready);
  55. if(err)
  56. {
  57. printk("bt_enable(), err: %d\n", err);
  58. }
  59. #if defined(CONFIG_BT_MONITOR_SLEEP)
  60. bt_init_monitor_sleep();
  61. #endif
  62. while (1)
  63. {
  64. #if defined(CONFIG_BT_MONITOR_SLEEP)
  65. if (!bt_check_is_in_sleep())
  66. {
  67. bt_polling_work();
  68. if (bt_is_ready() && bt_check_allow_sleep())
  69. {
  70. bt_sleep_prepare_work();
  71. }
  72. }
  73. #else
  74. bt_polling_work();
  75. #endif
  76. app_polling_work();
  77. extern void hci_driver_init_loop(void);
  78. hci_driver_init_loop();
  79. // rt_thread_yield();
  80. rt_thread_delay(1);
  81. }
  82. }
  83. static int zephyr(void) {
  84. static rt_thread_t tid = RT_NULL;
  85. rt_kprintf("zephyr_polling_init \r\n");
  86. tid = rt_thread_create("zephyr_polling_main",
  87. zephyr_polling_main, RT_NULL,
  88. 4096,
  89. 5, 5);
  90. if (tid != RT_NULL)
  91. {
  92. rt_thread_startup(tid);
  93. }
  94. return 0;
  95. }
  96. // INIT_APP_EXPORT(zephyr_polling_init);
  97. MSH_CMD_EXPORT(zephyr, "zephyr_polling start");