/* * * Copyright (c) 2021 Project CHIP Authors * Copyright (c) 2019 Google LLC. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "LightingManager.h" #include #include using namespace chip::Shell; static CHIP_ERROR AppCommandHelpHandler(int argc, char * argv[]); static CHIP_ERROR AppCommandLightingHandler(int argc, char * argv[]); static CHIP_ERROR AppCommandDispatch(int argc, char * argv[]); static chip::Shell::Engine sAppSubcommands; void RegisterAppShellCommands(void) { static const shell_command_t sAppSubCommands[] = { { .cmd_func = AppCommandHelpHandler, .cmd_name = "help", .cmd_help = "Usage: app ", }, { .cmd_func = AppCommandLightingHandler, .cmd_name = "light", .cmd_help = "Usage: app light [on|off|toggle]", }, }; static const shell_command_t sAppCommand = { .cmd_func = AppCommandDispatch, .cmd_name = "app", .cmd_help = "App commands", }; sAppSubcommands.RegisterCommands(sAppSubCommands, ArraySize(sAppSubCommands)); Engine::Root().RegisterCommands(&sAppCommand, 1); } CHIP_ERROR AppCommandHelpHandler(int argc, char * argv[]) { sAppSubcommands.ForEachCommand(PrintCommandHelp, nullptr); return CHIP_NO_ERROR; } CHIP_ERROR AppCommandLightingHandler(int argc, char * argv[]) { if (argc == 0) { streamer_printf(streamer_get(), "The light is %s\n", LightMgr().IsLightOn() ? "on" : "off"); } else if (strcmp(argv[0], "on") == 0) { streamer_printf(streamer_get(), "Turning the light on ...\n"); LightMgr().InitiateAction(LightingManager::ACTOR_APP_CMD, LightingManager::ON_ACTION, 0); } else if (strcmp(argv[0], "off") == 0) { streamer_printf(streamer_get(), "Turning the light off ...\n"); LightMgr().InitiateAction(LightingManager::ACTOR_APP_CMD, LightingManager::OFF_ACTION, 0); } else if (strcmp(argv[0], "toggle") == 0) { streamer_printf(streamer_get(), "Toggling the light ...\n"); if (LightMgr().IsLightOn()) LightMgr().InitiateAction(LightingManager::ACTOR_APP_CMD, LightingManager::OFF_ACTION, 0); else LightMgr().InitiateAction(LightingManager::ACTOR_APP_CMD, LightingManager::ON_ACTION, 0); } else { return CHIP_ERROR_INVALID_ARGUMENT; } return CHIP_NO_ERROR; } CHIP_ERROR AppCommandDispatch(int argc, char * argv[]) { if (argc == 0) { AppCommandHelpHandler(argc, argv); return CHIP_NO_ERROR; } return sAppSubcommands.ExecCommand(argc, argv); }