From 196748f97785fd7f40002ac7b3a77d7cd797bde3 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 11 Jun 2023 20:30:06 +0100 Subject: [PATCH] Add furi_hal_usb_get_config_context() --- firmware/targets/f7/api_symbols.csv | 1 + firmware/targets/f7/furi_hal/furi_hal_usb.c | 19 +++++++++++++++++++ .../targets/furi_hal_include/furi_hal_usb.h | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index ca15ff430..23fe7ac3c 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1499,6 +1499,7 @@ Function,+,furi_hal_uart_tx,void,"FuriHalUartId, uint8_t*, size_t" Function,+,furi_hal_usb_disable,void, Function,+,furi_hal_usb_enable,void, Function,+,furi_hal_usb_get_config,FuriHalUsbInterface*, +Function,+,furi_hal_usb_get_config_context,void*, Function,-,furi_hal_usb_init,void, Function,+,furi_hal_usb_is_locked,_Bool, Function,+,furi_hal_usb_lock,void, diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb.c b/firmware/targets/f7/furi_hal/furi_hal_usb.c index b88168d5d..3f9f7cbee 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_usb.c +++ b/firmware/targets/f7/furi_hal/furi_hal_usb.c @@ -17,6 +17,7 @@ typedef enum { UsbApiEventTypeSetConfig, UsbApiEventTypeGetConfig, + UsbApiEventTypeGetConfigContext, UsbApiEventTypeLock, UsbApiEventTypeUnlock, UsbApiEventTypeIsLocked, @@ -168,6 +169,21 @@ FuriHalUsbInterface* furi_hal_usb_get_config() { return return_data.void_value; } +void* furi_hal_usb_get_config_context() { + UsbApiEventReturnData return_data = { + .void_value = NULL, + }; + + UsbApiEventMessage msg = { + .lock = api_lock_alloc_locked(), + .type = UsbApiEventTypeGetConfigContext, + .return_data = &return_data, + }; + + furi_hal_usb_send_message(&msg); + return return_data.void_value; +} + void furi_hal_usb_lock() { UsbApiEventMessage msg = { .lock = api_lock_alloc_locked(), @@ -411,6 +427,9 @@ static void usb_process_message(UsbApiEventMessage* message) { case UsbApiEventTypeGetConfig: message->return_data->void_value = usb.interface; break; + case UsbApiEventTypeGetConfigContext: + message->return_data->void_value = usb.interface_context; + break; case UsbApiEventTypeLock: FURI_LOG_I(TAG, "Mode lock"); usb.mode_lock = true; diff --git a/firmware/targets/furi_hal_include/furi_hal_usb.h b/firmware/targets/furi_hal_include/furi_hal_usb.h index 8b49f6c65..2affb3d6d 100644 --- a/firmware/targets/furi_hal_include/furi_hal_usb.h +++ b/firmware/targets/furi_hal_include/furi_hal_usb.h @@ -56,6 +56,12 @@ bool furi_hal_usb_set_config(FuriHalUsbInterface* new_if, void* ctx); */ FuriHalUsbInterface* furi_hal_usb_get_config(); +/** Get USB device configuration context + * + * @return current USB device context + */ +void* furi_hal_usb_get_config_context(); + /** Lock USB device mode switch */ void furi_hal_usb_lock();