blob: 24234934914b1c6c59371eebafdd624cea82efb8 [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
Colm Donelanb682d842019-10-16 12:24:20 +01006#include "../../../src/profiling/PacketVersionResolver.hpp"
7#include "../../../src/profiling/PeriodicCounterSelectionCommandHandler.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +01008#include "CommandFileParser.hpp"
9#include "CommandLineProcessor.hpp"
10#include "GatordMockService.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +010011#include "PeriodicCounterCaptureCommandHandler.hpp"
Colm Donelanb682d842019-10-16 12:24:20 +010012#include "PeriodicCounterSelectionResponseHandler.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +010013
Colm Donelanb682d842019-10-16 12:24:20 +010014#include <iostream>
Colm Donelana21620d2019-10-11 13:09:49 +010015#include <string>
16
Colm Donelanb682d842019-10-16 12:24:20 +010017int main(int argc, char* argv[])
Colm Donelana21620d2019-10-11 13:09:49 +010018{
19 // Process command line arguments
20 armnn::gatordmock::CommandLineProcessor cmdLine;
21 if (!cmdLine.ProcessCommandLine(argc, argv))
22 {
23 return EXIT_FAILURE;
24 }
25
Colm Donelanb682d842019-10-16 12:24:20 +010026 armnn::profiling::PacketVersionResolver packetVersionResolver;
Colm Donelana21620d2019-10-11 13:09:49 +010027 // Create the Command Handler Registry
28 armnn::profiling::CommandHandlerRegistry registry;
29
Colm Donelanb682d842019-10-16 12:24:20 +010030 // This functor will receive back the selection response packet.
31 armnn::gatordmock::PeriodicCounterSelectionResponseHandler periodicCounterSelectionResponseHandler(
Jim Flynn397043f2019-10-17 17:37:10 +010032 0, 4, packetVersionResolver.ResolvePacketVersion(4).GetEncodedValue());
Colm Donelanb682d842019-10-16 12:24:20 +010033 // This functor will receive the counter data.
34 armnn::gatordmock::PeriodicCounterCaptureCommandHandler counterCaptureCommandHandler(
Jim Flynn397043f2019-10-17 17:37:10 +010035 1, 0, packetVersionResolver.ResolvePacketVersion(0).GetEncodedValue());
Colm Donelana21620d2019-10-11 13:09:49 +010036
37 // Register different derived functors
Colm Donelanb682d842019-10-16 12:24:20 +010038 registry.RegisterFunctor(&periodicCounterSelectionResponseHandler);
Colm Donelana21620d2019-10-11 13:09:49 +010039 registry.RegisterFunctor(&counterCaptureCommandHandler);
40
41 armnn::gatordmock::GatordMockService mockService(registry, cmdLine.IsEchoEnabled());
42
43 if (!mockService.OpenListeningSocket(cmdLine.GetUdsNamespace()))
44 {
45 return EXIT_FAILURE;
46 }
Colm Donelanb682d842019-10-16 12:24:20 +010047 std::cout << "Bound to UDS namespace: \\0" << cmdLine.GetUdsNamespace() << std::endl;
Colm Donelana21620d2019-10-11 13:09:49 +010048
49 // Wait for a single connection.
50 if (-1 == mockService.BlockForOneClient())
51 {
52 return EXIT_FAILURE;
53 }
Colm Donelanb682d842019-10-16 12:24:20 +010054 std::cout << "Client connection established." << std::endl;
Colm Donelana21620d2019-10-11 13:09:49 +010055
56 // Send receive the strweam metadata and send connection ack.
57 if (!mockService.WaitForStreamMetaData())
58 {
59 return EXIT_FAILURE;
60 }
61 mockService.SendConnectionAck();
62
63 // Prepare to receive data.
64 mockService.LaunchReceivingThread();
65
66 // Process the SET and WAIT command from the file.
67 armnn::gatordmock::CommandFileParser commandLineParser;
68 commandLineParser.ParseFile(cmdLine.GetCommandFile(), mockService);
69
70 // Once we've finished processing the file wait for the receiving thread to close.
71 mockService.WaitForReceivingThread();
72
73 return EXIT_SUCCESS;
74}