mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
* Support DTR in serial passthrough mode to enable programming of Arduino based devices such as MinimOSD. Use 'serialpassthrough 5 57600 rxtx 56' and then use Ardino to program MinimOSD Use 'serialpassthrough 5 115200' and then use MWOSD configurator to setup * Fix comment for CDC_SetCtrlLineStateCb routine * Handle F7 CDC interface * Use strToPin() to allow easy port/pin specification * Fix use of CDC_SetCtrlLineStateCb for all processor types * Only set baud when specified * Fix unit tests for cli * Only register callback if needed * Fix white space * Provide implementation of IOConfigGPIO in SITL * Update serialpassthrough help text * DTR handling through serial drivers * Fix F3, F7 and SITL builds * If serialpassthrough command specifies baud rate of 0, set baud rate over USB. MWOSD configurator can now access config and reflash MinimOSD without rebooting and changing baud rate. * Fix F3 build * Fix failing unit tests * Use resources to declare DTR pin assignment * Don't assert DTR during normal operation as MW_OSD doesn't like it * MW_OSD must be built with MAX_SOFTRESET defined in order to support DTR resets * Minimise changes after dropping DTR pin param from serialpassthrough cmd * Remove DTR pin param from serialpassthrough cmd * Treat ioDtrTag as boolean in conditional statements * Tidy buffer check * Check buffer size in CDC_Itf_Control * Fix unit test * Add documentation for DTR * Add note on MAX_SOFTRESET to documentation * Remove superfluous function definitions * Fix tabs * Fix tabs * Removed superfluous entried from vtable * Backout whitespace changes unrelated to this PR * Pass true/false to IOWrite() * Fix line coding packing * Add LINE_CODING structure defintion * Revise serial documentation * Prevent tx buffer overflow in serialPassthrough() * Revert change unrelated to PR * Review feedback from ledvinap * Fix unit test * Use PINIO to drive DTR * Fix unit test * Remove change unrelated to PR * Fix SITL build * Use shifted bits for mask definition * Fix serialpassthrough documentation * Only compile PINIO functionality if USE_PINIO defined * IOConfigGPIO not needed * Move cbCtrlLine callback to cli.c * serialPassthrough params changed * Check packed structure size * Fix unit test * Tidy up baud rate handling
82 lines
2.4 KiB
C++
82 lines
2.4 KiB
C++
/*
|
|
* This file is part of Cleanflight.
|
|
*
|
|
* Cleanflight is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Cleanflight is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#include <limits.h>
|
|
|
|
extern "C" {
|
|
#include "platform.h"
|
|
|
|
#include "drivers/serial.h"
|
|
#include "drivers/serial_softserial.h"
|
|
#include "drivers/serial_uart.h"
|
|
|
|
#include "io/serial.h"
|
|
|
|
void serialInit(bool softserialEnabled, serialPortIdentifier_e serialPortToDisable);
|
|
}
|
|
|
|
#include "unittest_macros.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
TEST(IoSerialTest, TestFindPortConfig)
|
|
{
|
|
// given
|
|
serialInit(false, SERIAL_PORT_NONE);
|
|
|
|
// when
|
|
serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_MSP);
|
|
|
|
// then
|
|
EXPECT_EQ(NULL, portConfig);
|
|
}
|
|
|
|
|
|
// STUBS
|
|
extern "C" {
|
|
void delay(uint32_t) {}
|
|
|
|
bool isSerialTransmitBufferEmpty(const serialPort_t *) { return true; }
|
|
|
|
void systemResetToBootloader(void) {}
|
|
|
|
bool telemetryCheckRxPortShared(const serialPortConfig_t *) { return false; }
|
|
|
|
uint32_t serialRxBytesWaiting(const serialPort_t *) { return 0; }
|
|
uint8_t serialRead(serialPort_t *) { return 0; }
|
|
void serialWrite(serialPort_t *, uint8_t) {}
|
|
|
|
serialPort_t *usbVcpOpen(void) { return NULL; }
|
|
|
|
serialPort_t *uartOpen(UARTDevice_e, serialReceiveCallbackPtr, void *, uint32_t, portMode_e, portOptions_e) {
|
|
return NULL;
|
|
}
|
|
|
|
serialPort_t *openSoftSerial(softSerialPortIndex_e, serialReceiveCallbackPtr, void *, uint32_t, portMode_e, portOptions_e) {
|
|
return NULL;
|
|
}
|
|
|
|
void serialSetCtrlLineStateCb(serialPort_t *, void (*)(void *, uint16_t ), void *) {}
|
|
void serialSetCtrlLineState(serialPort_t *, uint16_t ) {}
|
|
uint32_t serialTxBytesFree(const serialPort_t *) {return 1;}
|
|
|
|
void serialSetBaudRateCb(serialPort_t *, void (*)(serialPort_t *context, uint32_t baud), serialPort_t *) {}
|
|
|
|
void pinioSet(int, bool) {}
|
|
}
|