blob: 70dd249216e6b647a5637de9a234f0307277764c [file] [log] [blame]
/**
* @file
* @brief Shell APIs for Bluetooth IAS
*
* Copyright (c) 2022 Codecoup
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdint.h>
#include <zephyr/types.h>
#include <zephyr/shell/shell.h>
#include <stdlib.h>
#include <zephyr/bluetooth/gatt.h>
#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/bluetooth/services/ias.h>
#include "bt.h"
extern const struct shell *ctx_shell;
static void ias_discover_cb(struct bt_conn *conn, int err)
{
if (err != 0) {
shell_error(ctx_shell, "Failed to discover IAS err: %d\n", err);
} else {
shell_print(ctx_shell, "IAS discover success\n");
}
}
static struct bt_ias_client_cb ias_client_callbacks = {
.discover = ias_discover_cb,
};
static int cmd_ias_client_init(const struct shell *sh, size_t argc, char **argv)
{
int err;
if (!ctx_shell) {
ctx_shell = sh;
}
err = bt_ias_client_cb_register(&ias_client_callbacks);
if (err != 0) {
shell_print(sh, "IAS client init failed");
} else {
shell_print(sh, "IAS client initialized");
}
return err;
}
static int cmd_ias_client_discover(const struct shell *sh, size_t argc, char **argv)
{
int err;
err = bt_ias_discover(default_conn);
if (err != 0) {
shell_print(sh, "IAS discover failed");
}
return err;
}
static int cmd_ias_client_set_alert(const struct shell *sh, size_t argc, char **argv)
{
int err = 0;
if (strcmp(argv[1], "stop") == 0) {
err = bt_ias_client_alert_write(default_conn,
BT_IAS_ALERT_LVL_NO_ALERT);
} else if (strcmp(argv[1], "mild") == 0) {
err = bt_ias_client_alert_write(default_conn,
BT_IAS_ALERT_LVL_MILD_ALERT);
} else if (strcmp(argv[1], "high") == 0) {
err = bt_ias_client_alert_write(default_conn,
BT_IAS_ALERT_LVL_HIGH_ALERT);
} else {
shell_error(sh, "Invalid alert level %s", argv[1]);
return -EINVAL;
}
if (err != 0) {
shell_error(sh, "Failed to send %s alert %d", argv[1], err);
} else {
shell_print(sh, "Sent alert %s", argv[1]);
}
return err;
}
static int cmd_ias_client(const struct shell *sh, size_t argc, char **argv)
{
if (argc > 1) {
shell_error(sh, "%s unknown parameter: %s",
argv[0], argv[1]);
} else {
shell_error(sh, "%s Missing subcommand", argv[0]);
}
return -ENOEXEC;
}
SHELL_STATIC_SUBCMD_SET_CREATE(ias_cli_cmds,
SHELL_CMD_ARG(init, NULL,
"Initialize the client and register callbacks",
cmd_ias_client_init, 1, 0),
SHELL_CMD_ARG(discover, NULL,
"Discover IAS",
cmd_ias_client_discover, 1, 0),
SHELL_CMD_ARG(set_alert, NULL,
"Send alert <stop/mild/high>",
cmd_ias_client_set_alert, 2, 0),
SHELL_SUBCMD_SET_END
);
SHELL_CMD_ARG_REGISTER(ias_client, &ias_cli_cmds, "Bluetooth IAS client shell commands",
cmd_ias_client, 1, 1);