diff options
author | Nikolay Minaylov <nm29719@gmail.com> | 2021-11-26 16:53:51 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-26 16:53:51 +0300 |
commit | f52e9fc578882bf17d29ea029adffdac70411ee3 (patch) | |
tree | dc3d6b16ccb1c83ecde2bec7f8148bf86299b793 /firmware | |
parent | 3ab9112c21f4791da34a175b98700af4785b89e1 (diff) |
[FL-2051] BadUSB: new GUI (#844)
* [FL-2051] BadUsb: new GUI
* add missing assets
* skip empty lines and leading spaces
* SubGhz: add alignment check to keystore mess with iv routine
Co-authored-by: あく <alleteam@gmail.com>
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/targets/f6/furi-hal/furi-hal-usb-hid.c | 92 | ||||
-rw-r--r-- | firmware/targets/f7/furi-hal/furi-hal-usb-hid.c | 92 | ||||
-rw-r--r-- | firmware/targets/furi-hal-include/furi-hal-usb-hid.h | 9 |
3 files changed, 125 insertions, 68 deletions
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c b/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c index 1e35f7f7..0b583163 100644 --- a/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c +++ b/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c @@ -1,6 +1,7 @@ #include "furi-hal-version.h" #include "furi-hal-usb_i.h" #include "furi-hal-usb.h" +#include "furi-hal-usb-hid.h" #include <furi.h> #include "usb.h" @@ -37,24 +38,24 @@ static const uint8_t hid_report_desc[] = { HID_USAGE(HID_DESKTOP_KEYBOARD), HID_COLLECTION(HID_APPLICATION_COLLECTION), HID_REPORT_ID(ReportIdKeyboard), - HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), - HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL), - HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(1), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(8), + HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), + HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL), + HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(1), + HID_REPORT_SIZE(1), + HID_REPORT_COUNT(8), HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_COUNT(1), - HID_REPORT_SIZE(8), + HID_REPORT_COUNT(1), + HID_REPORT_SIZE(8), HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_COUNT(6), - HID_REPORT_SIZE(8), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(101), - HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), - HID_USAGE_MINIMUM(0), - HID_USAGE_MAXIMUM(101), + HID_REPORT_COUNT(6), + HID_REPORT_SIZE(8), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(101), + HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), + HID_USAGE_MINIMUM(0), + HID_USAGE_MAXIMUM(101), HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), HID_END_COLLECTION, HID_USAGE_PAGE(HID_PAGE_DESKTOP), @@ -63,25 +64,25 @@ static const uint8_t hid_report_desc[] = { HID_USAGE(HID_DESKTOP_POINTER), HID_COLLECTION(HID_PHYSICAL_COLLECTION), HID_REPORT_ID(ReportIdMouse), - HID_USAGE_PAGE(HID_PAGE_BUTTON), - HID_USAGE_MINIMUM(1), - HID_USAGE_MAXIMUM(3), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(1), - HID_REPORT_COUNT(3), - HID_REPORT_SIZE(1), + HID_USAGE_PAGE(HID_PAGE_BUTTON), + HID_USAGE_MINIMUM(1), + HID_USAGE_MAXIMUM(3), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(1), + HID_REPORT_COUNT(3), + HID_REPORT_SIZE(1), HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(5), + HID_REPORT_SIZE(1), + HID_REPORT_COUNT(5), HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_USAGE_PAGE(HID_PAGE_DESKTOP), - HID_USAGE(HID_DESKTOP_X), - HID_USAGE(HID_DESKTOP_Y), - HID_USAGE(HID_DESKTOP_WHEEL), - HID_LOGICAL_MINIMUM(-127), - HID_LOGICAL_MAXIMUM(127), - HID_REPORT_SIZE(8), - HID_REPORT_COUNT(3), + HID_USAGE_PAGE(HID_PAGE_DESKTOP), + HID_USAGE(HID_DESKTOP_X), + HID_USAGE(HID_DESKTOP_Y), + HID_USAGE(HID_DESKTOP_WHEEL), + HID_LOGICAL_MINIMUM(-127), + HID_LOGICAL_MAXIMUM(127), + HID_REPORT_SIZE(8), + HID_REPORT_COUNT(3), HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), HID_END_COLLECTION, HID_END_COLLECTION, @@ -194,11 +195,28 @@ static usbd_respond hid_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_ca static usbd_device* usb_dev; static osSemaphoreId_t hid_semaphore = NULL; static bool hid_connected = false; +static HidStateCallback callback; +static void* cb_ctx; bool furi_hal_hid_is_connected() { return hid_connected; } +void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) { + if (callback != NULL) { + if (hid_connected == true) + callback(false, cb_ctx); + } + + callback = cb; + cb_ctx = ctx; + + if (callback != NULL) { + if (hid_connected == true) + callback(true, cb_ctx); + } +} + bool furi_hal_hid_kb_press(uint16_t button) { for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) { if (hid_report.keyboard.btn[key_nb] == 0) { @@ -289,13 +307,19 @@ static void hid_deinit(usbd_device *dev) { } static void hid_on_wakeup(usbd_device *dev) { - hid_connected = true; + if (hid_connected == false) { + hid_connected = true; + if (callback != NULL) + callback(true, cb_ctx); + } } static void hid_on_suspend(usbd_device *dev) { if (hid_connected == true) { hid_connected = false; osSemaphoreRelease(hid_semaphore); + if (callback != NULL) + callback(false, cb_ctx); } } diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c b/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c index 1e35f7f7..0b583163 100644 --- a/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c +++ b/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c @@ -1,6 +1,7 @@ #include "furi-hal-version.h" #include "furi-hal-usb_i.h" #include "furi-hal-usb.h" +#include "furi-hal-usb-hid.h" #include <furi.h> #include "usb.h" @@ -37,24 +38,24 @@ static const uint8_t hid_report_desc[] = { HID_USAGE(HID_DESKTOP_KEYBOARD), HID_COLLECTION(HID_APPLICATION_COLLECTION), HID_REPORT_ID(ReportIdKeyboard), - HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), - HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL), - HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(1), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(8), + HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), + HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL), + HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(1), + HID_REPORT_SIZE(1), + HID_REPORT_COUNT(8), HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_COUNT(1), - HID_REPORT_SIZE(8), + HID_REPORT_COUNT(1), + HID_REPORT_SIZE(8), HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_COUNT(6), - HID_REPORT_SIZE(8), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(101), - HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), - HID_USAGE_MINIMUM(0), - HID_USAGE_MAXIMUM(101), + HID_REPORT_COUNT(6), + HID_REPORT_SIZE(8), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(101), + HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), + HID_USAGE_MINIMUM(0), + HID_USAGE_MAXIMUM(101), HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), HID_END_COLLECTION, HID_USAGE_PAGE(HID_PAGE_DESKTOP), @@ -63,25 +64,25 @@ static const uint8_t hid_report_desc[] = { HID_USAGE(HID_DESKTOP_POINTER), HID_COLLECTION(HID_PHYSICAL_COLLECTION), HID_REPORT_ID(ReportIdMouse), - HID_USAGE_PAGE(HID_PAGE_BUTTON), - HID_USAGE_MINIMUM(1), - HID_USAGE_MAXIMUM(3), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(1), - HID_REPORT_COUNT(3), - HID_REPORT_SIZE(1), + HID_USAGE_PAGE(HID_PAGE_BUTTON), + HID_USAGE_MINIMUM(1), + HID_USAGE_MAXIMUM(3), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(1), + HID_REPORT_COUNT(3), + HID_REPORT_SIZE(1), HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(5), + HID_REPORT_SIZE(1), + HID_REPORT_COUNT(5), HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_USAGE_PAGE(HID_PAGE_DESKTOP), - HID_USAGE(HID_DESKTOP_X), - HID_USAGE(HID_DESKTOP_Y), - HID_USAGE(HID_DESKTOP_WHEEL), - HID_LOGICAL_MINIMUM(-127), - HID_LOGICAL_MAXIMUM(127), - HID_REPORT_SIZE(8), - HID_REPORT_COUNT(3), + HID_USAGE_PAGE(HID_PAGE_DESKTOP), + HID_USAGE(HID_DESKTOP_X), + HID_USAGE(HID_DESKTOP_Y), + HID_USAGE(HID_DESKTOP_WHEEL), + HID_LOGICAL_MINIMUM(-127), + HID_LOGICAL_MAXIMUM(127), + HID_REPORT_SIZE(8), + HID_REPORT_COUNT(3), HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), HID_END_COLLECTION, HID_END_COLLECTION, @@ -194,11 +195,28 @@ static usbd_respond hid_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_ca static usbd_device* usb_dev; static osSemaphoreId_t hid_semaphore = NULL; static bool hid_connected = false; +static HidStateCallback callback; +static void* cb_ctx; bool furi_hal_hid_is_connected() { return hid_connected; } +void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) { + if (callback != NULL) { + if (hid_connected == true) + callback(false, cb_ctx); + } + + callback = cb; + cb_ctx = ctx; + + if (callback != NULL) { + if (hid_connected == true) + callback(true, cb_ctx); + } +} + bool furi_hal_hid_kb_press(uint16_t button) { for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) { if (hid_report.keyboard.btn[key_nb] == 0) { @@ -289,13 +307,19 @@ static void hid_deinit(usbd_device *dev) { } static void hid_on_wakeup(usbd_device *dev) { - hid_connected = true; + if (hid_connected == false) { + hid_connected = true; + if (callback != NULL) + callback(true, cb_ctx); + } } static void hid_on_suspend(usbd_device *dev) { if (hid_connected == true) { hid_connected = false; osSemaphoreRelease(hid_semaphore); + if (callback != NULL) + callback(false, cb_ctx); } } diff --git a/firmware/targets/furi-hal-include/furi-hal-usb-hid.h b/firmware/targets/furi-hal-include/furi-hal-usb-hid.h index eb4a2d9f..559a20af 100644 --- a/firmware/targets/furi-hal-include/furi-hal-usb-hid.h +++ b/firmware/targets/furi-hal-include/furi-hal-usb-hid.h @@ -250,6 +250,8 @@ static const uint16_t hid_asciimap[] = { KEY_NONE, // DEL }; +typedef void (*HidStateCallback)(bool state, void* context); + /** ASCII to keycode conversion macro */ #define HID_ASCII_TO_KEY(x) (((uint8_t)x < 128) ? (hid_asciimap[(uint8_t)x]) : KEY_NONE) @@ -266,6 +268,13 @@ enum HidMouseButtons { */ bool furi_hal_hid_is_connected(); +/** Set USB HID connect/disconnect callback + * + * @param cb callback + * @param ctx callback context + */ +void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx); + /** Set the following key to pressed state and send HID report * * @param button key code |