99 lines
1.9 KiB
C
99 lines
1.9 KiB
C
/*
|
|
* Copyright (c) 2023 Basalte bv
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <zephyr/net/coap_service.h>
|
|
#include <zephyr/shell/shell.h>
|
|
|
|
|
|
static int cmd_list(const struct shell *sh, size_t argc, char **argv)
|
|
{
|
|
int count = 0;
|
|
|
|
ARG_UNUSED(argv);
|
|
|
|
if (argc > 1) {
|
|
return -EINVAL;
|
|
}
|
|
|
|
shell_print(sh, " Name State Endpoint");
|
|
COAP_SERVICE_FOREACH(service) {
|
|
shell_print(sh,
|
|
"[%2d] %-16s %-16s %s:%d",
|
|
++count,
|
|
service->name,
|
|
service->data->sock_fd < 0 ? "INACTIVE" : "ACTIVE",
|
|
service->host != NULL ? service->host : "",
|
|
*service->port);
|
|
}
|
|
|
|
if (count == 0) {
|
|
shell_print(sh, "No services available");
|
|
return -ENOENT;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int cmd_start(const struct shell *sh, size_t argc, char **argv)
|
|
{
|
|
int ret = -ENOENT;
|
|
|
|
if (argc != 2) {
|
|
shell_error(sh, "Usage: start <service>");
|
|
return -EINVAL;
|
|
}
|
|
|
|
COAP_SERVICE_FOREACH(service) {
|
|
if (strcmp(argv[1], service->name) == 0) {
|
|
ret = coap_service_start(service);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (ret < 0) {
|
|
shell_error(sh, "Failed to start service (%d)", ret);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static int cmd_stop(const struct shell *sh, size_t argc, char **argv)
|
|
{
|
|
int ret = -ENOENT;
|
|
|
|
if (argc != 2) {
|
|
shell_error(sh, "Usage: stop <service>");
|
|
return -EINVAL;
|
|
}
|
|
|
|
COAP_SERVICE_FOREACH(service) {
|
|
if (strcmp(argv[1], service->name) == 0) {
|
|
ret = coap_service_stop(service);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (ret < 0) {
|
|
shell_error(sh, "Failed to stop service (%d)", ret);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
SHELL_STATIC_SUBCMD_SET_CREATE(sub_coap_service,
|
|
SHELL_CMD(start, NULL,
|
|
"Start a CoAP Service\n"
|
|
"Usage: start <service>",
|
|
cmd_start),
|
|
SHELL_CMD(stop, NULL,
|
|
"Stop a CoAP Service\n"
|
|
"Usage: stop <service>",
|
|
cmd_stop),
|
|
SHELL_SUBCMD_SET_END /* Array terminated. */
|
|
);
|
|
SHELL_CMD_REGISTER(coap_service, &sub_coap_service, "CoAP Service commands", cmd_list);
|