forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.8 KiB
119 lines
3.8 KiB
// |
|
// 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
|
|
|