13#ifndef ZEPHYR_INCLUDE_SHELL_SHELL_WEBSOCKET_H_
14#define ZEPHYR_INCLUDE_SHELL_SHELL_WEBSOCKET_H_
27#define SHELL_WEBSOCKET_SERVICE_COUNT CONFIG_SHELL_WEBSOCKET_BACKEND_COUNT
30struct shell_websocket_line_buf {
32 char buf[CONFIG_SHELL_WEBSOCKET_LINE_BUF_SIZE];
39struct shell_websocket {
47 struct shell_websocket_line_buf line_out;
50 struct zsock_pollfd fds[1];
53 struct k_mutex socket_lock;
56 uint8_t rx_buf[CONFIG_SHELL_CMD_BUFF_SIZE];
62 struct k_mutex rx_lock;
68 struct k_work_delayable send_work;
75int shell_websocket_setup(
int ws_socket,
struct http_request_ctx *request_ctx,
void *user_data);
76int shell_websocket_enable(
const struct shell *sh);
78#define GET_WS_NAME(_service) ws_ctx_##_service
79#define GET_WS_SHELL_NAME(_name) shell_websocket_##_name
80#define GET_WS_TRANSPORT_NAME(_service) transport_shell_ws_##_service
81#define GET_WS_DETAIL_NAME(_service) ws_res_detail_##_service
83#define SHELL_WEBSOCKET_DEFINE(_service) \
84 static struct shell_websocket GET_WS_NAME(_service); \
85 static struct shell_transport GET_WS_TRANSPORT_NAME(_service) = { \
86 .api = &shell_websocket_transport_api, \
87 .ctx = &GET_WS_NAME(_service), \
90#define SHELL_WS_PORT_NAME(_service) http_service_##_service
91#define SHELL_WS_BUF_NAME(_service) ws_recv_buffer_##_service
92#define SHELL_WS_TEMP_RECV_BUF_SIZE 256
94#define DEFINE_WEBSOCKET_HTTP_SERVICE(_service) \
95 uint8_t SHELL_WS_BUF_NAME(_service)[SHELL_WS_TEMP_RECV_BUF_SIZE]; \
96 struct http_resource_detail_websocket \
97 GET_WS_DETAIL_NAME(_service) = { \
99 .type = HTTP_RESOURCE_TYPE_WEBSOCKET, \
102 .bitmask_of_supported_http_methods = BIT(HTTP_GET), \
104 .cb = shell_websocket_setup, \
105 .data_buffer = SHELL_WS_BUF_NAME(_service), \
106 .data_buffer_len = sizeof(SHELL_WS_BUF_NAME(_service)), \
107 .user_data = &GET_WS_NAME(_service), \
109 HTTP_RESOURCE_DEFINE(ws_resource_##_service, _service, \
110 "/" CONFIG_SHELL_WEBSOCKET_ENDPOINT_URL, \
111 &GET_WS_DETAIL_NAME(_service))
113#define DEFINE_WEBSOCKET_SERVICE(_service) \
114 SHELL_WEBSOCKET_DEFINE(_service); \
115 SHELL_DEFINE(shell_websocket_##_service, \
116 CONFIG_SHELL_WEBSOCKET_PROMPT, \
117 &GET_WS_TRANSPORT_NAME(_service), \
118 CONFIG_SHELL_WEBSOCKET_LOG_MESSAGE_QUEUE_SIZE, \
119 CONFIG_SHELL_WEBSOCKET_LOG_MESSAGE_QUEUE_TIMEOUT, \
120 SHELL_FLAG_OLF_CRLF); \
121 DEFINE_WEBSOCKET_HTTP_SERVICE(_service)
131#if defined(CONFIG_NET_SOCKETS_SOCKOPT_TLS)
144#define WEBSOCKET_CONSOLE_DEFINE(_service, _sec_tag_list, _sec_tag_list_size) \
145 static uint16_t SHELL_WS_PORT_NAME(_service) = \
146 CONFIG_SHELL_WEBSOCKET_PORT; \
147 HTTPS_SERVICE_DEFINE(_service, \
148 CONFIG_SHELL_WEBSOCKET_IP_ADDR, \
149 &SHELL_WS_PORT_NAME(_service), \
150 SHELL_WEBSOCKET_SERVICE_COUNT, \
151 SHELL_WEBSOCKET_SERVICE_COUNT, \
156 _sec_tag_list_size); \
157 DEFINE_WEBSOCKET_SERVICE(_service); \
173#define WEBSOCKET_CONSOLE_DEFINE(_service, _sec_tag_list, _sec_tag_list_size) \
174 static uint16_t SHELL_WS_PORT_NAME(_service) = \
175 CONFIG_SHELL_WEBSOCKET_PORT; \
176 HTTP_SERVICE_DEFINE(_service, \
177 CONFIG_SHELL_WEBSOCKET_IP_ADDR, \
178 &SHELL_WS_PORT_NAME(_service), \
179 SHELL_WEBSOCKET_SERVICE_COUNT, \
180 SHELL_WEBSOCKET_SERVICE_COUNT, \
182 DEFINE_WEBSOCKET_SERVICE(_service)
191#define WEBSOCKET_CONSOLE_ENABLE(_service) \
192 (void)shell_websocket_enable(&GET_WS_SHELL_NAME(_service))
void(* shell_transport_handler_t)(enum shell_transport_evt evt, void *context)
Shell transport event handler callback.
Definition shell.h:831
BSD Sockets compatible API definitions.
Header file for the shell subsystem.
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
HTTP request context.
Definition server.h:210
Unified shell transport interface.
Definition shell.h:864
Shell instance internals.
Definition shell.h:1129