diff options
author | あく <alleteam@gmail.com> | 2020-12-10 17:25:20 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-10 17:25:20 +0300 |
commit | 2f2f6b5f50443316551492898bd011e1e1591853 (patch) | |
tree | 64aadcca8b228f5266bdc3176591f9fe84fb4ae2 /applications/bt | |
parent | c4b1d4b6f0f6052c0f9a2c3dd842156d74ba358f (diff) |
BLE: F3 integration (#260)
* BLE: working version
* BLE: cleanup
* BLE: update device description and DIS.
* BLE: explicitly take semaphore and configure CLK48, bt subsystem status, remove LPM.
* HAL: add missing api_hal_bt_is_alive symbol
* TODO about valuemutex
* duplicate f3-1 (f4) ioc from f3
* regenerate project
* use target dir for ble glue path
* update f4 from f3
Co-authored-by: coreglitch <mail@s3f.ru>
Diffstat (limited to 'applications/bt')
-rw-r--r-- | applications/bt/bt.c | 58 | ||||
-rw-r--r-- | applications/bt/bt.h | 1 | ||||
-rw-r--r-- | applications/bt/bt_i.h | 19 |
3 files changed, 78 insertions, 0 deletions
diff --git a/applications/bt/bt.c b/applications/bt/bt.c new file mode 100644 index 00000000..ce1e3e61 --- /dev/null +++ b/applications/bt/bt.c @@ -0,0 +1,58 @@ +#include "bt_i.h" + +Bt* bt_alloc() { + Bt* bt = furi_alloc(sizeof(Bt)); + bt->cli = furi_open("cli"); + + bt->statusbar_icon = assets_icons_get(I_Bluetooth_5x8); + bt->statusbar_widget = widget_alloc(); + widget_set_width(bt->statusbar_widget, icon_get_width(bt->statusbar_icon) + 2); + widget_draw_callback_set(bt->statusbar_widget, bt_draw_statusbar_callback, bt); + widget_enabled_set(bt->statusbar_widget, false); + + return bt; +} + +void bt_draw_statusbar_callback(CanvasApi* canvas, void* context) { + assert(context); + Bt* bt = context; + canvas->draw_icon(canvas, 0, 0, bt->statusbar_icon); +} + +void bt_cli_info(string_t args, void* context) { + string_t buffer; + string_init(buffer); + api_hal_bt_dump_state(buffer); + cli_print(string_get_cstr(buffer)); + string_clear(buffer); +} + +void bt_task() { + Bt* bt = bt_alloc(); + + if(bt->cli) { + cli_add_command(bt->cli, "bt_info", bt_cli_info, bt); + } + + // TODO: add ValueMutex(bt) to "bt" record + if(!furi_create("bt", bt)) { + printf("[bt_task] unable to create bt record\n"); + furiac_exit(NULL); + } + + FuriRecordSubscriber* gui_record = furi_open_deprecated("gui", false, false, NULL, NULL, NULL); + furi_assert(gui_record); + GuiApi* gui = furi_take(gui_record); + furi_assert(gui); + gui->add_widget(gui, bt->statusbar_widget, GuiLayerStatusBarLeft); + furi_commit(gui_record); + + furiac_ready(); + + api_hal_bt_init(); + + while(1) { + widget_enabled_set(bt->statusbar_widget, api_hal_bt_is_alive()); + osDelay(1000); + } +} diff --git a/applications/bt/bt.h b/applications/bt/bt.h new file mode 100644 index 00000000..6f70f09b --- /dev/null +++ b/applications/bt/bt.h @@ -0,0 +1 @@ +#pragma once diff --git a/applications/bt/bt_i.h b/applications/bt/bt_i.h new file mode 100644 index 00000000..a3d98abf --- /dev/null +++ b/applications/bt/bt_i.h @@ -0,0 +1,19 @@ +#pragma once + +#include "bt.h" + +#include <cli/cli.h> +#include <flipper.h> +#include <flipper_v2.h> +#include <gui/gui.h> +#include <gui/widget.h> + +typedef struct { + Cli* cli; + Icon* statusbar_icon; + Widget* statusbar_widget; +} Bt; + +Bt* bt_alloc(); + +void bt_draw_statusbar_callback(CanvasApi* canvas, void* context); |