1 /* 2 * \file gen_elem_printer.h 3 * \brief OpenCSD : Generic element printer class. 4 * 5 * \copyright Copyright (c) 2015, ARM Limited. All Rights Reserved. 6 */ 7 8 /* 9 * Redistribution and use in source and binary forms, with or without modification, 10 * are permitted provided that the following conditions are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 19 * 3. Neither the name of the copyright holder nor the names of its contributors 20 * may be used to endorse or promote products derived from this software without 21 * specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 30 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 */ 34 #ifndef ARM_GEN_ELEM_PRINTER_H_INCLUDED 35 #define ARM_GEN_ELEM_PRINTER_H_INCLUDED 36 37 #include "opencsd.h" 38 39 class TrcGenericElementPrinter : public ItemPrinter, public ITrcGenElemIn 40 { 41 public: 42 TrcGenericElementPrinter(); 43 virtual ~TrcGenericElementPrinter() {}; 44 45 virtual ocsd_datapath_resp_t TraceElemIn(const ocsd_trc_index_t index_sop, 46 const uint8_t trc_chan_id, 47 const OcsdTraceElement &elem); 48 49 // funtionality to test wait / flush mechanism 50 void ackWait() { m_needWaitAck = false; }; 51 const bool needAckWait() const { return m_needWaitAck; }; 52 53 protected: 54 bool m_needWaitAck; 55 }; 56 57 58 inline TrcGenericElementPrinter::TrcGenericElementPrinter() : 59 m_needWaitAck(false) 60 { 61 } 62 63 inline ocsd_datapath_resp_t TrcGenericElementPrinter::TraceElemIn(const ocsd_trc_index_t index_sop, 64 const uint8_t trc_chan_id, 65 const OcsdTraceElement &elem) 66 { 67 ocsd_datapath_resp_t resp = OCSD_RESP_CONT; 68 std::string elemStr; 69 std::ostringstream oss; 70 oss << "Idx:" << index_sop << "; ID:"<< std::hex << (uint32_t)trc_chan_id << "; "; 71 elem.toString(elemStr); 72 oss << elemStr << std::endl; 73 itemPrintLine(oss.str()); 74 75 // funtionality to test wait / flush mechanism 76 if(m_needWaitAck) 77 { 78 oss.str(""); 79 oss << "WARNING: Generic Element Printer; New element without previous _WAIT acknowledged\n"; 80 itemPrintLine(oss.str()); 81 m_needWaitAck = false; 82 } 83 84 if(getTestWaits()) 85 { 86 resp = OCSD_RESP_WAIT; // return _WAIT for the 1st N packets. 87 decTestWaits(); 88 m_needWaitAck = true; 89 } 90 return resp; 91 } 92 93 #endif // ARM_GEN_ELEM_PRINTER_H_INCLUDED 94 95 /* End of File gen_elem_printer.h */ 96