feat: 添加编译时模块开关配置
通过 sdkconfig.defaults 选择性启用/禁用模块,减少固件体积: 新增模块开关: - CONFIG_MIMI_CHAN_TELEGRAM (默认 n) - CONFIG_MIMI_CHAN_FEISHU (默认 y) - CONFIG_MIMI_TOOL_WEB_SEARCH (默认 y) - CONFIG_MIMI_TOOL_GPIO (默认 n) - CONFIG_MIMI_WS_SERVER (默认 y) - CONFIG_MIMI_WIFI_ONBOARD (默认 y) - CONFIG_MIMI_OTA (默认 n) 技术实现: - CMakeLists.txt 条件编译源文件 - 头文件使用 static inline stub - CLI 命令和工具注册也支持条件编译 消除 Telegram 未配置时的 5 秒轮询警告日志
This commit is contained in:
@@ -2,26 +2,34 @@
|
||||
|
||||
#include "esp_err.h"
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* Initialize GPIO tool — configure allowed pins and directions.
|
||||
*/
|
||||
#ifdef CONFIG_MIMI_TOOL_GPIO
|
||||
esp_err_t tool_gpio_init(void);
|
||||
|
||||
/**
|
||||
* Write a GPIO pin HIGH or LOW.
|
||||
* Input JSON: {"pin": <int>, "state": <0|1>}
|
||||
*/
|
||||
esp_err_t tool_gpio_write_execute(const char *input_json, char *output, size_t output_size);
|
||||
|
||||
/**
|
||||
* Read a single GPIO pin state.
|
||||
* Input JSON: {"pin": <int>}
|
||||
*/
|
||||
esp_err_t tool_gpio_read_execute(const char *input_json, char *output, size_t output_size);
|
||||
|
||||
/**
|
||||
* Read all allowed GPIO pin states at once.
|
||||
* Input JSON: {} (no parameters)
|
||||
*/
|
||||
esp_err_t tool_gpio_read_all_execute(const char *input_json, char *output, size_t output_size);
|
||||
#else
|
||||
static inline esp_err_t tool_gpio_init(void) { return ESP_OK; }
|
||||
static inline esp_err_t tool_gpio_write_execute(const char *input_json, char *output, size_t output_size) {
|
||||
(void)input_json; (void)output; (void)output_size;
|
||||
if (output && output_size > 0) {
|
||||
snprintf(output, output_size, "Error: GPIO tool is disabled in this build.");
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
static inline esp_err_t tool_gpio_read_execute(const char *input_json, char *output, size_t output_size) {
|
||||
(void)input_json; (void)output; (void)output_size;
|
||||
if (output && output_size > 0) {
|
||||
snprintf(output, output_size, "Error: GPIO tool is disabled in this build.");
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
static inline esp_err_t tool_gpio_read_all_execute(const char *input_json, char *output, size_t output_size) {
|
||||
(void)input_json; (void)output; (void)output_size;
|
||||
if (output && output_size > 0) {
|
||||
snprintf(output, output_size, "Error: GPIO tool is disabled in this build.");
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -59,6 +59,7 @@ esp_err_t tool_registry_init(void)
|
||||
s_tool_count = 0;
|
||||
|
||||
/* Register web_search */
|
||||
#ifdef CONFIG_MIMI_TOOL_WEB_SEARCH
|
||||
tool_web_search_init();
|
||||
|
||||
mimi_tool_t ws = {
|
||||
@@ -71,6 +72,7 @@ esp_err_t tool_registry_init(void)
|
||||
.execute = tool_web_search_execute,
|
||||
};
|
||||
register_tool(&ws);
|
||||
#endif
|
||||
|
||||
/* Register get_current_time */
|
||||
mimi_tool_t gt = {
|
||||
@@ -192,6 +194,7 @@ esp_err_t tool_registry_init(void)
|
||||
register_tool(&cr);
|
||||
|
||||
/* Register GPIO tools */
|
||||
#ifdef CONFIG_MIMI_TOOL_GPIO
|
||||
tool_gpio_init();
|
||||
|
||||
mimi_tool_t gw = {
|
||||
@@ -227,6 +230,7 @@ esp_err_t tool_registry_init(void)
|
||||
.execute = tool_gpio_read_all_execute,
|
||||
};
|
||||
register_tool(&ga);
|
||||
#endif
|
||||
|
||||
build_tools_json();
|
||||
|
||||
|
||||
@@ -2,28 +2,28 @@
|
||||
|
||||
#include "esp_err.h"
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* Initialize web search tool.
|
||||
*/
|
||||
#ifdef CONFIG_MIMI_TOOL_WEB_SEARCH
|
||||
esp_err_t tool_web_search_init(void);
|
||||
|
||||
/**
|
||||
* Execute a web search.
|
||||
*
|
||||
* @param input_json JSON string with "query" field
|
||||
* @param output Output buffer for formatted search results
|
||||
* @param output_size Size of output buffer
|
||||
* @return ESP_OK on success
|
||||
*/
|
||||
esp_err_t tool_web_search_execute(const char *input_json, char *output, size_t output_size);
|
||||
|
||||
/**
|
||||
* Save Brave Search API key to NVS.
|
||||
*/
|
||||
esp_err_t tool_web_search_set_key(const char *api_key);
|
||||
|
||||
/**
|
||||
* Save Tavily API key to NVS.
|
||||
*/
|
||||
esp_err_t tool_web_search_set_tavily_key(const char *api_key);
|
||||
#else
|
||||
static inline esp_err_t tool_web_search_init(void) { return ESP_OK; }
|
||||
static inline esp_err_t tool_web_search_execute(const char *input_json, char *output, size_t output_size) {
|
||||
(void)input_json; (void)output; (void)output_size;
|
||||
if (output && output_size > 0) {
|
||||
snprintf(output, output_size, "Error: Web search tool is disabled in this build.");
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
static inline esp_err_t tool_web_search_set_key(const char *api_key) {
|
||||
(void)api_key;
|
||||
return ESP_OK;
|
||||
}
|
||||
static inline esp_err_t tool_web_search_set_tavily_key(const char *api_key) {
|
||||
(void)api_key;
|
||||
return ESP_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user