Skip to content

Commit

Permalink
Merge remote-tracking branch 'mntm/dev' into feat/use-after-free-sent…
Browse files Browse the repository at this point in the history
…inel
  • Loading branch information
Willy-JL committed Nov 27, 2024
2 parents d03620b + 49d29f8 commit 6485d7f
Show file tree
Hide file tree
Showing 21 changed files with 120 additions and 20 deletions.
18 changes: 13 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
### Added:
- Nothing
- Apps:
- Games: Pinball0 (by @rdefeo)
- NFC: Metroflip (by @luu176)

### Updated:
- Apps:
- FlipLibrary: Added dog facts and random quotes, bug fixes (by @jblanked), connectivity and progress improvements (by @jamisonderek)
- BT/USB Remote: Add PTT support for Gather (by @SapphicCode)
- ESP Flasher: Add c3 and c6 to s3 option (by @jaylikesbunda)
- FlipLibrary: Added Wikipedia, dog facts and random quotes, bug fixes (by @jblanked), connectivity and progress improvements (by @jamisonderek)
- FlipSocial: Improved authentication (by @jblanked)
- FlipStore: Many bugfixes, support ESP32 firmware downloads, allow deleting apps (by @jblanked)
- FlipWeather: Stability improvements (by @jblanked)
- FlipWiFi: Improved error handling (by @jblanked)
- FlipTrader: Improved progress display, added connectivity check on startup (by @jamisonderek)
- FlipWeather: Stability improvements (by @jblanked), improved progress display, added connectivity check on startup (by @jamisonderek)
- FlipWiFi: Improved error handling, updated scan loading and parsing (by @jblanked), added connectivity check on startup (by @jamisonderek)
- FlipBIP: Refactor to make adding coins easier (by @xtruan)
- uPython: Enabled extra functions for the `random` module (by @ofabel)
- Pokemon Trade Tool: Update to gblink v0.63 which includes saving/loading of pin configurations for the EXT link interface (by @kbembedded)
- Snake 2.0: Progress saving, endless mode, game timer, fruit positioning bugfixes (by @Willzvul)
- WebCrawler: Improved progress display, added connectivity check on startup (by @jamisonderek)
- UL: NFC Magic: Added possibility to write 7b MFC to Gen1 tags (by @mishamyte)
- UL: Fixed apps for firmware USB CDC callback changes (by @xMasterX)

### Fixed:
- Nothing
- Desktop: Fixed Wardriving animation design (by @Davim09)
- OFW: GPIO: Merged gsurkov/vcp_break_support branch for usb uart bridge (WIP!!!)

