.. _program_listing_file_src_shell.h: Program Listing for File shell.h ================================ |exhale_lsh| :ref:`Return to documentation for file ` (``src/shell.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // BSD 3-Clause License // // Copyright (c) 2023, Ekumen Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // 3. Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #pragma once #include #include "serial_stream.h" namespace andino { class Shell { public: typedef void (*CommandCallback)(int argc, char** argv); void set_serial_stream(const SerialStream* serial_stream); void set_default_callback(CommandCallback callback); void register_command(const char* name, CommandCallback callback); void process_input(); private: static constexpr int kCommandNameLengthMax{8}; struct Command { char name[kCommandNameLengthMax]; CommandCallback callback; }; static constexpr int kCommandsMax{16}; static constexpr int kCommandArgMax{16}; static constexpr int kCommandPromptLengthMax{64}; void parse_message(); void execute_callback(int argc, char** argv); const SerialStream* serial_stream_{nullptr}; CommandCallback default_callback_{nullptr}; Command commands_[kCommandsMax]; size_t commands_count_{0}; char message_buffer_[kCommandPromptLengthMax]; int message_index_{0}; }; } // namespace andino