2017-04-17 61 views
0

我有這樣定義的多種選擇菜單:的Kconfig和C枚舉

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直接會的工作,但有一個清潔的解決方案?

回答

0

在你的makefile,你可以通過選擇作爲一個預處理定義:

CFLAGS += $(CFLAGS-y) 

然後訪問它在這種情況下的「選擇」宏:

CFLAGS-$(CONFIG_CHOICE_A) += -Dchoice=enum_value_a 
CFLAGS-$(CONFIG_CHOICE_B) += -Dchoice=enum_value_b 
CFLAGS-$(CONFIG_CHOICE_C) += -Dchoice=enum_value_c 

然後選擇標誌追加在你的C代碼中。

+0

這是一個有趣的技巧,我不知道我想介紹一個額外的耦合與我的枚舉,雖然。 我用int值取而代之。 –