|
@@ -3,7 +3,7 @@
|
|
|
|
|
|
|
|
#include <furi.h>
|
|
#include <furi.h>
|
|
|
#include <furi_hal_bt.h>
|
|
#include <furi_hal_bt.h>
|
|
|
-#include <furi_hal_bt_hid.h>
|
|
|
|
|
|
|
+#include <extra_profiles/hid_profile.h>
|
|
|
#include <furi_hal_usb_hid.h>
|
|
#include <furi_hal_usb_hid.h>
|
|
|
#include <bt/bt_service/bt.h>
|
|
#include <bt/bt_service/bt.h>
|
|
|
#include <gui/elements.h>
|
|
#include <gui/elements.h>
|
|
@@ -21,6 +21,7 @@ struct BtMouse {
|
|
|
View* view;
|
|
View* view;
|
|
|
ViewDispatcher* view_dispatcher;
|
|
ViewDispatcher* view_dispatcher;
|
|
|
Bt* bt;
|
|
Bt* bt;
|
|
|
|
|
+ FuriHalBleProfileBase* ble_hid_profile;
|
|
|
NotificationApp* notifications;
|
|
NotificationApp* notifications;
|
|
|
FuriMutex* mutex;
|
|
FuriMutex* mutex;
|
|
|
FuriThread* thread;
|
|
FuriThread* thread;
|
|
@@ -118,7 +119,7 @@ static bool bt_mouse_input_callback(InputEvent* event, void* context) {
|
|
|
bool consumed = false;
|
|
bool consumed = false;
|
|
|
|
|
|
|
|
if(event->type == InputTypeLong && event->key == InputKeyBack) {
|
|
if(event->type == InputTypeLong && event->key == InputKeyBack) {
|
|
|
- furi_hal_bt_hid_mouse_release_all();
|
|
|
|
|
|
|
+ ble_profile_hid_mouse_release_all(bt_mouse->ble_hid_profile);
|
|
|
} else {
|
|
} else {
|
|
|
bt_mouse_process(bt_mouse, event);
|
|
bt_mouse_process(bt_mouse, event);
|
|
|
consumed = true;
|
|
consumed = true;
|
|
@@ -203,18 +204,18 @@ static int32_t bt_mouse_thread_callback(void* context) {
|
|
|
|
|
|
|
|
if(bt_mouse->connected && send_buttons) {
|
|
if(bt_mouse->connected && send_buttons) {
|
|
|
if(event.state) {
|
|
if(event.state) {
|
|
|
- furi_hal_bt_hid_mouse_press(event.button);
|
|
|
|
|
|
|
+ ble_profile_hid_mouse_press(bt_mouse->ble_hid_profile, event.button);
|
|
|
} else {
|
|
} else {
|
|
|
- furi_hal_bt_hid_mouse_release(event.button);
|
|
|
|
|
|
|
+ ble_profile_hid_mouse_release(bt_mouse->ble_hid_profile, event.button);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(bt_mouse->connected && (dx != 0 || dy != 0)) {
|
|
if(bt_mouse->connected && (dx != 0 || dy != 0)) {
|
|
|
- furi_hal_bt_hid_mouse_move(dx, dy);
|
|
|
|
|
|
|
+ ble_profile_hid_mouse_move(bt_mouse->ble_hid_profile, dx, dy);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(bt_mouse->connected && wheel != 0) {
|
|
if(bt_mouse->connected && wheel != 0) {
|
|
|
- furi_hal_bt_hid_mouse_scroll(wheel);
|
|
|
|
|
|
|
+ ble_profile_hid_mouse_scroll(bt_mouse->ble_hid_profile, wheel);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -253,7 +254,8 @@ void bt_mouse_enter_callback(void* context) {
|
|
|
bt_mouse->notifications = furi_record_open(RECORD_NOTIFICATION);
|
|
bt_mouse->notifications = furi_record_open(RECORD_NOTIFICATION);
|
|
|
bt_set_status_changed_callback(
|
|
bt_set_status_changed_callback(
|
|
|
bt_mouse->bt, bt_mouse_connection_status_changed_callback, bt_mouse);
|
|
bt_mouse->bt, bt_mouse_connection_status_changed_callback, bt_mouse);
|
|
|
- furi_assert(bt_set_profile(bt_mouse->bt, BtProfileHidKeyboard));
|
|
|
|
|
|
|
+ bt_mouse->ble_hid_profile = bt_profile_start(bt_mouse->bt, ble_profile_hid, NULL);
|
|
|
|
|
+ furi_check(bt_mouse->ble_hid_profile);
|
|
|
furi_hal_bt_start_advertising();
|
|
furi_hal_bt_start_advertising();
|
|
|
bt_mouse_thread_start(bt_mouse);
|
|
bt_mouse_thread_start(bt_mouse);
|
|
|
}
|
|
}
|
|
@@ -278,8 +280,8 @@ void bt_mouse_exit_callback(void* context) {
|
|
|
tracking_end();
|
|
tracking_end();
|
|
|
notification_internal_message(bt_mouse->notifications, &sequence_reset_blue);
|
|
notification_internal_message(bt_mouse->notifications, &sequence_reset_blue);
|
|
|
|
|
|
|
|
- furi_hal_bt_stop_advertising();
|
|
|
|
|
- bt_set_profile(bt_mouse->bt, BtProfileSerial);
|
|
|
|
|
|
|
+ bt_set_status_changed_callback(bt_mouse->bt, NULL, NULL);
|
|
|
|
|
+ furi_check(bt_profile_restore_default(bt_mouse->bt));
|
|
|
|
|
|
|
|
furi_record_close(RECORD_NOTIFICATION);
|
|
furi_record_close(RECORD_NOTIFICATION);
|
|
|
bt_mouse->notifications = NULL;
|
|
bt_mouse->notifications = NULL;
|