blob: 35a59ec5375f6d7164de78311304f23585079cdd [file] [log] [blame]
//
// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "CommandFileParser.hpp"
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
namespace armnn
{
namespace gatordmock
{
void CommandFileParser::ParseFile(std::string CommandFile, GatordMockService& mockService)
{
std::ifstream infile(CommandFile);
std::string line;
std::cout << "Parsing command file: " << CommandFile << std::endl;
while (mockService.ReceiveThreadRunning() && std::getline(infile, line))
{
std::istringstream iss(line);
std::vector<std::string> tokens;
std::copy(std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>(),
std::back_inserter(tokens));
if (tokens.size() > 0)
{
std::string command = tokens[0];
if (command == "DISABLE")
{
// Send a deactivate timeline packet
// Expected format for the ENABLE command
//
// DISABLE
//
mockService.SendDeactivateTimelinePacket();
}
else if (command == "ENABLE")
{
// Send aa activate timeline packet
// Expected format for the ENABLE command
//
// ENABLE
//
mockService.SendActivateTimelinePacket();
}
else if (command == "LIST")
{
// Request the Counter Directory
// Expected format for the LIST command
//
// LIST
//
mockService.SendRequestCounterDir();
}
if (command == "SET")
{
// Send a periodic counter selection packet
// Expected format for the SET command
//
// SET 500000 1 2 5 10
//
// This breaks down to:
// SET command
// 500000 polling period in micro seconds
// 1 2 5 10 counter list
if (tokens.size() > 2) // minimum of 3 tokens.
{
uint32_t period = static_cast<uint32_t>(std::stoul(tokens[1]));
std::vector<uint16_t> counters;
std::transform(tokens.begin() + 2, tokens.end(), std::back_inserter(counters),
[](const std::string& str)
{ return static_cast<uint16_t>(std::stoul(str)); });
mockService.SendPeriodicCounterSelectionList(period, counters);
}
else
{
std::cerr << "Invalid SET command. Format is: SET <polling period> <id list>" << std::endl;
}
}
else if (command == "WAIT")
{
// Wait for an interval of time in microseconds
// Expected format for the WAIT command
//
// WAIT 11000000
//
// This breaks down to:
// WAIT command
// 11000000 timeout period in microseconds
if (tokens.size() > 1) // minimum of 2 tokens.
{
uint32_t timeout = static_cast<uint32_t>(std::stoul(tokens[1]));
mockService.WaitCommand(timeout);
}
else
{
std::cerr << "Invalid WAIT command. Format is: WAIT <interval>" << std::endl;
}
}
}
}
}
} // namespace gatordmock
} // namespace armnn