{"id":7159,"date":"2021-01-08T08:12:55","date_gmt":"2021-01-08T08:12:55","guid":{"rendered":"https:\/\/www.fambach.net\/?p=7159"},"modified":"2021-01-08T12:56:06","modified_gmt":"2021-01-08T12:56:06","slug":"espressif-idf-menuconfig","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/","title":{"rendered":"Espressif IDF \u2013 Menuconfig"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Contents\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Grundsatzliches\" >Grunds&auml;tzliches<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Ausgang\" >Ausgang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Eingang\" >Eingang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Fazit\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Verwandte_Beitrage\" >Verwandte Beitr&auml;ge<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Quellen\" >Sources<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">Eine der sch&ouml;nen Erungenschaften der IDF ist die Men&uuml; gesteuerte Konfiguration. Noch sch&ouml;ner finde ich, dass eigenen Konfiguratiospunkte erstellt werden k&ouml;nnen. Diese werden dann automatisch in das Haupt Men&uuml;  eingeh&auml;ngt. Vorab:<\/p>\n\n\n\n<ul class=\"wp-block-list\" id=\"block-3dde12cd-cce1-40f1-a48a-a1733b32ddea\"><li>Die Biliothek &#8222;esp_system.h&#8220; wird im Quellcode ben&ouml;tigt sonst klappts nicht<\/li><li>Nach &Auml;nderungen am Men&uuml; ein idf.py clean durchf&uuml;hren<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"337\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_29_05.jpg\" alt=\"\" class=\"wp-image-7077\"><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To create such a configuration point, I'll use the program from the example <a href=\"#Konsolenausgabe\" data-type=\"internal\" data-id=\"#Konsolenausgabe\">Console output<\/a> und ersetze den Text durch einen Konfigruationspunkt. Benannt werden diese grunds&auml;tzlich mit CONFIG_ , gefolgt von einen sprechenden Namen.<\/p>\n\n\n\n<script>\nvar project = \"sfambach\/espressif-idf\/tree\/master\/L5_Menuconfig\";\nvar file = \"\/main\/main.c\";\nvar test = project + file;\nvar startAt = 16;\nvar endAt = 0;\n\n\ndocument.write('<a href=\"https:\/\/github.com\/'+project+'\" target=\"_blank\">Link zu Git');\ndocument.write('<a href=\"https:\/\/downgit.github.io\/#\/home?url=https:\/\/github.com\/'+project+'\" target=\"_blank\">Download des Projektes mit DownGit<\/script><p>&#8218;);\n\ndocument.write(&#8218;<\/p><div style=\"font-size:1vw\">&#8218;);\ndocument.write(&#8218;<script src=\"https:\\\/\\\/gist-it.appspot.com\\\/github.com\\\/'+test+'\\?slice='+startAt+':'+endAt+'\"><\\\/script>');\ndocument.write('<\/script><p>&#8218;);\n\n\n\n\n<\/p><p class=\"wp-block-paragraph\">Damit diese Konfiguration im Menuconfig angezeigt wird, muss noch eine Datei &#8222;Kconfig.projbuild&#8220; erstellt werden. Diese enth&auml;lt zus&auml;tzliche Informationen zum Konfigurationspunkt:<\/p><script>\nvar project = \"sfambach\/espressif-idf\/tree\/master\/L5_Menuconfig\";\nvar file = \"\/main\/Kconfig.projbuild\";\nvar test = project + file;\nvar startAt = 16;\nvar endAt = 0;\n\n\n\/*document.write('<a href=\"https:\/\/github.com\/'+project+'\" target=\"_blank\">Link zu Git');\ndocument.write('<a href=\"https:\/\/downgit.github.io\/#\/home?url=https:\/\/github.com\/'+project+'\" target=\"_blank\">Download des Projektes mit DownGit');*\/\n\ndocument.write('<div style=\"font-size:1vw\">');\ndocument.write('<script src=\"https:\\\/\\\/gist-it.appspot.com\\\/github.com\\\/'+test+'\\?slice='+startAt+':'+endAt+'\"><\\\/script>');\ndocument.write('');\n<\/script><p class=\"wp-block-paragraph\">Now, start Menuconfig (&gt;idf.py menuconfig):<\/p><figure class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"352\" height=\"264\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_52_42.jpg\" alt=\"\" data-id=\"7084\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_52_42.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7084\" class=\"wp-image-7084\"><figcaption class=\"blocks-gallery-item__caption\">Eigenen Men&uuml;punkt ausw&auml;hlen<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"425\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_53_34.jpg\" alt=\"\" data-id=\"7079\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_53_34.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7079\" class=\"wp-image-7079\"><figcaption class=\"blocks-gallery-item__caption\">Konifguration ausw&auml;hlen<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"292\" height=\"152\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_58_11.jpg\" alt=\"\" data-id=\"7078\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-15_58_11.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7078\" class=\"wp-image-7078\"><figcaption class=\"blocks-gallery-item__caption\">Konfigurations Text &auml;ndern<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"528\" height=\"196\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-16_13_12.jpg\" alt=\"\" data-id=\"7085\" data-full-url=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-16_13_12.jpg\" data-link=\"https:\/\/www.fambach.net\/?attachment_id=7085\" class=\"wp-image-7085\"><figcaption class=\"blocks-gallery-item__caption\">Ge&auml;nderter Text<\/figcaption><\/figure><\/li><\/ul><\/figure><p class=\"wp-block-paragraph\">Still building and seeing what it looks like (idf.py build flash -p COM7 monitor)<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"479\" height=\"163\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-04-17_04_42.jpg\" alt=\"\" class=\"wp-image-7086\"><figcaption>Output with configured text.<\/figcaption><\/figure><p class=\"wp-block-paragraph\">Es gibt nicht nur die M&ouml;glichkeit Text zu formatieren, Zahlen und Auswahlisten sind ebenfalls m&ouml;glich. Hier ein paar Beipiele<\/p><pre class=\"wp-block-code\"><code>menu \"Example Configuration\"\nconfig MOSI_GPIO\n       int \"MOSI GPIO number\"\n       range 0 46\n       default 23 if IDF_TARGET_ESP32\n       default 35 if IDF_TARGET_ESP32S2\n       help\n           GPIO number (IOxx) to SPI MOSI. ...\n\nconfig INVERSION\n       bool \"Enable Display Inversion\"\n       default false\n       help\n           Enable Display Inversion.\n\nchoice\n      bool \"Mesh AP Authentication Mode\"\n      default WIFI_AUTH_WPA2_PSK\n      help\n          Authentication mode.\n\n      config WIFI_AUTH_OPEN\n          bool \"WIFI_AUTH_OPEN\"\n      config WIFI_AUTH_WPA_PSK\n          bool \"WIFI_AUTH_WPA_PSK\"\n      config WIFI_AUTH_WPA2_PSK\n          bool \"WIFI_AUTH_WPA2_PSK\"\n      config WIFI_AUTH_WPA_WPA2_PSK\n          bool \"WIFI_AUTH_WPA_WPA2_PSK\"\nendchoice\n\nconfig MESH_GLOBAL_DNS_IP\n       hex \"Global DNS\"\n       depends on MESH_USE_GLOBAL_DNS_IP\n       default 0x08080808\n       help\n           The IP address of global DNS server that is used\n           for internal IP subnet formed by the mesh network\n           if MESH_USE_GLOBAL_DNS_IP is enabled.\n           Note: The IP address is in platform (not network)\n           format.\n...\n\nendmenu<\/code><\/pre><p class=\"wp-block-paragraph\">Es sind auch Abh&auml;ngigkeiten zwischen Kondifgurations Punkten m&ouml;glich. Diese werden mit dem Schl&uuml;sselw&ouml;rtern \"depends on\" gefolgt von einem oder mehreren Konfigurationsname mit logischen verkn&uuml;pfungen. Logische Verkn&uuml;pfungen sind || (oder) oder &amp;&amp; (und).<\/p><pre class=\"wp-block-code\"><code>.config SW1_PIN\n\t\tint \"SW1 pin\"\n\t\trange 0 39\n        default 36\n\t\tdepends on SW1_ENABLE\n\t\thelp\n\t\t\tSwitch 1 Gpio pin\nconfig SW2_ENABLE\n\t\tbool \"SW2 Enable\"\n        default false\n\t\thelp\n\t\t\tEnable Switch 2\nconfig SW2_PIN\n\t\tint \"SW2 pin\"\n\t\trange 0 39\n        default 35\n\t\tdepends on SW2_ENABLE\n\t\thelp\n\t\t\tSW2 Gpio pin\nconfig LONG_PRESS_ENABLED\n\t\tbool \"Long press enabled\"\n        default false\n\t\tdepends on (SW1_ENABLE || SW2_ENABLE)\n\t\thelp\n\t\t   If this is enabled the system\n\t\t   distinguishes between long pressed buttons\n                   and short pressed buttons\n\tconfig LONG_PRESS_TIME_MS\n\t\tint \"Long press time ms\"\n\t\trange 1000 8000\n        default 2000\n\t\tdepends on LONG_PRESS_ENABLED\n\t\thelp\n\t\t  How long should a button be pressed to be\n                  marked as a long press; if it is not long pressed\n                  it is a short press\n...\n<\/code><\/pre><h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2><p class=\"wp-block-paragraph\">Die Idee Konfigurationen auszulagern ist nicht neu. Sie aber mit eine Men&uuml; zu versehen finde ich sehr charmant gel&ouml;st.<\/p><h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Verwandte Beitr&auml;ge<span class=\"ez-toc-section-end\"><\/span><\/h2><p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.fambach.net\/en\/?p=6943\">Main contribution<\/a><\/p><div class=\"display-posts-listing\">\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-projekt-erstellen\/\">Espressif IDF \u2013 Create Project<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-konsolenausgabe\/\">Espressif IDF \u2013 Console Output<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-fehlerbehandlung\/\">Espressif IDF \u2013 Error Handling<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-log-nachrichten\/\">Espressif IDF \u2013 Log Messages<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-timer\/\">Espressif IDF \u2013 Timer<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/\">Espressif IDF \u2013 Menuconfig<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks\/\">Espressif IDF \u2013 Tasks<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\">Espressif IDF \u2013 GPIOs<\/a><\/div>\n<\/div>\n\n\n\n<\/p><h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Sources<span class=\"ez-toc-section-end\"><\/span><\/h2><p class=\"wp-block-paragraph\"><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/freertos.html#\" target=\"_blank\"><\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/kconfig.html?highlight=config\" target=\"_blank\">IDF - Configuration<\/a><\/p><p class=\"wp-block-paragraph\"><a rel=\"noreferrer noopener\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/kbuild\/kconfig-language.txt\" target=\"_blank\">KConfig Guide<\/a><\/p><p class=\"wp-block-paragraph\"><a href=\"https:\/\/pypi.org\/project\/kconfiglib\/#kconfig-extensions\" target=\"_blank\" rel=\"noreferrer noopener\">KConfig Extensions<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Eine der sch&ouml;nen Erungenschaften der IDF ist die Men&uuml; gesteuerte Konfiguration. Noch sch&ouml;ner finde ich, dass eigenen Konfiguratiospunkte erstellt werden k&ouml;nnen. Diese werden dann automatisch in das Haupt Men&uuml; eingeh&auml;ngt. Vorab: Die Biliothek &#8222;esp_system.h&#8220; wird im Quellcode ben&ouml;tigt sonst klappts nicht Nach &Auml;nderungen am Men&uuml; ein idf.py clean durchf&uuml;hren Zur Erstellung solch eines Konfigurationspunktes nehme &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\" class=\"read-more-link\">Carry on reading <span class=\"screen-reader-text\">\"Espressif IDF &#8211; GPIOs\"<\/span> <span class=\"meta-nav\">\u2192<\/span><\/a>","protected":false},"author":1,"featured_media":7084,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[184,188,472,473,496],"tags":[497,148,499,465,474,492,476,500,491],"class_list":["post-7159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-esp-32","category-esp32-s2","category-espressif-idf","category-how-to","tag-c-2","tag-esp32","tag-esp32s2","tag-espressif","tag-espressif-idf","tag-howto","tag-idf","tag-shulung","tag-tutorial","penguin-post","penguin-post-not-sticky"],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/comments?post=7159"}],"version-history":[{"count":3,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7159\/revisions"}],"predecessor-version":[{"id":8172,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7159\/revisions\/8172"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=7159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=7159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=7159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}