mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 14:25:20 +03:00
Replace CLI serial port configuration code with a new serial
command.
This is done to make it clearer in configuration dumps which ports are enabled and configured. There is a nice code size reduction due to less strings being needed. Serial documentation updated. Closes #966.
This commit is contained in:
parent
27db9ad0fe
commit
ca22fb0ee3
3 changed files with 119 additions and 37 deletions
|
@ -31,7 +31,7 @@ Both SoftSerial and UART ports can be connected to your computer via USB to UART
|
|||
|
||||
## Serial Configuration
|
||||
|
||||
Serial port configuration is best done via the configurator. You can use the CLI too but the commands are reserved for developers and advanced users.
|
||||
Serial port configuration is best done via the configurator.
|
||||
|
||||
Configure serial ports first, then enable/disable features that use the ports. To configure SoftSerial ports the SOFTSERIAL feature must be also be enabled.
|
||||
|
||||
|
@ -52,9 +52,23 @@ e.g. after configuring a port for GPS enable the GPS feature.
|
|||
* You can use as many different telemetry systems as you like at the same time.
|
||||
* You can only use each telemetry system once. e.g. FrSky telemetry cannot be used on two port, but MSP Telemetry + FrSky on different ports is fine.
|
||||
|
||||
### Configuration via CLI
|
||||
|
||||
You can use the CLI for configuration but the commands are reserved for developers and advanced users.
|
||||
|
||||
The `serial` CLI command takes 6 arguments.
|
||||
|
||||
1. Identifier
|
||||
1. Function bitmask (see serialPortFunction_e in the source)
|
||||
1. MSP baud rate
|
||||
1. GPS baud rate
|
||||
1. Telemetry baud rate (auto baud allowed)
|
||||
1. Blackbox baud rate
|
||||
|
||||
|
||||
### Baud Rates
|
||||
|
||||
Each baud rate is assigned an identifier, they are as follows:
|
||||
The allowable baud rates are as follows:
|
||||
|
||||
| Identifier | Baud rate |
|
||||
| ---------- | --------- |
|
||||
|
@ -66,3 +80,4 @@ Each baud rate is assigned an identifier, they are as follows:
|
|||
| 5 | 115200 |
|
||||
| 6 | 230400 |
|
||||
| 7 | 250000 |
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ baudRate_e lookupBaudRateIndex(uint32_t baudRate)
|
|||
return index;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return BAUD_AUTO;
|
||||
}
|
||||
|
||||
static serialPortUsage_t *findSerialPortUsageByIdentifier(serialPortIdentifier_e identifier)
|
||||
|
|
|
@ -109,6 +109,7 @@ static void cliProfile(char *cmdline);
|
|||
static void cliRateProfile(char *cmdline);
|
||||
static void cliReboot(void);
|
||||
static void cliSave(char *cmdline);
|
||||
static void cliSerial(char *cmdline);
|
||||
static void cliServo(char *cmdline);
|
||||
static void cliSet(char *cmdline);
|
||||
static void cliGet(char *cmdline);
|
||||
|
@ -220,6 +221,7 @@ const clicmd_t cmdTable[] = {
|
|||
{ "profile", "index (0 to 2)", cliProfile },
|
||||
{ "rateprofile", "index (0 to 2)", cliRateProfile },
|
||||
{ "save", "save and reboot", cliSave },
|
||||
{ "serial", "show/set serial settings", cliSerial },
|
||||
#ifdef USE_SERVOS
|
||||
{ "servo", "servo config", cliServo },
|
||||
#endif
|
||||
|
@ -287,40 +289,6 @@ const clivalue_t valueTable[] = {
|
|||
|
||||
{ "fixedwing_althold_dir", VAR_INT8 | MASTER_VALUE, &masterConfig.airplaneConfig.fixedwing_althold_dir, -1, 1 },
|
||||
|
||||
{ "serial_port_1_functions", VAR_UINT16 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[0].functionMask, 0, 0xFFFF },
|
||||
{ "serial_port_1_msp_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[0].msp_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
{ "serial_port_1_telemetry_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[0].telemetry_baudrateIndex, BAUD_AUTO, BAUD_115200 },
|
||||
{ "serial_port_1_blackbox_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[0].blackbox_baudrateIndex, BAUD_9600, BAUD_250000 },
|
||||
{ "serial_port_1_gps_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[0].gps_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
#if (SERIAL_PORT_COUNT >= 2)
|
||||
{ "serial_port_2_functions", VAR_UINT16 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[1].functionMask, 0, 0xFFFF },
|
||||
{ "serial_port_2_msp_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[1].msp_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
{ "serial_port_2_telemetry_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[1].telemetry_baudrateIndex, BAUD_AUTO, BAUD_115200 },
|
||||
{ "serial_port_2_blackbox_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[1].blackbox_baudrateIndex, BAUD_9600, BAUD_250000 },
|
||||
{ "serial_port_2_gps_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[1].gps_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
#if (SERIAL_PORT_COUNT >= 3)
|
||||
{ "serial_port_3_functions", VAR_UINT16 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[2].functionMask, 0, 0xFFFF},
|
||||
{ "serial_port_3_msp_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[2].msp_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
{ "serial_port_3_telemetry_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[2].telemetry_baudrateIndex, BAUD_AUTO, BAUD_115200 },
|
||||
{ "serial_port_3_blackbox_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[2].blackbox_baudrateIndex, BAUD_9600, BAUD_250000 },
|
||||
{ "serial_port_3_gps_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[2].gps_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
#if (SERIAL_PORT_COUNT >= 4)
|
||||
{ "serial_port_4_functions", VAR_UINT16 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[3].functionMask, 0, 0xFFFF },
|
||||
{ "serial_port_4_msp_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[3].msp_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
{ "serial_port_4_telemetry_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[3].telemetry_baudrateIndex, BAUD_AUTO, BAUD_115200 },
|
||||
{ "serial_port_4_blackbox_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[3].blackbox_baudrateIndex, BAUD_9600, BAUD_250000 },
|
||||
{ "serial_port_4_gps_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[3].gps_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
#if (SERIAL_PORT_COUNT >= 5)
|
||||
{ "serial_port_5_functions", VAR_UINT16 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[4].functionMask, 0, 0xFFFF },
|
||||
{ "serial_port_5_msp_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[4].msp_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
{ "serial_port_5_telemetry_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[4].telemetry_baudrateIndex, BAUD_AUTO, BAUD_115200 },
|
||||
{ "serial_port_5_blackbox_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[4].blackbox_baudrateIndex, BAUD_9600, BAUD_250000 },
|
||||
{ "serial_port_5_gps_baudrate", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.portConfigs[4].gps_baudrateIndex, BAUD_9600, BAUD_115200 },
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
{ "reboot_character", VAR_UINT8 | MASTER_VALUE, &masterConfig.serialConfig.reboot_character, 48, 126 },
|
||||
|
||||
#ifdef GPS
|
||||
|
@ -591,6 +559,102 @@ static void cliAux(char *cmdline)
|
|||
}
|
||||
}
|
||||
|
||||
static void cliSerial(char *cmdline)
|
||||
{
|
||||
int i, val;
|
||||
char *ptr;
|
||||
|
||||
if (isEmpty(cmdline)) {
|
||||
for (i = 0; i < SERIAL_PORT_COUNT; i++) {
|
||||
if (!serialIsPortAvailable(masterConfig.serialConfig.portConfigs[i].identifier)) {
|
||||
continue;
|
||||
};
|
||||
printf("serial %d %d %ld %ld %ld %ld\r\n" ,
|
||||
masterConfig.serialConfig.portConfigs[i].identifier,
|
||||
masterConfig.serialConfig.portConfigs[i].functionMask,
|
||||
baudRates[masterConfig.serialConfig.portConfigs[i].msp_baudrateIndex],
|
||||
baudRates[masterConfig.serialConfig.portConfigs[i].gps_baudrateIndex],
|
||||
baudRates[masterConfig.serialConfig.portConfigs[i].telemetry_baudrateIndex],
|
||||
baudRates[masterConfig.serialConfig.portConfigs[i].blackbox_baudrateIndex]
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
serialPortConfig_t portConfig;
|
||||
memset(&portConfig, 0 , sizeof(portConfig));
|
||||
|
||||
serialPortConfig_t *currentConfig;
|
||||
|
||||
uint8_t validArgumentCount = 0;
|
||||
|
||||
ptr = cmdline;
|
||||
|
||||
val = atoi(ptr++);
|
||||
currentConfig = serialFindPortConfiguration(val);
|
||||
if (currentConfig) {
|
||||
portConfig.identifier = val;
|
||||
validArgumentCount++;
|
||||
}
|
||||
|
||||
ptr = strchr(ptr, ' ');
|
||||
if (ptr) {
|
||||
val = atoi(++ptr);
|
||||
portConfig.functionMask = val & 0xFFFF;
|
||||
validArgumentCount++;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i ++) {
|
||||
ptr = strchr(ptr, ' ');
|
||||
if (!ptr) {
|
||||
break;
|
||||
}
|
||||
|
||||
val = atoi(++ptr);
|
||||
|
||||
uint8_t baudRateIndex = lookupBaudRateIndex(val);
|
||||
if (baudRates[baudRateIndex] != (uint32_t) val) {
|
||||
break;
|
||||
}
|
||||
|
||||
switch(i) {
|
||||
case 0:
|
||||
if (baudRateIndex < BAUD_9600 || baudRateIndex > BAUD_115200) {
|
||||
continue;
|
||||
}
|
||||
portConfig.msp_baudrateIndex = baudRateIndex;
|
||||
break;
|
||||
case 1:
|
||||
if (baudRateIndex < BAUD_9600 || baudRateIndex > BAUD_115200) {
|
||||
continue;
|
||||
}
|
||||
portConfig.gps_baudrateIndex = baudRateIndex;
|
||||
break;
|
||||
case 2:
|
||||
if (baudRateIndex != BAUD_AUTO || baudRateIndex > BAUD_115200) {
|
||||
continue;
|
||||
}
|
||||
portConfig.telemetry_baudrateIndex = baudRateIndex;
|
||||
break;
|
||||
case 3:
|
||||
if (baudRateIndex < BAUD_9600 || baudRateIndex > BAUD_250000) {
|
||||
continue;
|
||||
}
|
||||
portConfig.blackbox_baudrateIndex = baudRateIndex;
|
||||
break;
|
||||
}
|
||||
|
||||
validArgumentCount++;
|
||||
}
|
||||
|
||||
if (validArgumentCount < 6) {
|
||||
cliPrint("Parse error\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(currentConfig, &portConfig, sizeof(portConfig));
|
||||
|
||||
}
|
||||
|
||||
static void cliAdjustmentRange(char *cmdline)
|
||||
{
|
||||
|
@ -1066,6 +1130,9 @@ static void cliDump(char *cmdline)
|
|||
buf[i] = '\0';
|
||||
printf("map %s\r\n", buf);
|
||||
|
||||
cliPrint("\r\n\r\n# serial\r\n");
|
||||
cliSerial("");
|
||||
|
||||
#ifdef LED_STRIP
|
||||
cliPrint("\r\n\r\n# led\r\n");
|
||||
cliLed("");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue