指令响应使用指南
about
使用指南
启用指令响应
在 sdkconfig 中设置 CONFIG_ESP_RMAKER_CMD_RESP_ENABLE=y
启用指令响应。之后,只需调用 API esp_rmaker_cmd_register()
即可注册指令。
API 和回调原型定义如下:
esp_err_t esp_rmaker_cmd_register(uint16_t cmd, uint8_t access, esp_rmaker_cmd_handler_t handler, bool free_on_return, void *priv);
typedef esp_err_t (*esp_rmaker_cmd_handler_t)(const void *in_data, size_t in_len, void **out_data, size_t *out_len, esp_rmaker_cmd_ctx_t *ctx, void *priv);
参数 | 说明 |
---|---|
cmd | 指令标识符。 自定义指令应使用 ESP_RMAKER_CMD_CUSTOM_START (0x1000) 之后的 ID。 |
access | 指令的用户访问权限。 可以是各类 用户角色标志 的逻辑或,如: ESP_RMAKER_USER_ROLE_SUPER_ADMIN ESP_RMAKER_USER_ROLE_PRIMARY_USER ESP_RMAKER_USER_ROLE_SECONDARY_USER |
handler | 接收到指定指令时调用的处理函数。 |
free_on_return | 标志,指示框架在响应发送后是否释放输出。 |
priv | 注册指令时传递的可选私有数据。 |
处理函数 esp_rmaker_cmd_handler_t
的参数如下:
参数 | 说明 |
---|---|
in_data | 输入数据指针。 |
in_len | 数据长度。 |
out_data | 输出数据指针,由处理函数设置。 |
out_len | 生成的输出长度。 |
ctx | 指令上下文。 包含指令 ID、请求 ID 及发起指令用户的角色。 |
priv | 注册指令时指定的私有数据。 |
使用示例
#define LIGHT_CMD ESP_RMAKER_CMD_CUSTOM_START /* 自定义指令应从这里开始 */
/* 指令回调 */
esp_err_t led_light_cmd_handler(const void *in_data, size_t in_len, void **out_data, size_t *out_len, esp_rmaker_cmd_ctx_t *ctx, void *priv)
{
ESP_LOGI(TAG, "Got command: %.*s", in_len, (char *)in_data);
/* 发送虚拟响应 */
static char resp_data[100];
snprintf(resp_data, sizeof(resp_data), "{\"status\":\"success\"}");
*out_data = resp_data;
*out_len = strlen(resp_data);
return ESP_OK;
}
void app_main()
{
...
/* 注册主要用户和次要用户可访问(管理员用户不可访问)的指令 */
esp_rmaker_cmd_register(LIGHT_CMD, ESP_RMAKER_USER_ROLE_PRIMARY_USER | ESP_RMAKER_USER_ROLE_SECONDARY_USER, led_light_cmd_handler, false, NULL);
...
}