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-коде.

Другие вопросы по тегам