blob: 103de9396b14a4b150a4dbbc49bfe2a9162cbef2 [file]
/*
* 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 <stdint.h>
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_