mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-16 12:55:19 +03:00
Restrict MSP DisplayPort output to the MSP port that is marked
This commit is contained in:
parent
8494d6e634
commit
6a8dfa75c2
5 changed files with 16 additions and 6 deletions
|
@ -63,6 +63,7 @@
|
||||||
#include "io/gimbal.h"
|
#include "io/gimbal.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
#include "io/ledstrip.h"
|
#include "io/ledstrip.h"
|
||||||
|
#include "io/serial.h"
|
||||||
#include "io/vtx.h"
|
#include "io/vtx.h"
|
||||||
#include "io/vtx_control.h"
|
#include "io/vtx_control.h"
|
||||||
#include "io/vtx_rtc6705.h"
|
#include "io/vtx_rtc6705.h"
|
||||||
|
@ -1420,6 +1421,7 @@ const clivalue_t valueTable[] = {
|
||||||
#ifdef USE_MSP_DISPLAYPORT
|
#ifdef USE_MSP_DISPLAYPORT
|
||||||
{ "displayport_msp_col_adjust", VAR_INT8 | MASTER_VALUE, .config.minmax = { -6, 0 }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, colAdjust) },
|
{ "displayport_msp_col_adjust", VAR_INT8 | MASTER_VALUE, .config.minmax = { -6, 0 }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, colAdjust) },
|
||||||
{ "displayport_msp_row_adjust", VAR_INT8 | MASTER_VALUE, .config.minmax = { -3, 0 }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, rowAdjust) },
|
{ "displayport_msp_row_adjust", VAR_INT8 | MASTER_VALUE, .config.minmax = { -3, 0 }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, rowAdjust) },
|
||||||
|
{ "displayport_msp_serial", VAR_INT8 | MASTER_VALUE, .config.minmax = { SERIAL_PORT_NONE, SERIAL_PORT_IDENTIFIER_MAX }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, displayPortSerial) },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// PG_DISPLAY_PORT_MSP_CONFIG
|
// PG_DISPLAY_PORT_MSP_CONFIG
|
||||||
|
|
|
@ -60,6 +60,7 @@ typedef struct displayPortProfile_s {
|
||||||
bool invert;
|
bool invert;
|
||||||
uint8_t blackBrightness;
|
uint8_t blackBrightness;
|
||||||
uint8_t whiteBrightness;
|
uint8_t whiteBrightness;
|
||||||
|
int8_t displayPortSerial; // serialPortIdentifier_e
|
||||||
} displayPortProfile_t;
|
} displayPortProfile_t;
|
||||||
|
|
||||||
// Note: displayPortProfile_t used as a parameter group for CMS over CRSF (io/displayport_crsf)
|
// Note: displayPortProfile_t used as a parameter group for CMS over CRSF (io/displayport_crsf)
|
||||||
|
|
|
@ -88,7 +88,8 @@ typedef enum {
|
||||||
SERIAL_PORT_USART8,
|
SERIAL_PORT_USART8,
|
||||||
SERIAL_PORT_USB_VCP = 20,
|
SERIAL_PORT_USB_VCP = 20,
|
||||||
SERIAL_PORT_SOFTSERIAL1 = 30,
|
SERIAL_PORT_SOFTSERIAL1 = 30,
|
||||||
SERIAL_PORT_SOFTSERIAL2
|
SERIAL_PORT_SOFTSERIAL2,
|
||||||
|
SERIAL_PORT_IDENTIFIER_MAX = SERIAL_PORT_SOFTSERIAL2
|
||||||
} serialPortIdentifier_e;
|
} serialPortIdentifier_e;
|
||||||
|
|
||||||
extern const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT];
|
extern const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT];
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "drivers/system.h"
|
#include "drivers/system.h"
|
||||||
|
|
||||||
#include "io/serial.h"
|
#include "io/serial.h"
|
||||||
|
#include "io/displayport_msp.h"
|
||||||
|
|
||||||
#include "msp/msp.h"
|
#include "msp/msp.h"
|
||||||
|
|
||||||
|
@ -57,6 +58,7 @@ void mspSerialAllocatePorts(void)
|
||||||
serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_MSP);
|
serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_MSP);
|
||||||
while (portConfig && portIndex < MAX_MSP_PORT_COUNT) {
|
while (portConfig && portIndex < MAX_MSP_PORT_COUNT) {
|
||||||
mspPort_t *mspPort = &mspPorts[portIndex];
|
mspPort_t *mspPort = &mspPorts[portIndex];
|
||||||
|
|
||||||
if (mspPort->port) {
|
if (mspPort->port) {
|
||||||
portIndex++;
|
portIndex++;
|
||||||
continue;
|
continue;
|
||||||
|
@ -66,6 +68,13 @@ void mspSerialAllocatePorts(void)
|
||||||
if (serialPort) {
|
if (serialPort) {
|
||||||
bool sharedWithTelemetry = isSerialPortShared(portConfig, FUNCTION_MSP, TELEMETRY_PORT_FUNCTIONS_MASK);
|
bool sharedWithTelemetry = isSerialPortShared(portConfig, FUNCTION_MSP, TELEMETRY_PORT_FUNCTIONS_MASK);
|
||||||
resetMspPort(mspPort, serialPort, sharedWithTelemetry);
|
resetMspPort(mspPort, serialPort, sharedWithTelemetry);
|
||||||
|
|
||||||
|
#ifdef USE_MSP_DISPLAYPORT
|
||||||
|
if (serialPort->identifier == displayPortProfileMsp()->displayPortSerial) {
|
||||||
|
mspPort->isDisplayPort = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
portIndex++;
|
portIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,12 +571,8 @@ int mspSerialPush(uint8_t cmd, uint8_t *data, int datalen, mspDirection_e direct
|
||||||
|
|
||||||
for (int portIndex = 0; portIndex < MAX_MSP_PORT_COUNT; portIndex++) {
|
for (int portIndex = 0; portIndex < MAX_MSP_PORT_COUNT; portIndex++) {
|
||||||
mspPort_t * const mspPort = &mspPorts[portIndex];
|
mspPort_t * const mspPort = &mspPorts[portIndex];
|
||||||
if (!mspPort->port) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX Kludge!!! Avoid zombie VCP port (avoid VCP entirely for now)
|
if (!mspPort->port || !mspPort->isDisplayPort) {
|
||||||
if (mspPort->port->identifier == SERIAL_PORT_USB_VCP) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,6 +111,7 @@ typedef struct mspPort_s {
|
||||||
uint8_t checksum2;
|
uint8_t checksum2;
|
||||||
bool sharedWithTelemetry;
|
bool sharedWithTelemetry;
|
||||||
mspDescriptor_t descriptor;
|
mspDescriptor_t descriptor;
|
||||||
|
bool isDisplayPort;
|
||||||
} mspPort_t;
|
} mspPort_t;
|
||||||
|
|
||||||
void mspSerialInit(void);
|
void mspSerialInit(void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue