1*c120c564SAndrew Turner /*
2*c120c564SAndrew Turner * \file       trc_print_fact.cpp
3*c120c564SAndrew Turner * \brief      OpenCSD : Trace Packet printer factory.
4*c120c564SAndrew Turner *
5*c120c564SAndrew Turner * \copyright  Copyright (c) 2017, ARM Limited. All Rights Reserved.
6*c120c564SAndrew Turner */
7*c120c564SAndrew Turner 
8*c120c564SAndrew Turner 
9*c120c564SAndrew Turner /*
10*c120c564SAndrew Turner * Redistribution and use in source and binary forms, with or without modification,
11*c120c564SAndrew Turner * are permitted provided that the following conditions are met:
12*c120c564SAndrew Turner *
13*c120c564SAndrew Turner * 1. Redistributions of source code must retain the above copyright notice,
14*c120c564SAndrew Turner * this list of conditions and the following disclaimer.
15*c120c564SAndrew Turner *
16*c120c564SAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright notice,
17*c120c564SAndrew Turner * this list of conditions and the following disclaimer in the documentation
18*c120c564SAndrew Turner * and/or other materials provided with the distribution.
19*c120c564SAndrew Turner *
20*c120c564SAndrew Turner * 3. Neither the name of the copyright holder nor the names of its contributors
21*c120c564SAndrew Turner * may be used to endorse or promote products derived from this software without
22*c120c564SAndrew Turner * specific prior written permission.
23*c120c564SAndrew Turner *
24*c120c564SAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
25*c120c564SAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26*c120c564SAndrew Turner * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27*c120c564SAndrew Turner * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
28*c120c564SAndrew Turner * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29*c120c564SAndrew Turner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30*c120c564SAndrew Turner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31*c120c564SAndrew Turner * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32*c120c564SAndrew Turner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33*c120c564SAndrew Turner * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*c120c564SAndrew Turner */
35*c120c564SAndrew Turner 
36*c120c564SAndrew Turner #include "pkt_printers/trc_print_fact.h"
37*c120c564SAndrew Turner 
createRawFramePrinter(std::vector<ItemPrinter * > & printer_list,ocsdMsgLogger * pMsgLogger)38*c120c564SAndrew Turner RawFramePrinter * PktPrinterFact::createRawFramePrinter(std::vector<ItemPrinter *> &printer_list, ocsdMsgLogger *pMsgLogger /*= 0*/)
39*c120c564SAndrew Turner {
40*c120c564SAndrew Turner     RawFramePrinter *pPrinter = 0;
41*c120c564SAndrew Turner     pPrinter = new (std::nothrow)RawFramePrinter();
42*c120c564SAndrew Turner     SavePrinter(printer_list, pPrinter, pMsgLogger);
43*c120c564SAndrew Turner     return pPrinter;
44*c120c564SAndrew Turner }
45*c120c564SAndrew Turner 
createGenElemPrinter(std::vector<ItemPrinter * > & printer_list,ocsdMsgLogger * pMsgLogger)46*c120c564SAndrew Turner TrcGenericElementPrinter *PktPrinterFact::createGenElemPrinter(std::vector<ItemPrinter *> &printer_list, ocsdMsgLogger *pMsgLogger /*= 0*/)
47*c120c564SAndrew Turner {
48*c120c564SAndrew Turner     TrcGenericElementPrinter *pPrinter = 0;
49*c120c564SAndrew Turner     pPrinter = new (std::nothrow)TrcGenericElementPrinter();
50*c120c564SAndrew Turner     SavePrinter(printer_list, pPrinter, pMsgLogger);
51*c120c564SAndrew Turner     return pPrinter;
52*c120c564SAndrew Turner }
53*c120c564SAndrew Turner 
createProtocolPrinter(std::vector<ItemPrinter * > & printer_list,ocsd_trace_protocol_t protocol,uint8_t CSID,ocsdMsgLogger * pMsgLogger)54*c120c564SAndrew Turner ItemPrinter *PktPrinterFact::createProtocolPrinter(std::vector<ItemPrinter *> &printer_list, ocsd_trace_protocol_t protocol, uint8_t CSID, ocsdMsgLogger *pMsgLogger /*= 0*/)
55*c120c564SAndrew Turner {
56*c120c564SAndrew Turner     ItemPrinter *pPrinter = 0;
57*c120c564SAndrew Turner     switch (protocol)
58*c120c564SAndrew Turner     {
59*c120c564SAndrew Turner     case OCSD_PROTOCOL_ETMV4I:
60*c120c564SAndrew Turner         pPrinter = new (std::nothrow) PacketPrinter<EtmV4ITrcPacket>(CSID);
61*c120c564SAndrew Turner         break;
62*c120c564SAndrew Turner     case OCSD_PROTOCOL_ETMV3:
63*c120c564SAndrew Turner         pPrinter = new (std::nothrow) PacketPrinter<EtmV3TrcPacket>(CSID);
64*c120c564SAndrew Turner         break;
65*c120c564SAndrew Turner     case OCSD_PROTOCOL_PTM:
66*c120c564SAndrew Turner         pPrinter = new (std::nothrow) PacketPrinter<PtmTrcPacket>(CSID);
67*c120c564SAndrew Turner         break;
68*c120c564SAndrew Turner     case OCSD_PROTOCOL_STM:
69*c120c564SAndrew Turner         pPrinter = new (std::nothrow) PacketPrinter<StmTrcPacket>(CSID);
70*c120c564SAndrew Turner         break;
71*c120c564SAndrew Turner     default:
72*c120c564SAndrew Turner         break;
73*c120c564SAndrew Turner     }
74*c120c564SAndrew Turner     SavePrinter(printer_list, pPrinter, pMsgLogger);
75*c120c564SAndrew Turner     return pPrinter;
76*c120c564SAndrew Turner }
77*c120c564SAndrew Turner 
numPrinters(std::vector<ItemPrinter * > & printer_list)78*c120c564SAndrew Turner const int PktPrinterFact::numPrinters(std::vector<ItemPrinter *> &printer_list)
79*c120c564SAndrew Turner {
80*c120c564SAndrew Turner     return printer_list.size();
81*c120c564SAndrew Turner }
82*c120c564SAndrew Turner 
SavePrinter(std::vector<ItemPrinter * > & printer_list,ItemPrinter * pPrinter,ocsdMsgLogger * pMsgLogger)83*c120c564SAndrew Turner void PktPrinterFact::SavePrinter(std::vector<ItemPrinter *> &printer_list, ItemPrinter *pPrinter, ocsdMsgLogger *pMsgLogger)
84*c120c564SAndrew Turner {
85*c120c564SAndrew Turner     if (pPrinter)
86*c120c564SAndrew Turner     {
87*c120c564SAndrew Turner         pPrinter->setMessageLogger(pMsgLogger);
88*c120c564SAndrew Turner         printer_list.push_back((ItemPrinter *)pPrinter);
89*c120c564SAndrew Turner     }
90*c120c564SAndrew Turner }
91*c120c564SAndrew Turner 
destroyAllPrinters(std::vector<ItemPrinter * > & printer_list)92*c120c564SAndrew Turner void PktPrinterFact::destroyAllPrinters(std::vector<ItemPrinter *> &printer_list)
93*c120c564SAndrew Turner {
94*c120c564SAndrew Turner     std::vector<ItemPrinter *>::iterator it;
95*c120c564SAndrew Turner     it = printer_list.begin();
96*c120c564SAndrew Turner     while (it != printer_list.end())
97*c120c564SAndrew Turner     {
98*c120c564SAndrew Turner         delete *it;
99*c120c564SAndrew Turner         it++;
100*c120c564SAndrew Turner     }
101*c120c564SAndrew Turner     printer_list.clear();
102*c120c564SAndrew Turner }
103*c120c564SAndrew Turner 
destroyPrinter(std::vector<ItemPrinter * > & printer_list,ItemPrinter * pPrinter)104*c120c564SAndrew Turner void PktPrinterFact::destroyPrinter(std::vector<ItemPrinter *> &printer_list, ItemPrinter *pPrinter)
105*c120c564SAndrew Turner {
106*c120c564SAndrew Turner     std::vector<ItemPrinter *>::iterator it;
107*c120c564SAndrew Turner     it = printer_list.begin();
108*c120c564SAndrew Turner     while (it != printer_list.end())
109*c120c564SAndrew Turner     {
110*c120c564SAndrew Turner         if (*it == pPrinter)
111*c120c564SAndrew Turner         {
112*c120c564SAndrew Turner             printer_list.erase(it);
113*c120c564SAndrew Turner             delete pPrinter;
114*c120c564SAndrew Turner             return;
115*c120c564SAndrew Turner         }
116*c120c564SAndrew Turner         else
117*c120c564SAndrew Turner             it++;
118*c120c564SAndrew Turner     }
119*c120c564SAndrew Turner }
120*c120c564SAndrew Turner 
121*c120c564SAndrew Turner 
122*c120c564SAndrew Turner 
123*c120c564SAndrew Turner /* end of file  trc_print_fact.cpp */
124