blob: 35a59ec5375f6d7164de78311304f23585079cdd [file] [log] [blame]
Colm Donelana21620d2019-10-11 13:09:49 +01001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Colm Donelana21620d2019-10-11 13:09:49 +01003// 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];
Finn Williamsf7b9d292020-04-22 13:35:35 +010036 if (command == "DISABLE")
Colm Donelane9b5d292020-03-02 21:35:10 +000037 {
Finn Williamsf7b9d292020-04-22 13:35:35 +010038 // Send a deactivate timeline packet
39 // Expected format for the ENABLE command
40 //
41 // DISABLE
42 //
43 mockService.SendDeactivateTimelinePacket();
44 }
45 else if (command == "ENABLE")
46 {
47 // Send aa activate timeline packet
48 // Expected format for the ENABLE command
49 //
50 // ENABLE
51 //
52 mockService.SendActivateTimelinePacket();
53 }
54 else if (command == "LIST")
55 {
56 // Request the Counter Directory
57 // Expected format for the LIST command
Colm Donelane9b5d292020-03-02 21:35:10 +000058 //
59 // LIST
60 //
Finn Williams15db7452019-10-15 14:22:13 +010061
Colm Donelane9b5d292020-03-02 21:35:10 +000062 mockService.SendRequestCounterDir();
63 }
64 if (command == "SET")
65 {
Finn Williamsf7b9d292020-04-22 13:35:35 +010066 // Send a periodic counter selection packet
Colm Donelane9b5d292020-03-02 21:35:10 +000067 // Expected format for the SET command
68 //
69 // SET 500000 1 2 5 10
70 //
71 // This breaks down to:
72 // SET command
73 // 500000 polling period in micro seconds
74 // 1 2 5 10 counter list
Colm Donelana21620d2019-10-11 13:09:49 +010075
Colm Donelane9b5d292020-03-02 21:35:10 +000076 if (tokens.size() > 2) // minimum of 3 tokens.
77 {
78 uint32_t period = static_cast<uint32_t>(std::stoul(tokens[1]));
Colm Donelana21620d2019-10-11 13:09:49 +010079
Colm Donelane9b5d292020-03-02 21:35:10 +000080 std::vector<uint16_t> counters;
Colm Donelana21620d2019-10-11 13:09:49 +010081
Colm Donelane9b5d292020-03-02 21:35:10 +000082 std::transform(tokens.begin() + 2, tokens.end(), std::back_inserter(counters),
83 [](const std::string& str)
84 { return static_cast<uint16_t>(std::stoul(str)); });
Colm Donelana21620d2019-10-11 13:09:49 +010085
Colm Donelane9b5d292020-03-02 21:35:10 +000086 mockService.SendPeriodicCounterSelectionList(period, counters);
87 }
88 else
89 {
90 std::cerr << "Invalid SET command. Format is: SET <polling period> <id list>" << std::endl;
91 }
92 }
93 else if (command == "WAIT")
94 {
Finn Williamsf7b9d292020-04-22 13:35:35 +010095 // Wait for an interval of time in microseconds
96 // Expected format for the WAIT command
Colm Donelane9b5d292020-03-02 21:35:10 +000097 //
98 // WAIT 11000000
99 //
100 // This breaks down to:
101 // WAIT command
Finn Williamsf7b9d292020-04-22 13:35:35 +0100102 // 11000000 timeout period in microseconds
Colm Donelane9b5d292020-03-02 21:35:10 +0000103 if (tokens.size() > 1) // minimum of 2 tokens.
104 {
105 uint32_t timeout = static_cast<uint32_t>(std::stoul(tokens[1]));
106 mockService.WaitCommand(timeout);
107 }
108 else
109 {
110 std::cerr << "Invalid WAIT command. Format is: WAIT <interval>" << std::endl;
111 }
112 }
Colm Donelana21620d2019-10-11 13:09:49 +0100113 }
114 }
115}
116
117} // namespace gatordmock
118
119} // namespace armnn