fix: Missing configurable port code, R9M Access, support FRM303 via mod (#3442)

* Fix configurable external module port

* Added FRM303 support for TX16S via AUX1 mod, i.e. direct connect AUX1 TX/RX to PPM/Heartbeat pins.

---------

Co-authored-by: raphaelcoeffic <raphael.coeffic@frafos.com>
This commit is contained in:
richardclli
2023-04-15 19:04:34 +10:00
committed by GitHub
co-authored by raphaelcoeffic
parent e03add0b86
commit 125fd2ba28
5 changed files with 37 additions and 17 deletions
+10 -10
View File
@@ -31,6 +31,16 @@ extern const uint8_t _n_modules;
static etx_module_state_t _module_states[MAX_MODULES];
static uint8_t _module_power;
#if defined(CONFIGURABLE_MODULE_PORT)
// supplemental configurable port
static etx_module_port_t _extra_module_port;
void modulePortConfigExtra(const etx_module_port_t* port)
{
memcpy(&_extra_module_port, port, sizeof(_extra_module_port));
}
#endif
void modulePortInit()
{
memset(_module_states, 0, sizeof(_module_states));
@@ -42,16 +52,6 @@ void modulePortInit()
#endif
}
#if defined(CONFIGURABLE_MODULE_PORT)
// supplemental configurable port
static etx_module_port_t _extra_module_port;
void modulePortConfigExtra(const etx_module_port_t* port)
{
memcpy(&_extra_module_port, port, sizeof(_extra_module_port));
}
#endif
static void modulePortClear(etx_module_state_t* st)
{
memset(st, 0, sizeof(etx_module_state_t));
+10 -2
View File
@@ -992,10 +992,18 @@ static void* initModule(uint8_t module)
module == INTERNAL_MODULE ? ETX_Pol_Normal : ETX_Pol_Inverted;
mod_st = modulePortInitSerial(module, ETX_MOD_PORT_UART, &params);
if (module == EXTERNAL_MODULE && !mod_st) {
#if defined(CONFIGURABLE_MODULE_PORT)
if (!mod_st && module == EXTERNAL_MODULE) {
// Try Connect using aux serial mod
params.polarity = ETX_Pol_Normal;
mod_st = modulePortInitSerial(module, ETX_MOD_PORT_UART, &params);
}
#endif
if (!mod_st && module == EXTERNAL_MODULE) {
// soft-serial fallback
params.baudrate = AFHDS3_SOFTSERIAL_BAUDRATE;
params.direction = ETX_Dir_RX;
params.direction = ETX_Dir_TX;
period = AFHDS3_SOFTSERIAL_COMMAND_TIMEOUT * 1000 /* us */;
mod_st = modulePortInitSerial(module, ETX_MOD_PORT_SOFT_INV, &params);
// TODO: telemetry RX ???
+1 -1
View File
@@ -470,7 +470,7 @@ static void pulsesEnableModule(uint8_t module, uint8_t protocol)
break;
#endif
#if defined(INTERNAL_MODULE_AFHDS3)
#if defined(INTERNAL_MODULE_AFHDS3) || defined(AFHDS3)
case PROTOCOL_CHANNELS_AFHDS3:
_init_module(module, &afhds3::ProtoDriver);
break;
+12 -4
View File
@@ -29,6 +29,11 @@
#include "hal/serial_port.h"
#if defined(CONFIGURABLE_MODULE_PORT)
#include "hal/module_port.h"
#include "tasks/mixer_task.h"
#endif
#if !defined(BOOT)
#include "opentx.h"
#include "lua/lua_api.h"
@@ -257,13 +262,14 @@ static void serialSetCallBacks(int mode, void* ctx, const etx_serial_port_t* por
etx_module_port_t mod_port;
memset(&mod_port, 0, sizeof(mod_port));
auto mod_st = modulePortGetState(EXTERNAL_MODULE);
if (mod_st && mod_st->tx.hw_def == port->hw_def) {
if (mod_st && mod_st->tx.port &&
mod_st->tx.port->hw_def == port->hw_def) {
// port is in use, let's stop it
mixerTaskStop();
pausePulses();
pulsesStop();
pulsesStopModule(EXTERNAL_MODULE);
modulePortConfigExtra(&mod_port);
resumePulses();
pulsesStart();
mixerTaskStart();
} else {
modulePortConfigExtra(&mod_port);
@@ -397,10 +403,12 @@ void serialInit(uint8_t port_nr, int mode)
#if defined(CONFIGURABLE_MODULE_PORT)
if (mode == UART_MODE_EXT_MODULE) {
etx_module_port_t mod_port = {
.port = ETX_MOD_PORT_EXTERNAL_UART,
.port = ETX_MOD_PORT_UART,
.type = ETX_MOD_TYPE_SERIAL,
.dir_flags = ETX_MOD_DIR_TX_RX,
.drv = { .serial = port->uart },
.hw_def = port->hw_def,
.set_inverted = nullptr,
};
modulePortConfigExtra(&mod_port);
state->mode = mode;
+4
View File
@@ -193,6 +193,10 @@ if(IMU_LSM6DS33)
set(AUX_SERIAL OFF)
endif()
if(AUX_SERIAL)
add_definitions(-DCONFIGURABLE_MODULE_PORT)
endif()
if(NOT INTERNAL_MODULE_PXX1)
option(ALLOW_TRAINER_MULTI "Allow multimodule to be use as trainer input" OFF)
endif()