mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-26 17:55:28 +03:00
Serial port config uprates
This commit is contained in:
parent
645dbd6f46
commit
2b79d54cdb
5 changed files with 55 additions and 10 deletions
|
@ -748,7 +748,7 @@ static void cliSerial(char *cmdline)
|
||||||
ptr = nextArg(ptr);
|
ptr = nextArg(ptr);
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
val = fastA2I(ptr);
|
val = fastA2I(ptr);
|
||||||
portConfig.functionMask = val & 0xFFFF;
|
portConfig.functionMask = val & 0xFFFFFFFF;
|
||||||
validArgumentCount++;
|
validArgumentCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -897,6 +897,20 @@ static bool mspFcProcessOutCommand(uint16_t cmdMSP, sbuf_t *dst, mspPostProcessF
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MSP2_COMMON_SERIAL_CONFIG:
|
||||||
|
for (int i = 0; i < SERIAL_PORT_COUNT; i++) {
|
||||||
|
if (!serialIsPortAvailable(serialConfig()->portConfigs[i].identifier)) {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
sbufWriteU8(dst, serialConfig()->portConfigs[i].identifier);
|
||||||
|
sbufWriteU32(dst, serialConfig()->portConfigs[i].functionMask);
|
||||||
|
sbufWriteU8(dst, serialConfig()->portConfigs[i].msp_baudrateIndex);
|
||||||
|
sbufWriteU8(dst, serialConfig()->portConfigs[i].gps_baudrateIndex);
|
||||||
|
sbufWriteU8(dst, serialConfig()->portConfigs[i].telemetry_baudrateIndex);
|
||||||
|
sbufWriteU8(dst, serialConfig()->portConfigs[i].peripheral_baudrateIndex);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef USE_LED_STRIP
|
#ifdef USE_LED_STRIP
|
||||||
case MSP_LED_COLORS:
|
case MSP_LED_COLORS:
|
||||||
for (int i = 0; i < LED_CONFIGURABLE_COLOR_COUNT; i++) {
|
for (int i = 0; i < LED_CONFIGURABLE_COLOR_COUNT; i++) {
|
||||||
|
@ -2379,6 +2393,34 @@ static mspResult_e mspFcProcessInCommand(uint16_t cmdMSP, sbuf_t *src)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MSP2_COMMON_SET_SERIAL_CONFIG:
|
||||||
|
{
|
||||||
|
uint8_t portConfigSize = sizeof(uint8_t) + sizeof(uint32_t) + (sizeof(uint8_t) * 4);
|
||||||
|
|
||||||
|
if (dataSize % portConfigSize != 0) {
|
||||||
|
return MSP_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t remainingPortsInPacket = dataSize / portConfigSize;
|
||||||
|
|
||||||
|
while (remainingPortsInPacket--) {
|
||||||
|
uint8_t identifier = sbufReadU8(src);
|
||||||
|
|
||||||
|
serialPortConfig_t *portConfig = serialFindPortConfiguration(identifier);
|
||||||
|
if (!portConfig) {
|
||||||
|
return MSP_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
portConfig->identifier = identifier;
|
||||||
|
portConfig->functionMask = sbufReadU32(src);
|
||||||
|
portConfig->msp_baudrateIndex = sbufReadU8(src);
|
||||||
|
portConfig->gps_baudrateIndex = sbufReadU8(src);
|
||||||
|
portConfig->telemetry_baudrateIndex = sbufReadU8(src);
|
||||||
|
portConfig->peripheral_baudrateIndex = sbufReadU8(src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef USE_LED_STRIP
|
#ifdef USE_LED_STRIP
|
||||||
case MSP_SET_LED_COLORS:
|
case MSP_SET_LED_COLORS:
|
||||||
if (dataSize >= LED_CONFIGURABLE_COLOR_COUNT * 4) {
|
if (dataSize >= LED_CONFIGURABLE_COLOR_COUNT * 4) {
|
||||||
|
|
|
@ -101,7 +101,7 @@ const uint32_t baudRates[] = { 0, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 1
|
||||||
|
|
||||||
#define BAUD_RATE_COUNT (sizeof(baudRates) / sizeof(baudRates[0]))
|
#define BAUD_RATE_COUNT (sizeof(baudRates) / sizeof(baudRates[0]))
|
||||||
|
|
||||||
PG_REGISTER_WITH_RESET_FN(serialConfig_t, serialConfig, PG_SERIAL_CONFIG, 0);
|
PG_REGISTER_WITH_RESET_FN(serialConfig_t, serialConfig, PG_SERIAL_CONFIG, 1);
|
||||||
|
|
||||||
void pgResetFn_serialConfig(serialConfig_t *serialConfig)
|
void pgResetFn_serialConfig(serialConfig_t *serialConfig)
|
||||||
{
|
{
|
||||||
|
@ -232,21 +232,21 @@ portSharing_e determinePortSharing(const serialPortConfig_t *portConfig, serialP
|
||||||
return portConfig->functionMask == function ? PORTSHARING_NOT_SHARED : PORTSHARING_SHARED;
|
return portConfig->functionMask == function ? PORTSHARING_NOT_SHARED : PORTSHARING_SHARED;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSerialPortShared(const serialPortConfig_t *portConfig, uint16_t functionMask, serialPortFunction_e sharedWithFunction)
|
bool isSerialPortShared(const serialPortConfig_t *portConfig, uint32_t functionMask, serialPortFunction_e sharedWithFunction)
|
||||||
{
|
{
|
||||||
return (portConfig) && (portConfig->functionMask & sharedWithFunction) && (portConfig->functionMask & functionMask);
|
return (portConfig) && (portConfig->functionMask & sharedWithFunction) && (portConfig->functionMask & functionMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
static findSharedSerialPortState_t findSharedSerialPortState;
|
static findSharedSerialPortState_t findSharedSerialPortState;
|
||||||
|
|
||||||
serialPort_t *findSharedSerialPort(uint16_t functionMask, serialPortFunction_e sharedWithFunction)
|
serialPort_t *findSharedSerialPort(uint32_t functionMask, serialPortFunction_e sharedWithFunction)
|
||||||
{
|
{
|
||||||
memset(&findSharedSerialPortState, 0, sizeof(findSharedSerialPortState));
|
memset(&findSharedSerialPortState, 0, sizeof(findSharedSerialPortState));
|
||||||
|
|
||||||
return findNextSharedSerialPort(functionMask, sharedWithFunction);
|
return findNextSharedSerialPort(functionMask, sharedWithFunction);
|
||||||
}
|
}
|
||||||
|
|
||||||
serialPort_t *findNextSharedSerialPort(uint16_t functionMask, serialPortFunction_e sharedWithFunction)
|
serialPort_t *findNextSharedSerialPort(uint32_t functionMask, serialPortFunction_e sharedWithFunction)
|
||||||
{
|
{
|
||||||
while (findSharedSerialPortState.lastIndex < SERIAL_PORT_COUNT) {
|
while (findSharedSerialPortState.lastIndex < SERIAL_PORT_COUNT) {
|
||||||
const serialPortConfig_t *candidate = &serialConfig()->portConfigs[findSharedSerialPortState.lastIndex++];
|
const serialPortConfig_t *candidate = &serialConfig()->portConfigs[findSharedSerialPortState.lastIndex++];
|
||||||
|
|
|
@ -100,14 +100,14 @@ typedef struct serialPortUsage_s {
|
||||||
serialPortFunction_e function;
|
serialPortFunction_e function;
|
||||||
} serialPortUsage_t;
|
} serialPortUsage_t;
|
||||||
|
|
||||||
serialPort_t *findSharedSerialPort(uint16_t functionMask, serialPortFunction_e sharedWithFunction);
|
serialPort_t *findSharedSerialPort(uint32_t functionMask, serialPortFunction_e sharedWithFunction);
|
||||||
serialPort_t *findNextSharedSerialPort(uint16_t functionMask, serialPortFunction_e sharedWithFunction);
|
serialPort_t *findNextSharedSerialPort(uint32_t functionMask, serialPortFunction_e sharedWithFunction);
|
||||||
|
|
||||||
//
|
//
|
||||||
// configuration
|
// configuration
|
||||||
//
|
//
|
||||||
typedef struct serialPortConfig_s {
|
typedef struct serialPortConfig_s {
|
||||||
uint16_t functionMask;
|
uint32_t functionMask;
|
||||||
serialPortIdentifier_e identifier;
|
serialPortIdentifier_e identifier;
|
||||||
uint8_t msp_baudrateIndex;
|
uint8_t msp_baudrateIndex;
|
||||||
uint8_t gps_baudrateIndex;
|
uint8_t gps_baudrateIndex;
|
||||||
|
@ -138,7 +138,7 @@ serialPortConfig_t *findSerialPortConfig(serialPortFunction_e function);
|
||||||
serialPortConfig_t *findNextSerialPortConfig(serialPortFunction_e function);
|
serialPortConfig_t *findNextSerialPortConfig(serialPortFunction_e function);
|
||||||
|
|
||||||
portSharing_e determinePortSharing(const serialPortConfig_t *portConfig, serialPortFunction_e function);
|
portSharing_e determinePortSharing(const serialPortConfig_t *portConfig, serialPortFunction_e function);
|
||||||
bool isSerialPortShared(const serialPortConfig_t *portConfig, uint16_t functionMask, serialPortFunction_e sharedWithFunction);
|
bool isSerialPortShared(const serialPortConfig_t *portConfig, uint32_t functionMask, serialPortFunction_e sharedWithFunction);
|
||||||
|
|
||||||
serialPortUsage_t *findSerialPortUsageByIdentifier(serialPortIdentifier_e identifier);
|
serialPortUsage_t *findSerialPortUsageByIdentifier(serialPortIdentifier_e identifier);
|
||||||
int findSerialPortIndexByIdentifier(serialPortIdentifier_e identifier);
|
int findSerialPortIndexByIdentifier(serialPortIdentifier_e identifier);
|
||||||
|
|
|
@ -24,4 +24,7 @@
|
||||||
#define MSP2_COMMON_SET_MOTOR_MIXER 0x1006
|
#define MSP2_COMMON_SET_MOTOR_MIXER 0x1006
|
||||||
|
|
||||||
#define MSP2_COMMON_SETTING_INFO 0x1007 //in/out message Returns info about a setting (PG, type, flags, min/max, etc..).
|
#define MSP2_COMMON_SETTING_INFO 0x1007 //in/out message Returns info about a setting (PG, type, flags, min/max, etc..).
|
||||||
#define MSP2_COMMON_PG_LIST 0x1008 //in/out message Returns a list of the PG ids used by the settings
|
#define MSP2_COMMON_PG_LIST 0x1008 //in/out message Returns a list of the PG ids used by the settings
|
||||||
|
|
||||||
|
#define MSP2_COMMON_SERIAL_CONFIG 0x1009
|
||||||
|
#define MSP2_COMMON_SET_SERIAL_CONFIG 0x100A
|
Loading…
Add table
Add a link
Reference in a new issue