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