source: trunk/ETSI-Testsuites/ETSI_auto_IOT/adapter/mm/Adapter.cpp @ 20

Last change on this file since 20 was 20, checked in by rings, 14 years ago
File size: 5.0 KB
Line 
1extern "C"
2{
3        #include "TriChannel.h"
4}
5#ifdef WIN32
6#include <Windows.h>
7#endif
8#include <boost/thread/thread.hpp>
9#include <boost/thread/condition.hpp>
10#include "tri-sa.h"
11#include "tri-pa.h"
12#include "Logger/Logger.h"
13#include <iostream>
14
15static boost::mutex exitMutex;
16static boost::condition exitCondition;
17
18void onConnectionClosed()
19{
20        boost::mutex::scoped_lock localLock(exitMutex);
21        exitCondition.notify_one();
22}
23
24int main(int argc, char **argv)
25{
26        if (argc == 2 && strcmp(argv[1], "-help") == 0)
27        {
28                std::cout << "Usage: Adapter [-a address][-p port_number]" << std::endl;
29                std::cout << "-a address       Specifies MessageMagic IP address. 127.0.0.1 is used by" << std::endl;
30                std::cout << "                 default." << std::endl;
31                std::cout << "-p port_number   Specifies MessageMagic port. 7777 is used by default." << std::endl;
32                std::cout << "-L*              Sets the log level. Log levels can be combined together." << std::endl;
33                std::cout << "                 The following log levels are available:" << std::endl;
34                std::cout << "   -Linfo        Displays information messages" << std::endl;
35                std::cout << "   -Lerr         Displays errors" << std::endl;
36                std::cout << "   -Lwarn        Displays warnings" << std::endl;
37                std::cout << "   -Ldebug       Displays debugging information" << std::endl;
38                std::cout << "   -Lall         Displays all information" << std::endl;
39                std::cout << "   -Lnone        No messages are displayed" << std::endl;
40                return 0;
41        }
42
43        int nLogMode = 0;
44        bool bLogModeSet = false;
45        bool bError = false;
46        Logger::Instance().SetLoggingMode(Logger::LOG_ERRORS);
47        char * pszAddr = "127.0.0.1";
48        int nPort = 7777;
49        for (int i = 1; i < argc; ++i)
50        {
51                bool bLog = false;
52                char * pszArg = argv[i];
53                if (strcmp(pszArg, "-p") == 0)
54                {
55                        if (bError = i + 1 == argc)
56                                std::cout << "Port value missing" << std::endl;
57                        else
58                        {
59                                pszArg = argv[++i];
60                                nPort = atoi(pszArg);
61                        }
62                }
63                else if (strcmp(pszArg, "-a") == 0)
64                {
65                        if (bError = i + 1 == argc)
66                                std::cout << "Address value missing" << std::endl;
67                        else
68                        {
69                                pszArg = argv[++i];
70                                pszAddr = pszArg;
71                        }
72                }
73                else if (bLog = strcmp(pszArg, "-Linfo") == 0)
74                        nLogMode |= Logger::LOG_INFO;
75                else if (bLog = strcmp(pszArg, "-Lerr") == 0)
76                        nLogMode |= Logger::LOG_ERRORS;
77                else if (bLog = strcmp(pszArg, "-Lwarn") == 0)
78                        nLogMode |= Logger::LOG_WARNINGS;
79                else if (bLog = strcmp(pszArg, "-Ldebug") == 0)
80                        nLogMode |= Logger::LOG_DEBUG | Logger::LOG_INFO;
81                else if (bLog = strcmp(pszArg, "-Lall") == 0)
82                        nLogMode = Logger::LOG_ALL;
83                else if (bLog = strcmp(pszArg, "-Lnone") == 0)
84                        nLogMode = Logger::LOG_NOTHING;
85                else
86                {
87                        bError = true;
88                        std::string s = "Unknown command line parameter \"";
89                        s += pszArg;
90                        s += "\"";
91                        std::cout << s << std::endl;
92                }
93                if (bLog)
94                        bLogModeSet = true;
95        }
96        if (bError)
97                return 1;
98        if (!bLogModeSet)
99                nLogMode = Logger::LOG_INFO | Logger::LOG_ERRORS;
100        Logger::Instance().SetLoggingMode(nLogMode);
101        Logger::Instance().LogDebug("Command line parameters processed successfully");
102
103
104#ifdef WIN32
105        // Winsock init
106        WSADATA w;
107        if (WSAStartup(0x0002, &w))
108        {
109                std::cout << "Error initiating Winsock library" << std::endl;
110                return 1;
111        }
112#endif
113        // Map callbacks
114        setTriSAResetCallback (triSAReset);
115        setTriExecuteTestCaseCallback (triExecuteTestCase);
116        setTriMapCallback (triMap);
117        setTriUnmapCallback (triUnmap);
118        setTriEndTestCaseCallback (triEndTestcase);
119        setTriSendCallback (triSend);
120        //setTriSendBCCallback (triSendBC);
121        //setTriSendMCCallback (triSendMC);
122        setTriCallCallback (triCall);
123        //setTriCallBCCallback (triCallBC);
124        //setTriCallMCCallback (triCallMC);
125        setTriReplyCallback (triReply);
126        //setTriReplyBCCallback (triReplyBC);
127        //setTriReplyMCCallback (triReplyMC);
128        setTriRaiseCallback (triRaise);
129        //setTriRaiseBCCallback (triRaiseBC);
130        //setTriRaiseMCCallback (triRaiseMC);
131        //setTriSUTActionInformalCallback (triSUTActionInformal);
132        //setTriPAResetCallback (triPAReset);
133        //setTriStartTimerCallback (triStartTimer);
134        //setTriStopTimerCallback (triStopTimer);
135        //setTriReadTimerCallback (triReadTimer);
136        //setTriTimerRunningCallback (triTimerRunning);
137        //setTriExternalFunctionCallback (triExternalFunction);
138
139        // Callback for monitoring connection termination
140        setOnConnectionClosedCallback(onConnectionClosed);
141
142        int nRes = 0;
143        // Create TCP/IP connection
144        if (openTriChannel(pszAddr, nPort, -1, -1, L"Generic T3devkit Adapter"))
145        {
146                std::cout << "TCP/IP connection with MessageMagic established" << std::endl;
147                // Local lock for monitoring exit condition
148                boost::mutex::scoped_lock exitLock(exitMutex);
149                // Waiting for exit condition
150                exitCondition.wait(exitLock);
151                closeTriChannel();
152                std::cout << "TCP/IP connection with MessageMagic closed" << std::endl;
153        }
154        else
155        {
156                std::cout << "Failed to open TRI channel" << std::endl;
157                nRes = 2;
158        }
159#ifdef WIN32
160        // Winsock cleanup
161        WSACleanup();
162#endif
163        return 2;
164}
165
166
Note: See TracBrowser for help on using the repository browser.