Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolay Minaylov <nm29719@gmail.com>2021-11-26 16:53:51 +0300
committerGitHub <noreply@github.com>2021-11-26 16:53:51 +0300
commitf52e9fc578882bf17d29ea029adffdac70411ee3 (patch)
treedc3d6b16ccb1c83ecde2bec7f8148bf86299b793 /firmware
parent3ab9112c21f4791da34a175b98700af4785b89e1 (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.c92
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-usb-hid.c92
-rw-r--r--firmware/targets/furi-hal-include/furi-hal-usb-hid.h9
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