/** * @file * @brief Shell APIs for Bluetooth IAS * * Copyright (c) 2022 Codecoup * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include #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 ", 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);