mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-02-01 07:42:18 +00:00
120 lines
3.8 KiB
C++
120 lines
3.8 KiB
C++
//
|
|
// 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
|