#include "cli_console.hpp"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include "cli/cli.hpp"
#include "common/instance.hpp"
#include "common/new.hpp"
namespace ot {
namespace Cli {
static OT_DEFINE_ALIGNED_VAR(sCliConsoleRaw, sizeof(Console), uint64_t);
extern "C" void otCliConsoleInit(otInstance *aInstance, otCliConsoleOutputCallback aCallback, void *aContext)
{
Instance *instance = static_cast<Instance *>(aInstance);
Server::sServer = new (&sCliConsoleRaw) Console(instance);
static_cast<Console *>(Server::sServer)->SetOutputCallback(aCallback);
static_cast<Console *>(Server::sServer)->SetContext(aContext);
}
extern "C" void otCliConsoleInputLine(char *aBuf, uint16_t aBufLength)
{
static_cast<Console *>(Server::sServer)->ReceiveTask(aBuf, aBufLength);
}
Console::Console(Instance *aInstance)
: Server(aInstance)
, mCallback(NULL)
, mContext(NULL)
{
}
void Console::SetContext(void *aContext)
{
mContext = aContext;
}
void Console::SetOutputCallback(otCliConsoleOutputCallback aCallback)
{
mCallback = aCallback;
}
void Console::ReceiveTask(char *aBuf, uint16_t aBufLength)
{
mInterpreter.ProcessLine(aBuf, aBufLength, *this);
}
int Console::Output(const char *aBuf, uint16_t aBufLength)
{
return mCallback(aBuf, aBufLength, mContext);
}
} }