Added default value processing for , .
This commit is contained in:
parent
410507c56a
commit
fb5c468f92
|
@ -250,6 +250,7 @@ extern uint32_t inputBuffer[DSHOT_TELEMETRY_INPUT_LEN];
|
|||
extern uint32_t setDirectionMicros;
|
||||
#endif
|
||||
|
||||
typedef bool printFn(uint8_t dumpMask, bool equalsDefault, const char *format, ...);
|
||||
|
||||
|
||||
static void backupPgConfig(const pgRegistry_t *pg)
|
||||
|
@ -4638,6 +4639,28 @@ static void dmaoptToString(int optval, char *buf)
|
|||
}
|
||||
}
|
||||
|
||||
static void printPeripheralDmaoptDetails(dmaoptEntry_t *entry, int index, const dmaoptValue_t dmaopt, const bool equalsDefault, const uint8_t dumpMask, printFn *printValue)
|
||||
{
|
||||
if (dmaopt != DMA_OPT_UNUSED) {
|
||||
printValue(dumpMask, equalsDefault,
|
||||
"dma %s %d %d",
|
||||
entry->device, DMA_OPT_UI_INDEX(index), dmaopt);
|
||||
|
||||
const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpecByPeripheral(entry->peripheral, index, dmaopt);
|
||||
dmaCode_t dmaCode = 0;
|
||||
if (dmaChannelSpec) {
|
||||
dmaCode = dmaChannelSpec->code;
|
||||
}
|
||||
printValue(dumpMask, equalsDefault,
|
||||
"# %s %d: DMA%d Stream %d Channel %d",
|
||||
entry->device, DMA_OPT_UI_INDEX(index), DMA_CODE_CONTROLLER(dmaCode), DMA_CODE_STREAM(dmaCode), DMA_CODE_CHANNEL(dmaCode));
|
||||
} else if (!(dumpMask & HIDE_UNUSED)) {
|
||||
printValue(dumpMask, equalsDefault,
|
||||
"dma %s %d NONE",
|
||||
entry->device, DMA_OPT_UI_INDEX(index));
|
||||
}
|
||||
}
|
||||
|
||||
static void printPeripheralDmaopt(dmaoptEntry_t *entry, int index, uint8_t dumpMask)
|
||||
{
|
||||
const pgRegistry_t* pg = pgFind(entry->pgn);
|
||||
|
@ -4664,81 +4687,73 @@ static void printPeripheralDmaopt(dmaoptEntry_t *entry, int index, uint8_t dumpM
|
|||
bool equalsDefault = currentOpt == defaultOpt;
|
||||
|
||||
if (defaultConfig) {
|
||||
if (defaultOpt != DMA_OPT_UNUSED) {
|
||||
const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpecByPeripheral(entry->peripheral, index, defaultOpt);
|
||||
dmaCode_t dmaCode = 0;
|
||||
if (dmaChannelSpec) {
|
||||
dmaCode = dmaChannelSpec->code;
|
||||
}
|
||||
cliDefaultPrintLinef(dumpMask, equalsDefault,
|
||||
"dma %s %d %d",
|
||||
entry->device, DMA_OPT_UI_INDEX(index), defaultOpt);
|
||||
cliDefaultPrintLinef(dumpMask, equalsDefault,
|
||||
"# %s %d: DMA%d Stream %d Channel %d",
|
||||
entry->device, DMA_OPT_UI_INDEX(index), DMA_CODE_CONTROLLER(dmaCode), DMA_CODE_STREAM(dmaCode), DMA_CODE_CHANNEL(dmaCode));
|
||||
} else {
|
||||
cliDefaultPrintLinef(dumpMask, equalsDefault,
|
||||
"dma %s %d NONE",
|
||||
entry->device, DMA_OPT_UI_INDEX(index));
|
||||
}
|
||||
printPeripheralDmaoptDetails(entry, index, defaultOpt, equalsDefault, dumpMask, cliDefaultPrintLinef);
|
||||
}
|
||||
|
||||
if (currentOpt != DMA_OPT_UNUSED) {
|
||||
cliDumpPrintLinef(dumpMask, equalsDefault,
|
||||
"dma %s %d %d",
|
||||
entry->device, DMA_OPT_UI_INDEX(index), currentOpt);
|
||||
|
||||
const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpecByPeripheral(entry->peripheral, index, currentOpt);
|
||||
dmaCode_t dmaCode = 0;
|
||||
if (dmaChannelSpec) {
|
||||
dmaCode = dmaChannelSpec->code;
|
||||
}
|
||||
cliDumpPrintLinef(dumpMask, equalsDefault,
|
||||
"# %s %d: DMA%d Stream %d Channel %d",
|
||||
entry->device, DMA_OPT_UI_INDEX(index), DMA_CODE_CONTROLLER(dmaCode), DMA_CODE_STREAM(dmaCode), DMA_CODE_CHANNEL(dmaCode));
|
||||
} else if (!(dumpMask & HIDE_UNUSED)) {
|
||||
cliDumpPrintLinef(dumpMask, equalsDefault,
|
||||
"dma %s %d NONE",
|
||||
entry->device, DMA_OPT_UI_INDEX(index));
|
||||
}
|
||||
printPeripheralDmaoptDetails(entry, index, currentOpt, equalsDefault, dumpMask, cliDumpPrintLinef);
|
||||
}
|
||||
|
||||
#if defined(USE_TIMER_MGMT)
|
||||
static void printTimerDmaopt(const timerIOConfig_t *timerIoConfig, uint8_t dumpMask)
|
||||
static void printTimerDmaoptDetails(const ioTag_t ioTag, const timerHardware_t *timer, const dmaoptValue_t dmaopt, const bool equalsDefault, const uint8_t dumpMask, printFn *printValue)
|
||||
{
|
||||
const char *format = "dma pin %c%02d %d";
|
||||
|
||||
const ioTag_t ioTag = timerIoConfig->ioTag;
|
||||
if (dmaopt != DMA_OPT_UNUSED) {
|
||||
const bool printDetails = printValue(dumpMask, equalsDefault, format,
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag),
|
||||
dmaopt
|
||||
);
|
||||
|
||||
if (printDetails) {
|
||||
const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpecByTimerValue(timer->tim, timer->channel, dmaopt);
|
||||
dmaCode_t dmaCode = 0;
|
||||
if (dmaChannelSpec) {
|
||||
dmaCode = dmaChannelSpec->code;
|
||||
printValue(dumpMask, false,
|
||||
"# pin %c%02d: DMA%d Stream %d Channel %d",
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag),
|
||||
DMA_CODE_CONTROLLER(dmaCode), DMA_CODE_STREAM(dmaCode), DMA_CODE_CHANNEL(dmaCode)
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if (!(dumpMask & HIDE_UNUSED)) {
|
||||
printValue(dumpMask, equalsDefault,
|
||||
"dma pin %c%02d NONE",
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static void printTimerDmaopt(const timerIOConfig_t *currentConfig, const timerIOConfig_t *defaultConfig, unsigned index, uint8_t dumpMask)
|
||||
{
|
||||
const ioTag_t ioTag = currentConfig[index].ioTag;
|
||||
|
||||
if (!ioTag) {
|
||||
return;
|
||||
}
|
||||
|
||||
const dmaoptValue_t dmaopt = timerIoConfig->dmaopt;
|
||||
const timerHardware_t *timer = timerGetByTag(ioTag);
|
||||
const timerHardware_t *timer = timerGetByTagAndIndex(ioTag, currentConfig[index].index);
|
||||
const dmaoptValue_t dmaopt = currentConfig[index].dmaopt;
|
||||
|
||||
if (dmaopt != DMA_OPT_UNUSED) {
|
||||
cliDumpPrintLinef(dumpMask, false, format,
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag),
|
||||
dmaopt
|
||||
);
|
||||
const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpecByTimer(timer);
|
||||
dmaCode_t dmaCode = 0;
|
||||
if (dmaChannelSpec) {
|
||||
dmaCode = dmaChannelSpec->code;
|
||||
dmaoptValue_t defaultDmaopt = DMA_OPT_UNUSED;
|
||||
if (defaultConfig) {
|
||||
for (unsigned i = 0; i < MAX_TIMER_PINMAP_COUNT; i++) {
|
||||
if (defaultConfig[i].ioTag == ioTag) {
|
||||
defaultDmaopt = defaultConfig[index].dmaopt;
|
||||
|
||||
break;
|
||||
}
|
||||
cliDumpPrintLinef(dumpMask, false,
|
||||
"# pin %c%02d: DMA%d Stream %d Channel %d",
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag),
|
||||
DMA_CODE_CONTROLLER(dmaCode), DMA_CODE_STREAM(dmaCode), DMA_CODE_CHANNEL(dmaCode)
|
||||
);
|
||||
} else if (!(dumpMask & HIDE_UNUSED)) {
|
||||
cliDumpPrintLinef(dumpMask, false,
|
||||
"dma pin %c%02d NONE",
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const bool equalsDefault = defaultDmaopt == dmaopt;
|
||||
|
||||
if (defaultConfig) {
|
||||
printTimerDmaoptDetails(ioTag, timer, defaultDmaopt, equalsDefault, dumpMask, cliDefaultPrintLinef);
|
||||
}
|
||||
|
||||
printTimerDmaoptDetails(ioTag, timer, dmaopt, equalsDefault, dumpMask, cliDumpPrintLinef);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void printDmaopt(uint8_t dumpMask)
|
||||
|
@ -4751,8 +4766,20 @@ static void printDmaopt(uint8_t dumpMask)
|
|||
}
|
||||
|
||||
#if defined(USE_TIMER_MGMT)
|
||||
const pgRegistry_t* pg = pgFind(PG_TIMER_IO_CONFIG);
|
||||
const timerIOConfig_t *currentConfig;
|
||||
const timerIOConfig_t *defaultConfig;
|
||||
|
||||
if (configIsInCopy) {
|
||||
currentConfig = (timerIOConfig_t *)pg->copy;
|
||||
defaultConfig = (timerIOConfig_t *)pg->address;
|
||||
} else {
|
||||
currentConfig = (timerIOConfig_t *)pg->address;
|
||||
defaultConfig = NULL;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < MAX_TIMER_PINMAP_COUNT; i++) {
|
||||
printTimerDmaopt(timerIOConfig(i), dumpMask);
|
||||
printTimerDmaopt(currentConfig, defaultConfig, i, dumpMask);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -4766,6 +4793,11 @@ static void cliDmaopt(char *cmdline)
|
|||
pch = strtok_r(cmdline, " ", &saveptr);
|
||||
if (!pch) {
|
||||
printDmaopt(DUMP_MASTER | HIDE_UNUSED);
|
||||
|
||||
return;
|
||||
} else if (strcasecmp(pch, "list") == 0) {
|
||||
cliPrintErrorLinef("NOT IMPLEMENTED YET");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5018,16 +5050,49 @@ static void printTimer(uint8_t dumpMask)
|
|||
{
|
||||
const char *format = "timer %c%02d %d";
|
||||
|
||||
for (unsigned int i = 0; i < MAX_TIMER_PINMAP_COUNT; i++) {
|
||||
const pgRegistry_t* pg = pgFind(PG_TIMER_IO_CONFIG);
|
||||
const timerIOConfig_t *currentConfig;
|
||||
const timerIOConfig_t *defaultConfig;
|
||||
|
||||
const ioTag_t ioTag = timerIOConfig(i)->ioTag;
|
||||
const uint8_t timerIndex = timerIOConfig(i)->index;
|
||||
if (configIsInCopy) {
|
||||
currentConfig = (timerIOConfig_t *)pg->copy;
|
||||
defaultConfig = (timerIOConfig_t *)pg->address;
|
||||
} else {
|
||||
currentConfig = (timerIOConfig_t *)pg->address;
|
||||
defaultConfig = NULL;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < MAX_TIMER_PINMAP_COUNT; i++) {
|
||||
const ioTag_t ioTag = currentConfig[i].ioTag;
|
||||
|
||||
if (!ioTag) {
|
||||
continue;
|
||||
}
|
||||
|
||||
cliDumpPrintLinef(dumpMask, false, format,
|
||||
const uint8_t timerIndex = currentConfig[i].index;
|
||||
|
||||
uint8_t defaultTimerIndex = 0;
|
||||
if (defaultConfig) {
|
||||
for (unsigned i = 0; i < MAX_TIMER_PINMAP_COUNT; i++) {
|
||||
if (defaultConfig[i].ioTag == ioTag) {
|
||||
defaultTimerIndex = defaultConfig[i].index;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const bool equalsDefault = defaultTimerIndex == timerIndex;
|
||||
|
||||
if (defaultConfig && defaultTimerIndex) {
|
||||
cliDefaultPrintLinef(dumpMask, equalsDefault, format,
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A',
|
||||
IO_GPIOPinIdxByTag(ioTag),
|
||||
defaultTimerIndex - 1
|
||||
);
|
||||
}
|
||||
|
||||
cliDumpPrintLinef(dumpMask, equalsDefault, format,
|
||||
IO_GPIOPortIdxByTag(ioTag) + 'A',
|
||||
IO_GPIOPinIdxByTag(ioTag),
|
||||
timerIndex - 1
|
||||
|
@ -5042,6 +5107,10 @@ static void cliTimer(char *cmdline)
|
|||
if (len == 0) {
|
||||
printTimer(DUMP_MASTER);
|
||||
|
||||
return;
|
||||
} else if (strncasecmp(cmdline, "list", len) == 0) {
|
||||
cliPrintErrorLinef("NOT IMPLEMENTED YET");
|
||||
|
||||
return;
|
||||
} else if (strncasecmp(cmdline, "show", len) == 0) {
|
||||
cliPrintErrorLinef("NOT IMPLEMENTED YET");
|
||||
|
@ -5073,7 +5142,8 @@ static void cliTimer(char *cmdline)
|
|||
}
|
||||
|
||||
if (timerIOIndex < 0) {
|
||||
cliPrintErrorLinef("INDEX OUT OF RANGE.");
|
||||
cliPrintErrorLinef("PIN TIMER MAP FULL.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -252,7 +252,8 @@ dmaoptValue_t dmaoptByTag(ioTag_t ioTag)
|
|||
#else
|
||||
UNUSED(ioTag);
|
||||
#endif
|
||||
return -1;
|
||||
|
||||
return DMA_OPT_UNUSED;
|
||||
}
|
||||
|
||||
const dmaChannelSpec_t *dmaGetChannelSpecByTimerValue(TIM_TypeDef *tim, uint8_t channel, dmaoptValue_t dmaopt)
|
||||
|
@ -300,6 +301,6 @@ dmaoptValue_t dmaGetOptionByTimer(const timerHardware_t *timer)
|
|||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
return DMA_OPT_UNUSED;
|
||||
}
|
||||
#endif // USE_DMA_SPEC
|
||||
|
|
|
@ -261,6 +261,7 @@ uint8_t timerInputIrq(TIM_TypeDef *tim);
|
|||
timerIOConfig_t *timerIoConfigByTag(ioTag_t ioTag);
|
||||
#endif
|
||||
const timerHardware_t *timerGetByTag(ioTag_t ioTag);
|
||||
const timerHardware_t *timerGetByTagAndIndex(ioTag_t ioTag, unsigned timerIndex);
|
||||
ioTag_t timerioTagGetByUsage(timerUsageFlag_e usageFlag, uint8_t index);
|
||||
|
||||
#if defined(USE_HAL_DRIVER)
|
||||
|
|
|
@ -54,14 +54,13 @@ static uint8_t timerIndexByTag(ioTag_t ioTag)
|
|||
return 0;
|
||||
}
|
||||
|
||||
const timerHardware_t *timerGetByTag(ioTag_t ioTag)
|
||||
const timerHardware_t *timerGetByTagAndIndex(ioTag_t ioTag, unsigned timerIndex)
|
||||
{
|
||||
if (!ioTag) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if TIMER_CHANNEL_COUNT > 0
|
||||
uint8_t timerIndex = timerIndexByTag(ioTag);
|
||||
uint8_t index = 1;
|
||||
for (unsigned i = 0; i < TIMER_CHANNEL_COUNT; i++) {
|
||||
if (TIMER_HARDWARE[i].tag == ioTag) {
|
||||
|
@ -72,11 +71,19 @@ const timerHardware_t *timerGetByTag(ioTag_t ioTag)
|
|||
}
|
||||
}
|
||||
#else
|
||||
UNUSED(timerIndexByTag);
|
||||
UNUSED(timerIndex);
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const timerHardware_t *timerGetByTag(ioTag_t ioTag)
|
||||
{
|
||||
uint8_t timerIndex = timerIndexByTag(ioTag);
|
||||
|
||||
return timerGetByTagAndIndex(ioTag, timerIndex);
|
||||
}
|
||||
|
||||
ioTag_t timerioTagGetByUsage(timerUsageFlag_e usageFlag, uint8_t index)
|
||||
{
|
||||
#if !defined(USE_UNIFIED_TARGET) && USABLE_TIMER_CHANNEL_COUNT > 0
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
# Betaflight / STM32F405 (S405) 4.0.0 Mar 7 2019 / 06:40:55 (fee4ee5e0) MSP API: 1.41
|
||||
|
||||
board_name OMNIBUSF4
|
||||
manufacturer_id AIRB
|
||||
|
||||
# resources
|
||||
resource BEEPER 1 B04
|
||||
resource MOTOR 1 B00
|
||||
resource MOTOR 2 B01
|
||||
resource MOTOR 3 A03
|
||||
resource MOTOR 4 A02
|
||||
resource MOTOR 5 A01
|
||||
resource MOTOR 6 A08
|
||||
resource PPM 1 B14
|
||||
resource PWM 1 B14
|
||||
resource PWM 2 B15
|
||||
resource PWM 3 C06
|
||||
resource PWM 4 C07
|
||||
resource PWM 5 C08
|
||||
resource PWM 6 C09
|
||||
resource SONAR_TRIGGER 1 A01
|
||||
resource SONAR_ECHO 1 A08
|
||||
resource LED_STRIP 1 A01
|
||||
resource SERIAL_TX 1 A09
|
||||
resource SERIAL_TX 3 B10
|
||||
resource SERIAL_TX 6 C06
|
||||
resource SERIAL_RX 1 A10
|
||||
resource SERIAL_RX 3 B11
|
||||
resource SERIAL_RX 6 C07
|
||||
resource INVERTER 1 C00
|
||||
resource LED 1 B05
|
||||
resource SPI_SCK 1 A05
|
||||
resource SPI_SCK 3 C10
|
||||
resource SPI_MISO 1 A06
|
||||
resource SPI_MISO 3 C11
|
||||
resource SPI_MOSI 1 A07
|
||||
resource SPI_MOSI 3 C12
|
||||
resource ADC_BATT 1 C02
|
||||
resource ADC_CURR 1 C01
|
||||
resource FLASH_CS 1 B03
|
||||
resource OSD_CS 1 A15
|
||||
resource RX_SPI_CS 1 D02
|
||||
resource RX_SPI_EXTI 1 A00
|
||||
resource GYRO_EXTI 1 C04
|
||||
resource GYRO_CS 1 A04
|
||||
resource USB_DETECT 1 C05
|
||||
|
||||
# timer
|
||||
timer B14 2
|
||||
timer B15 2
|
||||
timer C06 1
|
||||
timer C07 1
|
||||
timer C08 1
|
||||
timer C09 1
|
||||
timer B00 1
|
||||
timer B01 1
|
||||
timer A03 0
|
||||
timer A02 0
|
||||
timer A01 1
|
||||
timer A08 0
|
||||
timer A09 0
|
||||
timer A10 0
|
||||
|
||||
# dma
|
||||
dma ADC 2 1
|
||||
# ADC 2: DMA2 Stream 3 Channel 1
|
||||
dma pin C06 0
|
||||
# pin C06: DMA2 Stream 2 Channel 0
|
||||
dma pin C07 0
|
||||
# pin C07: DMA2 Stream 2 Channel 0
|
||||
dma pin C08 0
|
||||
# pin C08: DMA2 Stream 2 Channel 0
|
||||
dma pin C09 0
|
||||
# pin C09: DMA2 Stream 7 Channel 7
|
||||
dma pin B00 0
|
||||
# pin B00: DMA1 Stream 7 Channel 5
|
||||
dma pin B01 0
|
||||
# pin B01: DMA1 Stream 2 Channel 5
|
||||
dma pin A03 1
|
||||
# pin A03: DMA1 Stream 6 Channel 3
|
||||
dma pin A02 0
|
||||
# pin A02: DMA1 Stream 1 Channel 3
|
||||
dma pin A01 0
|
||||
# pin A01: DMA1 Stream 4 Channel 6
|
||||
dma pin A08 0
|
||||
# pin A08: DMA2 Stream 6 Channel 0
|
||||
dma pin A09 0
|
||||
# pin A09: DMA2 Stream 6 Channel 0
|
||||
dma pin A10 0
|
||||
# pin A10: DMA2 Stream 6 Channel 0
|
||||
|
||||
# master
|
||||
set mag_bustype = I2C
|
||||
set mag_i2c_device = 2
|
||||
set baro_bustype = I2C
|
||||
set baro_i2c_device = 2
|
||||
set rx_spi_bus = 3
|
||||
set adc_device = 2
|
||||
set current_meter = ADC
|
||||
set battery_meter = ADC
|
||||
set beeper_inversion = ON
|
||||
set beeper_od = OFF
|
||||
set system_hse_mhz = 8
|
||||
set max7456_clock = FULL
|
||||
set max7456_spi_bus = 3
|
||||
set dashboard_i2c_bus = 2
|
||||
set flash_spi_bus = 3
|
||||
set gyro_1_bustype = SPI
|
||||
set gyro_1_spibus = 1
|
||||
set gyro_1_sensor_align = CW180
|
||||
set gyro_2_spibus = 1
|
Loading…
Reference in New Issue