chore: New module/serial API (#3055)
* WiP: new module interface * WiP: softserial timer DMA * WiP: setup() and send() in one step and remove methods specific to internal or external module * fixes and extra port config * horus targets * module ports have moved * T8 support (only internal module) * fix nv14 * stupid GCC.... * disable BT * remove nv14 telem driver * remove old aux serial driver * Move module buffers out of pulses.h * Soft serial fixes and PXX1 support * Fixed PPM module output * Fixed CLI * compilation fixes * Ported bluetooth and flysky gimbal to new serial driver * Re-enable soft-serial RX * fixes and cleanup * nv14 fixes * Fix flysky gimbals * Ghost module * 16 bytes of RAM * Remove getByte from module API * Ghost cleanup * fix: _half_duplex_input() must be called after usart init * WiP * more cleanup * Remove board specific settings from PXX1 / PXX2 drivers * A bit of PXX2 header cleanup * Add support for OVER8 and ONEBIT * Add some support for inverters (NV14 / EL18) * Support NV14 power fixes in generic board * Fix polarity handling * Fix RX DMA * Fix mixer not running * Add soft-serial polarity control * Quick fix for telemetry polling while module port is changed * Fix bootloader DEBUG * Fix MPM telemetry * Fix pulse start * DSM2 soft-serial fallback * DSMP async module restart * Fix CRSF LUA upstream * Remove global variable telemetryProtocol * Use HAL/LL constants * Fix various issue with AFHDS3 and NV14/EL18 internal module * Fixed S.PORT unit tests * fix: update widx after writing at current index * fix: init error condition * Fix: possible infinite loop in _find_port() * Add support for bidir S.PORT init * Add support for "getLastByte" in HW serial driver * PXX1: Add support for S.PORT based on IDLE callback * Fix rebase error * Fix softserial _rx_fifo_push() * Add softserial support for waitForTxCompleted() * Fix MPM flashing (internal / external) * Fixed external MPM * Activate RX DMA on internal module Seems to work with serial passthrough without issues, at least on the L3R PRO. * Fix softserial DMA on stdlcd F4 targets * Add softserial support for 32bit timers (mostly TIM2) * More precise soft-serial * Fix MPM update using inverters & HW uart * Raise S.PORT DMA/USART IRQ prio to achieve faster switching to input * Remove useless delays * Fix flashing external ELRS module * Added a retry mechanism for FrSky S.PORT update * Remove useless enableRx() * External FrSky modules are all flashed via S.PORT * Remove power management unit update This was only used on the first batch of X-lite.
This commit is contained in:
+19
-29
@@ -22,6 +22,7 @@
|
||||
#include <stdio.h>
|
||||
#include "opentx.h"
|
||||
#include "io/frsky_firmware_update.h"
|
||||
#include "bluetooth_driver.h"
|
||||
|
||||
#if defined(LIBOPENUI)
|
||||
#include "libopenui.h"
|
||||
@@ -49,37 +50,25 @@ extern FIL g_bluetoothFile;
|
||||
#define SWAP32(val) (__builtin_bswap32(val))
|
||||
#endif
|
||||
|
||||
extern Fifo<uint8_t, BT_TX_FIFO_SIZE> btTxFifo;
|
||||
extern Fifo<uint8_t, BT_RX_FIFO_SIZE> btRxFifo;
|
||||
|
||||
Bluetooth bluetooth;
|
||||
|
||||
void Bluetooth::write(const uint8_t * data, uint8_t length)
|
||||
{
|
||||
if (btTxFifo.hasSpace(length)) {
|
||||
BLUETOOTH_TRACE_VERBOSE("BT>");
|
||||
for (int i = 0; i < length; i++) {
|
||||
BLUETOOTH_TRACE_VERBOSE(" %02X", data[i]);
|
||||
btTxFifo.push(data[i]);
|
||||
}
|
||||
BLUETOOTH_TRACE_VERBOSE(CRLF);
|
||||
BLUETOOTH_TRACE_VERBOSE("BT>");
|
||||
for (int i = 0; i < length; i++) {
|
||||
BLUETOOTH_TRACE_VERBOSE(" %02X", data[i]);
|
||||
}
|
||||
else {
|
||||
BLUETOOTH_TRACE("[BT] TX fifo full!" CRLF);
|
||||
}
|
||||
|
||||
bluetoothWriteWakeup();
|
||||
BLUETOOTH_TRACE_VERBOSE(CRLF);
|
||||
bluetoothWrite(data, length);
|
||||
}
|
||||
|
||||
static const char _bt_crlf[] = "\r\n";
|
||||
|
||||
void Bluetooth::writeString(const char * str)
|
||||
{
|
||||
BLUETOOTH_TRACE("BT> %s" CRLF, str);
|
||||
while (*str != 0) {
|
||||
btTxFifo.push(*str++);
|
||||
}
|
||||
btTxFifo.push('\r');
|
||||
btTxFifo.push('\n');
|
||||
bluetoothWriteWakeup();
|
||||
bluetoothWrite(str, strlen(str));
|
||||
bluetoothWrite(_bt_crlf, sizeof(_bt_crlf) - 1);
|
||||
}
|
||||
|
||||
char * Bluetooth::readline(bool error_reset)
|
||||
@@ -87,7 +76,7 @@ char * Bluetooth::readline(bool error_reset)
|
||||
uint8_t byte;
|
||||
|
||||
while (true) {
|
||||
if (!btRxFifo.pop(byte)) {
|
||||
if (!bluetoothRead(&byte)) {
|
||||
#if defined(PCBX9E)
|
||||
// X9E BT module can get unresponsive
|
||||
BLUETOOTH_TRACE("NO RESPONSE FROM BT MODULE" CRLF);
|
||||
@@ -327,7 +316,7 @@ void Bluetooth::receiveTrainer()
|
||||
uint8_t byte;
|
||||
|
||||
while (true) {
|
||||
if (!btRxFifo.pop(byte)) {
|
||||
if (!bluetoothRead(&byte)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -398,7 +387,6 @@ void Bluetooth::wakeup(void)
|
||||
}
|
||||
else if (IS_BLUETOOTH_TRAINER()){
|
||||
state = BLUETOOTH_STATE_CONNECTED;
|
||||
bluetoothWriteWakeup();
|
||||
sendTrainer();
|
||||
}
|
||||
}
|
||||
@@ -408,7 +396,6 @@ void Bluetooth::wakeup(void)
|
||||
void Bluetooth::wakeup()
|
||||
{
|
||||
if (state != BLUETOOTH_STATE_OFF) {
|
||||
bluetoothWriteWakeup();
|
||||
if (bluetoothIsWriting()) {
|
||||
return;
|
||||
}
|
||||
@@ -425,7 +412,10 @@ void Bluetooth::wakeup()
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_eeGeneral.bluetoothMode == BLUETOOTH_OFF || (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER && !IS_BLUETOOTH_TRAINER())) {
|
||||
if (g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ||
|
||||
(g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER &&
|
||||
!IS_BLUETOOTH_TRAINER())) {
|
||||
|
||||
if (state != BLUETOOTH_STATE_OFF) {
|
||||
bluetoothDisable();
|
||||
state = BLUETOOTH_STATE_OFF;
|
||||
@@ -567,7 +557,7 @@ uint8_t Bluetooth::read(uint8_t * data, uint8_t size, uint32_t timeout)
|
||||
while (len < size) {
|
||||
uint32_t elapsed = 0;
|
||||
uint8_t byte;
|
||||
while (!btRxFifo.pop(byte)) {
|
||||
while (!bluetoothRead(&byte)) {
|
||||
if (elapsed++ >= timeout) {
|
||||
return len;
|
||||
}
|
||||
@@ -825,7 +815,7 @@ const char * Bluetooth::flashFirmware(const char * filename, ProgressHandler pro
|
||||
|
||||
state = BLUETOOTH_STATE_FLASH_FIRMWARE;
|
||||
|
||||
pausePulses();
|
||||
pulsesStop();
|
||||
|
||||
bluetoothInit(BLUETOOTH_BOOTLOADER_BAUDRATE, true); // normal mode
|
||||
watchdogSuspend(500 /*5s*/);
|
||||
@@ -854,7 +844,7 @@ const char * Bluetooth::flashFirmware(const char * filename, ProgressHandler pro
|
||||
RTOS_WAIT_MS(1000);
|
||||
|
||||
state = BLUETOOTH_STATE_OFF;
|
||||
resumePulses();
|
||||
pulsesStart();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user