* Add header with public API of OpenThread module. * Add module include directory to Zephyr include directories. * Use new header in platform implementation. Signed-off-by: Adrian Gielniewski <adrian.gielniewski@nordicsemi.no>
98 lines
1.8 KiB
C
98 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2018 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <zephyr/kernel.h>
|
|
#include <stdio.h>
|
|
#include <zephyr/sys/printk.h>
|
|
#include <zephyr/shell/shell.h>
|
|
#include <zephyr/shell/shell_uart.h>
|
|
|
|
#include <openthread.h>
|
|
|
|
#include <openthread/cli.h>
|
|
#include <openthread/instance.h>
|
|
|
|
#include "platform-zephyr.h"
|
|
|
|
#define OT_SHELL_BUFFER_SIZE CONFIG_SHELL_CMD_BUFF_SIZE
|
|
|
|
static char rx_buffer[OT_SHELL_BUFFER_SIZE];
|
|
|
|
static const struct shell *shell_p;
|
|
static bool is_shell_initialized;
|
|
|
|
static int ot_console_cb(void *context, const char *format, va_list arg)
|
|
{
|
|
ARG_UNUSED(context);
|
|
|
|
if (shell_p == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
shell_vfprintf(shell_p, SHELL_NORMAL, format, arg);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define SHELL_HELP_OT "OpenThread subcommands\n" \
|
|
"Use \"ot help\" to get the list of subcommands"
|
|
|
|
static int ot_cmd(const struct shell *sh, size_t argc, char *argv[])
|
|
{
|
|
char *buf_ptr = rx_buffer;
|
|
size_t buf_len = OT_SHELL_BUFFER_SIZE;
|
|
size_t arg_len = 0;
|
|
int i;
|
|
|
|
if (!is_shell_initialized) {
|
|
return -ENOEXEC;
|
|
}
|
|
|
|
for (i = 1; i < argc; i++) {
|
|
if (arg_len) {
|
|
buf_len -= arg_len + 1;
|
|
if (buf_len) {
|
|
buf_ptr[arg_len] = ' ';
|
|
}
|
|
buf_ptr += arg_len + 1;
|
|
}
|
|
|
|
arg_len = snprintk(buf_ptr, buf_len, "%s", argv[i]);
|
|
|
|
if (arg_len >= buf_len) {
|
|
shell_fprintf(sh, SHELL_WARNING,
|
|
"OT shell buffer full\n");
|
|
return -ENOEXEC;
|
|
}
|
|
}
|
|
|
|
if (i == argc) {
|
|
buf_len -= arg_len;
|
|
}
|
|
|
|
shell_p = sh;
|
|
|
|
openthread_mutex_lock();
|
|
otCliInputLine(rx_buffer);
|
|
openthread_mutex_unlock();
|
|
|
|
return 0;
|
|
}
|
|
|
|
SHELL_CMD_ARG_REGISTER(ot, NULL, SHELL_HELP_OT, ot_cmd, 2, 255);
|
|
|
|
void platformShellInit(otInstance *aInstance)
|
|
{
|
|
if (IS_ENABLED(CONFIG_SHELL_BACKEND_SERIAL)) {
|
|
shell_p = shell_backend_uart_get_ptr();
|
|
} else {
|
|
shell_p = NULL;
|
|
}
|
|
|
|
otCliInit(aInstance, ot_console_cb, NULL);
|
|
is_shell_initialized = true;
|
|
}
|