blob: 6f67e4d113bf407bcb6b845f0113ff2675cb1fc8 [file] [log] [blame]
Colm Donelana21620d2019-10-11 13:09:49 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "CommandFileParser.hpp"
7
8#include <algorithm>
9#include <fstream>
10#include <iostream>
11#include <iterator>
12
13namespace armnn
14{
15
16namespace gatordmock
17{
18
19void CommandFileParser::ParseFile(std::string CommandFile, GatordMockService& mockService)
20{
21 std::ifstream infile(CommandFile);
22 std::string line;
23
24 std::cout << "Parsing command file: " << CommandFile << std::endl;
25
Colm Donelan02705242019-11-14 14:19:07 +000026 while (mockService.ReceiveThreadRunning() && std::getline(infile, line))
Colm Donelana21620d2019-10-11 13:09:49 +010027 {
28 std::istringstream iss(line);
Colm Donelana21620d2019-10-11 13:09:49 +010029 std::vector<std::string> tokens;
30
31 std::copy(std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>(),
32 std::back_inserter(tokens));
Colm Donelane9b5d292020-03-02 21:35:10 +000033 if (tokens.size() > 0)
Finn Williams15db7452019-10-15 14:22:13 +010034 {
Colm Donelane9b5d292020-03-02 21:35:10 +000035 std::string command = tokens[0];
36 if (command == "LIST")
37 {
38 // Expected format for the SET command
39 //
40 // LIST
41 //
Finn Williams15db7452019-10-15 14:22:13 +010042
Colm Donelane9b5d292020-03-02 21:35:10 +000043 mockService.SendRequestCounterDir();
44 }
45 if (command == "SET")
46 {
47 // Expected format for the SET command
48 //
49 // SET 500000 1 2 5 10
50 //
51 // This breaks down to:
52 // SET command
53 // 500000 polling period in micro seconds
54 // 1 2 5 10 counter list
Colm Donelana21620d2019-10-11 13:09:49 +010055
Colm Donelane9b5d292020-03-02 21:35:10 +000056 if (tokens.size() > 2) // minimum of 3 tokens.
57 {
58 uint32_t period = static_cast<uint32_t>(std::stoul(tokens[1]));
Colm Donelana21620d2019-10-11 13:09:49 +010059
Colm Donelane9b5d292020-03-02 21:35:10 +000060 std::vector<uint16_t> counters;
Colm Donelana21620d2019-10-11 13:09:49 +010061
Colm Donelane9b5d292020-03-02 21:35:10 +000062 std::transform(tokens.begin() + 2, tokens.end(), std::back_inserter(counters),
63 [](const std::string& str)
64 { return static_cast<uint16_t>(std::stoul(str)); });
Colm Donelana21620d2019-10-11 13:09:49 +010065
Colm Donelane9b5d292020-03-02 21:35:10 +000066 mockService.SendPeriodicCounterSelectionList(period, counters);
67 }
68 else
69 {
70 std::cerr << "Invalid SET command. Format is: SET <polling period> <id list>" << std::endl;
71 }
72 }
73 else if (command == "WAIT")
74 {
75 // Expected format for the SET command
76 //
77 // WAIT 11000000
78 //
79 // This breaks down to:
80 // WAIT command
81 // 11000000 timeout period in micro seconds
82 if (tokens.size() > 1) // minimum of 2 tokens.
83 {
84 uint32_t timeout = static_cast<uint32_t>(std::stoul(tokens[1]));
85 mockService.WaitCommand(timeout);
86 }
87 else
88 {
89 std::cerr << "Invalid WAIT command. Format is: WAIT <interval>" << std::endl;
90 }
91 }
Colm Donelana21620d2019-10-11 13:09:49 +010092 }
93 }
94}
95
96} // namespace gatordmock
97
98} // namespace armnn