/* * Copyright (c) 2019, The OpenThread Authors. * 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. */ /** * @file * This file includes definitions for OpenThread daemon client. */ #ifndef OTBR_WEB_WEB_SERVICE_OT_CLIENT_HPP_ #define OTBR_WEB_WEB_SERVICE_OT_CLIENT_HPP_ #include "openthread-br/config.h" #include namespace otbr { namespace Web { #define OT_SCANNED_NET_BUFFER_SIZE 250 #define OT_SET_MAX_DATA_SIZE 250 #define OT_NETWORK_NAME_MAX_SIZE 17 #define OT_HARDWARE_ADDRESS_SIZE 8 #define OT_PREFIX_SIZE 8 #define OT_ROUTER_ROLE 2 struct WpanNetworkInfo { char mNetworkName[OT_NETWORK_NAME_MAX_SIZE]; bool mAllowingJoin; uint16_t mPanId; uint16_t mChannel; uint64_t mExtPanId; int8_t mRssi; uint8_t mHardwareAddress[OT_HARDWARE_ADDRESS_SIZE]; uint8_t mPrefix[OT_PREFIX_SIZE]; }; /** * This class implements functionality of OpenThread client. */ class OpenThreadClient { public: /** * This constructor creates an OpenThread client. * * @param[in] aNetifName The Thread network interface name. */ OpenThreadClient(const char *aNetifName); /** * This destructor destories an OpenThread client. */ ~OpenThreadClient(void); /** * This method connects to OpenThread daemon. * * @retval TRUE Successfully connected to the daemon. * @retval FALSE Failed to connected to the daemon. */ bool Connect(void); /** * This method executes OpenThread CLI. * * @param[in] aFormat C style format string. * @param[in] ... C style format arguments. * * @returns A pointer to the output if succeeded, otherwise nullptr. */ char *Execute(const char *aFormat, ...); /** * This method reads from OpenThread CLI. * * @param[in] aResponse The expected read response. * @param[in] aTimeout Timeout for the read, in ms. * * @returns A pointer to the output if the expected response is found, otherwise nullptr. */ char *Read(const char *aResponse, int aTimeout); /** * This method scans Thread network. * * @param[out] aNetworks A pointer to the buffer to store network information. * @param[in] aLength Number of entries in @p aNetworks. * * @returns Number of entries found. 0 if none found. */ int Scan(WpanNetworkInfo *aNetworks, int aLength); /** * This method performs factory reset. */ bool FactoryReset(void); private: void Disconnect(void); void DiscardRead(void); enum { kBufferSize = 1024, ///< Maximum command line input and output buffer. kDefaultTimeout = 800, ///< Default timeout(ms) waiting for a command finish. }; const char *mNetifName; char mBuffer[kBufferSize]; int mTimeout; /// Timeout in milliseconds int mSocket; }; } // namespace Web } // namespace otbr #endif // OTBR_WEB_WEB_SERVICE_OT_CLIENT_HPP_