seos_native_peripheral.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "seos_native_peripheral_i.h"
  2. #define TAG "SeosNativePeripheral"
  3. static void seos_ble_connection_status_callback(BtStatus status, void* context) {
  4. furi_assert(context);
  5. SeosNativePeripheral* seos_native_peripheral = context;
  6. FURI_LOG_D(TAG, "seos_ble_connection_status_callback %d", (status == BtStatusConnected));
  7. if(status == BtStatusConnected) {
  8. view_dispatcher_send_custom_event(
  9. seos_native_peripheral->seos->view_dispatcher, SeosCustomEventConnected);
  10. } else if (status == BtStatusAdvertising) {
  11. view_dispatcher_send_custom_event(
  12. seos_native_peripheral->seos->view_dispatcher, SeosCustomEventAdvertising);
  13. }
  14. }
  15. static uint16_t seos_svc_callback(SeosServiceEvent event, void* context) {
  16. FURI_LOG_D(TAG, "seos_svc_callback");
  17. SeosNativePeripheral* seos_native_peripheral = context;
  18. UNUSED(seos_native_peripheral);
  19. UNUSED(event);
  20. return 0;
  21. }
  22. SeosNativePeripheral* seos_native_peripheral_alloc(Seos* seos) {
  23. SeosNativePeripheral* seos_native_peripheral = malloc(sizeof(SeosNativePeripheral));
  24. memset(seos_native_peripheral, 0, sizeof(SeosNativePeripheral));
  25. seos_native_peripheral->seos = seos;
  26. seos_native_peripheral->bt = furi_record_open(RECORD_BT);
  27. return seos_native_peripheral;
  28. }
  29. void seos_native_peripheral_free(SeosNativePeripheral* seos_native_peripheral) {
  30. furi_assert(seos_native_peripheral);
  31. furi_record_close(RECORD_BT);
  32. free(seos_native_peripheral);
  33. }
  34. void seos_native_peripheral_start(SeosNativePeripheral* seos_native_peripheral, FlowMode mode) {
  35. UNUSED(mode);
  36. bt_disconnect(seos_native_peripheral->bt);
  37. // Wait 2nd core to update nvm storage
  38. furi_delay_ms(200);
  39. seos_native_peripheral->ble_profile =
  40. bt_profile_start(seos_native_peripheral->bt, ble_profile_seos, NULL);
  41. furi_check(seos_native_peripheral->ble_profile);
  42. bt_set_status_changed_callback(
  43. seos_native_peripheral->bt, seos_ble_connection_status_callback, seos_native_peripheral);
  44. ble_profile_seos_set_event_callback(
  45. seos_native_peripheral->ble_profile, 32, seos_svc_callback, seos_native_peripheral);
  46. furi_hal_bt_start_advertising();
  47. view_dispatcher_send_custom_event(
  48. seos_native_peripheral->seos->view_dispatcher, SeosCustomEventAdvertising);
  49. }
  50. void seos_native_peripheral_stop(SeosNativePeripheral* seos_native_peripheral) {
  51. furi_hal_bt_stop_advertising();
  52. bt_set_status_changed_callback(seos_native_peripheral->bt, NULL, NULL);
  53. bt_disconnect(seos_native_peripheral->bt);
  54. // Wait 2nd core to update nvm storage
  55. furi_delay_ms(200);
  56. bt_keys_storage_set_default_path(seos_native_peripheral->bt);
  57. furi_check(bt_profile_restore_default(seos_native_peripheral->bt));
  58. }