Kconfig и C enum
У меня есть меню с множественным выбором, определенное так:
menu "Audio"
choice
prompt "Select Audio Output"
default I2S
help
This option selects the audio output.
config AUDIO_OUTPUT_MODE_I2S
bool "Generic I2S"
config AUDIO_OUTPUT_MODE_I2S_MERUS
bool "Merus Audio I2S"
config AUDIO_OUTPUT_MODE_DAC_BUILT_IN
bool "Built-In DAC"
endchoice
config AUDIO_OUTPUT_MODE
string
default I2S
default I2S if AUDIO_OUTPUT_MODE_I2S
default I2S_MERUS if AUDIO_OUTPUT_MODE_I2S_MERUS
default DAC_BUILT_IN if AUDIO_OUTPUT_MODE_DAC_BUILT_IN
config DAC_BUG_WORKAROUND
bool "Activate workaround when using Built-In DAC"
endmenu
Я хочу сопоставить выбор с перечислением, но Kconfig имеет только тристатные и строковые типы, поэтому я не могу этого сделать, потому что значение AUDIO_OUTPUT_MODE является строкой, а не литералом:
my_enum = AUDIO_OUTPUT_MODE;
Прямое использование int будет работать, но есть ли более чистое решение?
1 ответ
В вашем make-файле вы можете передать выделение как определение препроцессора:
CFLAGS-$(CONFIG_CHOICE_A) += -Dchoice=enum_value_a
CFLAGS-$(CONFIG_CHOICE_B) += -Dchoice=enum_value_b
CFLAGS-$(CONFIG_CHOICE_C) += -Dchoice=enum_value_c
Затем добавьте выбранные флаги:
CFLAGS += $(CFLAGS-y)
Затем получите доступ к нему в этом случае как к макросу выбора в вашем C-коде.