Added default value processing for , .

This commit is contained in:
mikeller 2019-03-07 06:12:29 +13:00
parent 410507c56a
commit fb5c468f92
5 changed files with 260 additions and 70 deletions

View File

@ -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,80 +4687,72 @@ 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
@ -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,17 +5050,50 @@ 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,
IO_GPIOPortIdxByTag(ioTag) + 'A',
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;
}

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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