mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-26 22:40:25 +00:00
Merge branch 'ofw_dev' into dev
This commit is contained in:
commit
fc6e152fd1
3 changed files with 53 additions and 0 deletions
|
@ -27,6 +27,7 @@ static const uint32_t baudrate_list[] = {
|
||||||
460800,
|
460800,
|
||||||
921600,
|
921600,
|
||||||
};
|
};
|
||||||
|
static const char* software_de_re[] = {"None", "4"};
|
||||||
|
|
||||||
bool gpio_scene_usb_uart_cfg_on_event(void* context, SceneManagerEvent event) {
|
bool gpio_scene_usb_uart_cfg_on_event(void* context, SceneManagerEvent event) {
|
||||||
GpioApp* app = context;
|
GpioApp* app = context;
|
||||||
|
@ -84,6 +85,17 @@ static void line_port_cb(VariableItem* item) {
|
||||||
view_dispatcher_send_custom_event(app->view_dispatcher, GpioUsbUartEventConfigSet);
|
view_dispatcher_send_custom_event(app->view_dispatcher, GpioUsbUartEventConfigSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void line_software_de_re_cb(VariableItem* item) {
|
||||||
|
GpioApp* app = variable_item_get_context(item);
|
||||||
|
furi_assert(app);
|
||||||
|
uint8_t index = variable_item_get_current_value_index(item);
|
||||||
|
|
||||||
|
variable_item_set_current_value_text(item, software_de_re[index]);
|
||||||
|
|
||||||
|
app->usb_uart_cfg->software_de_re = index;
|
||||||
|
view_dispatcher_send_custom_event(app->view_dispatcher, GpioUsbUartEventConfigSet);
|
||||||
|
}
|
||||||
|
|
||||||
static void line_flow_cb(VariableItem* item) {
|
static void line_flow_cb(VariableItem* item) {
|
||||||
GpioApp* app = variable_item_get_context(item);
|
GpioApp* app = variable_item_get_context(item);
|
||||||
furi_assert(app);
|
furi_assert(app);
|
||||||
|
@ -155,6 +167,11 @@ void gpio_scene_usb_uart_cfg_on_enter(void* context) {
|
||||||
app->var_item_flow = item;
|
app->var_item_flow = item;
|
||||||
line_ensure_flow_invariant(app);
|
line_ensure_flow_invariant(app);
|
||||||
|
|
||||||
|
item = variable_item_list_add(
|
||||||
|
var_item_list, "DE/RE Pin", COUNT_OF(software_de_re), line_software_de_re_cb, app);
|
||||||
|
variable_item_set_current_value_index(item, app->usb_uart_cfg->software_de_re);
|
||||||
|
variable_item_set_current_value_text(item, software_de_re[app->usb_uart_cfg->software_de_re]);
|
||||||
|
|
||||||
variable_item_list_set_selected_item(
|
variable_item_list_set_selected_item(
|
||||||
var_item_list, scene_manager_get_scene_state(app->scene_manager, GpioAppViewUsbUartCfg));
|
var_item_list, scene_manager_get_scene_state(app->scene_manager, GpioAppViewUsbUartCfg));
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,16 @@
|
||||||
#include <furi_hal.h>
|
#include <furi_hal.h>
|
||||||
#include <furi_hal_usb_cdc.h>
|
#include <furi_hal_usb_cdc.h>
|
||||||
|
|
||||||
|
//TODO: FL-3276 port to new USART API
|
||||||
|
#include <stm32wbxx_ll_lpuart.h>
|
||||||
|
#include <stm32wbxx_ll_usart.h>
|
||||||
|
|
||||||
#define USB_CDC_PKT_LEN CDC_DATA_SZ
|
#define USB_CDC_PKT_LEN CDC_DATA_SZ
|
||||||
#define USB_UART_RX_BUF_SIZE (USB_CDC_PKT_LEN * 5)
|
#define USB_UART_RX_BUF_SIZE (USB_CDC_PKT_LEN * 5)
|
||||||
|
|
||||||
#define USB_CDC_BIT_DTR (1 << 0)
|
#define USB_CDC_BIT_DTR (1 << 0)
|
||||||
#define USB_CDC_BIT_RTS (1 << 1)
|
#define USB_CDC_BIT_RTS (1 << 1)
|
||||||
|
#define USB_USART_DE_RE_PIN &gpio_ext_pa4
|
||||||
|
|
||||||
static const GpioPin* flow_pins[][2] = {
|
static const GpioPin* flow_pins[][2] = {
|
||||||
{&gpio_ext_pa7, &gpio_ext_pa6}, // 2, 3
|
{&gpio_ext_pa7, &gpio_ext_pa6}, // 2, 3
|
||||||
|
@ -247,6 +252,17 @@ static int32_t usb_uart_worker(void* context) {
|
||||||
usb_uart->cfg.flow_pins = usb_uart->cfg_new.flow_pins;
|
usb_uart->cfg.flow_pins = usb_uart->cfg_new.flow_pins;
|
||||||
events |= WorkerEvtCtrlLineSet;
|
events |= WorkerEvtCtrlLineSet;
|
||||||
}
|
}
|
||||||
|
if(usb_uart->cfg.software_de_re != usb_uart->cfg_new.software_de_re) {
|
||||||
|
usb_uart->cfg.software_de_re = usb_uart->cfg_new.software_de_re;
|
||||||
|
if(usb_uart->cfg.software_de_re != 0) {
|
||||||
|
furi_hal_gpio_write(USB_USART_DE_RE_PIN, true);
|
||||||
|
furi_hal_gpio_init(
|
||||||
|
USB_USART_DE_RE_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedMedium);
|
||||||
|
} else {
|
||||||
|
furi_hal_gpio_init(
|
||||||
|
USB_USART_DE_RE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
|
||||||
|
}
|
||||||
|
}
|
||||||
api_lock_unlock(usb_uart->cfg_lock);
|
api_lock_unlock(usb_uart->cfg_lock);
|
||||||
}
|
}
|
||||||
if(events & WorkerEvtLineCfgSet) {
|
if(events & WorkerEvtLineCfgSet) {
|
||||||
|
@ -260,6 +276,8 @@ static int32_t usb_uart_worker(void* context) {
|
||||||
usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch);
|
usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch);
|
||||||
usb_uart_serial_deinit(usb_uart, usb_uart->cfg.uart_ch);
|
usb_uart_serial_deinit(usb_uart, usb_uart->cfg.uart_ch);
|
||||||
|
|
||||||
|
furi_hal_gpio_init(USB_USART_DE_RE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
|
||||||
|
|
||||||
if(usb_uart->cfg.flow_pins != 0) {
|
if(usb_uart->cfg.flow_pins != 0) {
|
||||||
furi_hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][0], GpioModeAnalog);
|
furi_hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][0], GpioModeAnalog);
|
||||||
furi_hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][1], GpioModeAnalog);
|
furi_hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][1], GpioModeAnalog);
|
||||||
|
@ -298,7 +316,24 @@ static int32_t usb_uart_tx_thread(void* context) {
|
||||||
|
|
||||||
if(len > 0) {
|
if(len > 0) {
|
||||||
usb_uart->st.tx_cnt += len;
|
usb_uart->st.tx_cnt += len;
|
||||||
|
|
||||||
|
if(usb_uart->cfg.software_de_re != 0)
|
||||||
|
furi_hal_gpio_write(USB_USART_DE_RE_PIN, false);
|
||||||
|
|
||||||
furi_hal_uart_tx(usb_uart->cfg.uart_ch, data, len);
|
furi_hal_uart_tx(usb_uart->cfg.uart_ch, data, len);
|
||||||
|
|
||||||
|
if(usb_uart->cfg.software_de_re != 0) {
|
||||||
|
//TODO: FL-3276 port to new USART API
|
||||||
|
if(usb_uart->cfg.uart_ch == FuriHalUartIdUSART1) {
|
||||||
|
while(!LL_USART_IsActiveFlag_TC(USART1))
|
||||||
|
;
|
||||||
|
} else if(usb_uart->cfg.uart_ch == FuriHalUartIdLPUART1) {
|
||||||
|
while(!LL_LPUART_IsActiveFlag_TC(LPUART1))
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
furi_hal_gpio_write(USB_USART_DE_RE_PIN, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ typedef struct {
|
||||||
uint8_t flow_pins;
|
uint8_t flow_pins;
|
||||||
uint8_t baudrate_mode;
|
uint8_t baudrate_mode;
|
||||||
uint32_t baudrate;
|
uint32_t baudrate;
|
||||||
|
uint8_t software_de_re;
|
||||||
} UsbUartConfig;
|
} UsbUartConfig;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Reference in a new issue