### Removed:
- Nothing
2 changes: 2 additions & 0 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,8 @@ black_commandline = [
black_base_args = [
"--include",
'"(\\.scons|\\.py|SConscript|SConstruct|\\.fam)$"',
"--exclude",
'"(mp_flipper/flipperzero/random\\.py)$"',
]

distenv.PhonyTarget(
Expand Down
2 changes: 1 addition & 1 deletion applications/external
Submodule external updated 152 files
15 changes: 13 additions & 2 deletions applications/main/gpio/usb_uart_bridge.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ typedef enum {

WorkerEvtLineCfgSet = (1 << 6),
WorkerEvtCtrlLineSet = (1 << 7),

WorkerEvtSendBreak = (1 << 8),
} WorkerEvtFlags;

#define WORKER_ALL_RX_EVENTS \
(WorkerEvtStop | WorkerEvtRxDone | WorkerEvtCfgChange | WorkerEvtLineCfgSet | \
WorkerEvtCtrlLineSet | WorkerEvtCdcTxComplete)
WorkerEvtCtrlLineSet | WorkerEvtCdcTxComplete | WorkerEvtSendBreak)
#define WORKER_ALL_TX_EVENTS (WorkerEvtTxStop | WorkerEvtCdcRx)

struct UsbUartBridge {
Expand Down Expand Up @@ -69,13 +69,15 @@ static void vcp_on_cdc_rx(void* context);
static void vcp_state_callback(void* context, uint8_t state);
static void vcp_on_cdc_control_line(void* context, uint8_t state);
static void vcp_on_line_config(void* context, struct usb_cdc_line_coding* config);
static void vcp_on_cdc_break(void* context, uint16_t duration);

static const CdcCallbacks cdc_cb = {
vcp_on_cdc_tx_complete,
vcp_on_cdc_rx,
vcp_state_callback,
vcp_on_cdc_control_line,
vcp_on_line_config,
vcp_on_cdc_break,
};

/* USB UART worker */
Expand Down Expand Up @@ -287,6 +289,9 @@ static int32_t usb_uart_worker(void* context) {
if(events & WorkerEvtCtrlLineSet) {
usb_uart_update_ctrl_lines(usb_uart);
}
if(events & WorkerEvtSendBreak) {
furi_hal_serial_send_break(usb_uart->serial_handle);
}
}
usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch);
usb_uart_serial_deinit(usb_uart);
Expand Down Expand Up @@ -377,6 +382,12 @@ static void vcp_on_line_config(void* context, struct usb_cdc_line_coding* config
furi_thread_flags_set(furi_thread_get_id(usb_uart->thread), WorkerEvtLineCfgSet);
}

static void vcp_on_cdc_break(void* context, uint16_t duration) {
UNUSED(duration);
UsbUartBridge* usb_uart = (UsbUartBridge*)context;
furi_thread_flags_set(furi_thread_get_id(usb_uart->thread), WorkerEvtSendBreak);
}

UsbUartBridge* usb_uart_enable(UsbUartConfig* cfg) {
UsbUartBridge* usb_uart = malloc(sizeof(UsbUartBridge));

Expand Down
1 change: 1 addition & 0 deletions applications/services/cli/cli_vcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ static CdcCallbacks cdc_cb = {
vcp_state_callback,
vcp_on_cdc_control_line,
NULL,
NULL,
};

static CliVcp* vcp = NULL;
Expand Down
58 changes: 55 additions & 3 deletions applications/system/hid_app/views/hid_ptt.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ typedef struct {
enum HidPushToTalkAppIndex {
HidPushToTalkAppIndexDiscord,
HidPushToTalkAppIndexFaceTime,
HidPushToTalkAppIndexGather,
HidPushToTalkAppIndexGoogleMeet,
HidPushToTalkAppIndexGoogleHangouts,
HidPushToTalkAppIndexJamulus,
Expand Down Expand Up @@ -308,7 +309,6 @@ static void hid_ptt_trigger_mute_jamulus(HidPushToTalk* hid_ptt) {
}

// webex

static void hid_ptt_trigger_camera_webex(HidPushToTalk* hid_ptt) {
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
hid_hal_keyboard_release(
Expand All @@ -325,6 +325,30 @@ static void hid_ptt_trigger_hand_linux_webex(HidPushToTalk* hid_ptt) {
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
}

// Gather
static void hid_ptt_trigger_hand_gather(HidPushToTalk* hid_ptt) {
hid_hal_keyboard_press(hid_ptt->hid, HID_KEYBOARD_H);
hid_hal_keyboard_release(hid_ptt->hid, HID_KEYBOARD_H);
}
static void hid_ptt_trigger_camera_macos_gather(HidPushToTalk* hid_ptt) {
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
}
static void hid_ptt_trigger_mute_macos_gather(HidPushToTalk* hid_ptt) {
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
}
static void hid_ptt_trigger_camera_linux_gather(HidPushToTalk* hid_ptt) {
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
hid_hal_keyboard_release(
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
}
static void hid_ptt_trigger_mute_linux_gather(HidPushToTalk* hid_ptt) {
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
hid_hal_keyboard_release(
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
}

static void hid_ptt_menu_callback(
void* context,
uint32_t osIndex,
Expand Down Expand Up @@ -359,6 +383,13 @@ static void hid_ptt_menu_callback(
model->callback_start_ptt = hid_ptt_trigger_cmd_shift_m;
model->callback_stop_ptt = hid_ptt_trigger_cmd_shift_m;
break;
case HidPushToTalkAppIndexGather:
model->callback_trigger_mute = hid_ptt_trigger_mute_macos_gather;
model->callback_trigger_camera = hid_ptt_trigger_camera_macos_gather;
model->callback_trigger_hand = hid_ptt_trigger_hand_gather;
model->callback_start_ptt = hid_ptt_trigger_mute_macos_gather;
model->callback_stop_ptt = hid_ptt_trigger_mute_macos_gather;
break;
case HidPushToTalkAppIndexGoogleHangouts:
model->callback_trigger_mute = hid_ptt_trigger_mute_macos_hangouts;
model->callback_trigger_camera = hid_ptt_trigger_camera_macos_hangouts;
Expand Down Expand Up @@ -434,6 +465,13 @@ static void hid_ptt_menu_callback(
model->callback_start_ptt = hid_ptt_start_ptt_linux_discord;
model->callback_stop_ptt = hid_ptt_stop_ptt_linux_discord;
break;
case HidPushToTalkAppIndexGather:
model->callback_trigger_mute = hid_ptt_trigger_mute_linux_gather;
model->callback_trigger_camera = hid_ptt_trigger_camera_linux_gather;
model->callback_trigger_hand = hid_ptt_trigger_hand_gather;
model->callback_start_ptt = hid_ptt_trigger_mute_linux_gather;
model->callback_stop_ptt = hid_ptt_trigger_mute_linux_gather;
break;
case HidPushToTalkAppIndexGoogleHangouts:
model->callback_trigger_mute = hid_ptt_trigger_mute_linux_hangouts;
model->callback_trigger_camera = hid_ptt_trigger_camera_linux_hangouts;
Expand Down Expand Up @@ -873,6 +911,20 @@ HidPushToTalk* hid_ptt_alloc(Hid* hid) {
HidPushToTalkAppIndexFaceTime,
hid_ptt_menu_callback,
hid_ptt);
ptt_menu_add_item_to_list(
hid->hid_ptt_menu,
HidPushToTalkMacOS,
"Gather",
HidPushToTalkAppIndexGather,
hid_ptt_menu_callback,
hid_ptt);
ptt_menu_add_item_to_list(
hid->hid_ptt_menu,
HidPushToTalkLinux,
"Gather",
HidPushToTalkAppIndexGather,
hid_ptt_menu_callback,
hid_ptt);
ptt_menu_add_item_to_list(
hid->hid_ptt_menu,
HidPushToTalkMacOS,
Expand Down Expand Up @@ -932,14 +984,14 @@ HidPushToTalk* hid_ptt_alloc(Hid* hid) {
ptt_menu_add_item_to_list(
hid->hid_ptt_menu,
HidPushToTalkMacOS,
"Slack Hubble",
"Slack Huddle",
HidPushToTalkAppIndexSlackHubble,
hid_ptt_menu_callback,
hid_ptt);
ptt_menu_add_item_to_list(
hid->hid_ptt_menu,
HidPushToTalkLinux,
"Slack Hubble",
"Slack Huddle",
HidPushToTalkAppIndexSlackHubble,
hid_ptt_menu_callback,
hid_ptt);
Expand Down
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/dolphin/external/L1_Wardriving_128x64/frame_6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
12 changes: 6 additions & 6 deletions assets/dolphin/external/L1_Wardriving_128x64/meta.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ Version: 1

Width: 128
Height: 64
Passive frames: 9
Passive frames: 8
Active frames: 0
Frames order: 0 1 2 3 4 5 6 7 7
Frames order: 0 1 2 3 4 5 6 6
Active cycles: 0
Frame rate: 2
Duration: 360
Frame rate: 1
Duration: 3600
Active cooldown: 0

Bubble slots: 1
Expand All @@ -19,5 +19,5 @@ Y: 14
Text: Pwned!
AlignH: Left
AlignV: Center
StartFrame: 7
EndFrame: 8
StartFrame: 6
EndFrame: 7
1 change: 1 addition & 0 deletions targets/f18/api_symbols.csv
Original file line number Diff line number Diff line change
Expand Up @@ -1446,6 +1446,7 @@ Function,+,furi_hal_serial_get_gpio_pin,const GpioPin*,"FuriHalSerialHandle*, Fu
Function,+,furi_hal_serial_init,void,"FuriHalSerialHandle*, uint32_t"
Function,+,furi_hal_serial_is_baud_rate_supported,_Bool,"FuriHalSerialHandle*, uint32_t"
Function,+,furi_hal_serial_resume,void,FuriHalSerialHandle*
Function,+,furi_hal_serial_send_break,void,FuriHalSerialHandle*
Function,+,furi_hal_serial_set_br,void,"FuriHalSerialHandle*, uint32_t"
Function,+,furi_hal_serial_suspend,void,FuriHalSerialHandle*
Function,+,furi_hal_serial_tx,void,"FuriHalSerialHandle*, const uint8_t*, size_t"
Expand Down
1 change: 1 addition & 0 deletions targets/f7/api_symbols.csv
Original file line number Diff line number Diff line change
Expand Up @@ -1691,6 +1691,7 @@ Function,+,furi_hal_serial_get_gpio_pin,const GpioPin*,"FuriHalSerialHandle*, Fu
Function,+,furi_hal_serial_init,void,"FuriHalSerialHandle*, uint32_t"
Function,+,furi_hal_serial_is_baud_rate_supported,_Bool,"FuriHalSerialHandle*, uint32_t"
Function,+,furi_hal_serial_resume,void,FuriHalSerialHandle*
Function,+,furi_hal_serial_send_break,void,FuriHalSerialHandle*
Function,+,furi_hal_serial_set_br,void,"FuriHalSerialHandle*, uint32_t"
Function,+,furi_hal_serial_suspend,void,FuriHalSerialHandle*
Function,+,furi_hal_serial_tx,void,"FuriHalSerialHandle*, const uint8_t*, size_t"
Expand Down
10 changes: 10 additions & 0 deletions targets/f7/furi_hal/furi_hal_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -950,3 +950,13 @@ const GpioPin*

return furi_hal_serial_config[handle->id].gpio[direction];
}

void furi_hal_serial_send_break(FuriHalSerialHandle* handle) {
furi_check(handle);

if(handle->id == FuriHalSerialIdUsart) {
LL_USART_RequestBreakSending(USART1);
} else {
LL_LPUART_RequestBreakSending(LPUART1);
}
}
6 changes: 6 additions & 0 deletions targets/f7/furi_hal/furi_hal_serial.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,12 @@ void furi_hal_serial_dma_rx_stop(FuriHalSerialHandle* handle);
*/
size_t furi_hal_serial_dma_rx(FuriHalSerialHandle* handle, uint8_t* data, size_t len);

/** Send a break sequence (low level for the whole character duration)
*
* @param handle Serial handle
*/
void furi_hal_serial_send_break(FuriHalSerialHandle* handle);

#ifdef __cplusplus
}
#endif
13 changes: 10 additions & 3 deletions targets/f7/furi_hal/furi_hal_usb_cdc.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ static const struct CdcConfigDescriptorSingle cdc_cfg_desc_single = {
.bFunctionLength = sizeof(struct usb_cdc_acm_desc),
.bDescriptorType = USB_DTYPE_CS_INTERFACE,
.bDescriptorSubType = USB_DTYPE_CDC_ACM,
.bmCapabilities = 0,
.bmCapabilities = USB_CDC_CAP_BRK,
},
.cdc_union =
{
Expand Down Expand Up @@ -235,7 +235,7 @@ static const struct CdcConfigDescriptorDual
.bFunctionLength = sizeof(struct usb_cdc_acm_desc),
.bDescriptorType = USB_DTYPE_CS_INTERFACE,
.bDescriptorSubType = USB_DTYPE_CDC_ACM,
.bmCapabilities = 0,
.bmCapabilities = USB_CDC_CAP_BRK,
},
.cdc_union =
{
Expand Down Expand Up @@ -330,7 +330,7 @@ static const struct CdcConfigDescriptorDual
.bFunctionLength = sizeof(struct usb_cdc_acm_desc),
.bDescriptorType = USB_DTYPE_CS_INTERFACE,
.bDescriptorSubType = USB_DTYPE_CDC_ACM,
.bmCapabilities = 0,
.bmCapabilities = USB_CDC_CAP_BRK,
},
.cdc_union =
{
Expand Down Expand Up @@ -680,6 +680,13 @@ static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_cal
dev->status.data_ptr = &cdc_config[if_num];
dev->status.data_count = sizeof(cdc_config[0]);
return usbd_ack;
case USB_CDC_SEND_BREAK:
if(callbacks[if_num] != NULL) {
if(callbacks[if_num]->break_callback != NULL) {
callbacks[if_num]->break_callback(cb_ctx[if_num], req->wValue);
}
}
return usbd_ack;
default:
return usbd_fail;
}
Expand Down
1 change: 1 addition & 0 deletions targets/f7/furi_hal/furi_hal_usb_cdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ typedef struct {
void (*state_callback)(void* context, uint8_t state);
void (*ctrl_line_callback)(void* context, uint8_t state);
void (*config_callback)(void* context, struct usb_cdc_line_coding* config);
void (*break_callback)(void* context, uint16_t duration);
} CdcCallbacks;

void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context);
Expand Down

0 comments on commit 6485d7f

Please sign in to comment.