1 // 2 // Copyright © 2019 Arm Ltd and Contributors. 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 13 namespace armnn 14 { 15 16 namespace gatordmock 17 { 18 ParseFile(std::string CommandFile,GatordMockService & mockService)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 26 while (mockService.ReceiveThreadRunning() && std::getline(infile, line)) 27 { 28 std::istringstream iss(line); 29 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)); 33 if (tokens.size() > 0) 34 { 35 std::string command = tokens[0]; 36 if (command == "DISABLE") 37 { 38 // 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 58 // 59 // LIST 60 // 61 62 mockService.SendRequestCounterDir(); 63 } 64 if (command == "SET") 65 { 66 // Send a periodic counter selection packet 67 // 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 75 76 if (tokens.size() > 2) // minimum of 3 tokens. 77 { 78 uint32_t period = static_cast<uint32_t>(std::stoul(tokens[1])); 79 80 std::vector<uint16_t> counters; 81 82 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)); }); 85 86 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 { 95 // Wait for an interval of time in microseconds 96 // Expected format for the WAIT command 97 // 98 // WAIT 11000000 99 // 100 // This breaks down to: 101 // WAIT command 102 // 11000000 timeout period in microseconds 103 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 } 113 } 114 } 115 } 116 117 } // namespace gatordmock 118 119 } // namespace armnn 120