1*c120c564SAndrew Turner /* 2*c120c564SAndrew Turner * \file trc_component.cpp 3*c120c564SAndrew Turner * \brief OpenCSD : 4*c120c564SAndrew Turner * 5*c120c564SAndrew Turner * \copyright Copyright (c) 2015, ARM Limited. All Rights Reserved. 6*c120c564SAndrew Turner */ 7*c120c564SAndrew Turner 8*c120c564SAndrew Turner /* 9*c120c564SAndrew Turner * Redistribution and use in source and binary forms, with or without modification, 10*c120c564SAndrew Turner * are permitted provided that the following conditions are met: 11*c120c564SAndrew Turner * 12*c120c564SAndrew Turner * 1. Redistributions of source code must retain the above copyright notice, 13*c120c564SAndrew Turner * this list of conditions and the following disclaimer. 14*c120c564SAndrew Turner * 15*c120c564SAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright notice, 16*c120c564SAndrew Turner * this list of conditions and the following disclaimer in the documentation 17*c120c564SAndrew Turner * and/or other materials provided with the distribution. 18*c120c564SAndrew Turner * 19*c120c564SAndrew Turner * 3. Neither the name of the copyright holder nor the names of its contributors 20*c120c564SAndrew Turner * may be used to endorse or promote products derived from this software without 21*c120c564SAndrew Turner * specific prior written permission. 22*c120c564SAndrew Turner * 23*c120c564SAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND 24*c120c564SAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25*c120c564SAndrew Turner * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26*c120c564SAndrew Turner * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 27*c120c564SAndrew Turner * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28*c120c564SAndrew Turner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29*c120c564SAndrew Turner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 30*c120c564SAndrew Turner * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31*c120c564SAndrew Turner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 32*c120c564SAndrew Turner * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33*c120c564SAndrew Turner */ 34*c120c564SAndrew Turner 35*c120c564SAndrew Turner #include "common/trc_component.h" 36*c120c564SAndrew Turner 37*c120c564SAndrew Turner class errLogAttachMonitor : public IComponentAttachNotifier 38*c120c564SAndrew Turner { 39*c120c564SAndrew Turner public: 40*c120c564SAndrew Turner errLogAttachMonitor() 41*c120c564SAndrew Turner { 42*c120c564SAndrew Turner m_pComp = 0; 43*c120c564SAndrew Turner }; 44*c120c564SAndrew Turner virtual ~ errLogAttachMonitor() {}; 45*c120c564SAndrew Turner virtual void attachNotify(const int num_attached) 46*c120c564SAndrew Turner { 47*c120c564SAndrew Turner if(m_pComp) 48*c120c564SAndrew Turner m_pComp->do_attach_notify(num_attached); 49*c120c564SAndrew Turner } 50*c120c564SAndrew Turner void Init(TraceComponent *pComp) 51*c120c564SAndrew Turner { 52*c120c564SAndrew Turner m_pComp = pComp; 53*c120c564SAndrew Turner if(m_pComp) 54*c120c564SAndrew Turner m_pComp->getErrorLogAttachPt()->set_notifier(this); 55*c120c564SAndrew Turner } 56*c120c564SAndrew Turner private: 57*c120c564SAndrew Turner TraceComponent *m_pComp; 58*c120c564SAndrew Turner }; 59*c120c564SAndrew Turner 60*c120c564SAndrew Turner TraceComponent::TraceComponent(const std::string &name) 61*c120c564SAndrew Turner { 62*c120c564SAndrew Turner Init(name); 63*c120c564SAndrew Turner } 64*c120c564SAndrew Turner 65*c120c564SAndrew Turner TraceComponent::TraceComponent(const std::string &name, int instIDNum) 66*c120c564SAndrew Turner { 67*c120c564SAndrew Turner std::string name_combined = name; 68*c120c564SAndrew Turner char num_buffer[32]; 69*c120c564SAndrew Turner sprintf(num_buffer,"_%04d",instIDNum); 70*c120c564SAndrew Turner name_combined += (std::string)num_buffer; 71*c120c564SAndrew Turner Init(name_combined); 72*c120c564SAndrew Turner } 73*c120c564SAndrew Turner 74*c120c564SAndrew Turner TraceComponent::~TraceComponent() 75*c120c564SAndrew Turner { 76*c120c564SAndrew Turner } 77*c120c564SAndrew Turner 78*c120c564SAndrew Turner void TraceComponent::Init(const std::string &name) 79*c120c564SAndrew Turner { 80*c120c564SAndrew Turner m_errLogHandle = OCSD_INVALID_HANDLE; 81*c120c564SAndrew Turner m_errVerbosity = OCSD_ERR_SEV_NONE; 82*c120c564SAndrew Turner m_name = name; 83*c120c564SAndrew Turner 84*c120c564SAndrew Turner m_supported_op_flags = 0; 85*c120c564SAndrew Turner m_op_flags = 0; 86*c120c564SAndrew Turner m_assocComp = 0; 87*c120c564SAndrew Turner 88*c120c564SAndrew Turner m_pErrAttachMon = new (std::nothrow) errLogAttachMonitor(); 89*c120c564SAndrew Turner if(m_pErrAttachMon) 90*c120c564SAndrew Turner m_pErrAttachMon->Init(this); 91*c120c564SAndrew Turner } 92*c120c564SAndrew Turner 93*c120c564SAndrew Turner void TraceComponent::LogError(const ocsdError &Error) 94*c120c564SAndrew Turner { 95*c120c564SAndrew Turner if((m_errLogHandle != OCSD_INVALID_HANDLE) && 96*c120c564SAndrew Turner isLoggingErrorLevel(Error.getErrorSeverity())) 97*c120c564SAndrew Turner { 98*c120c564SAndrew Turner // ensure we have not disabled the attachPt 99*c120c564SAndrew Turner if(m_error_logger.first()) 100*c120c564SAndrew Turner m_error_logger.first()->LogError(m_errLogHandle,&Error); 101*c120c564SAndrew Turner } 102*c120c564SAndrew Turner } 103*c120c564SAndrew Turner 104*c120c564SAndrew Turner void TraceComponent::LogMessage(const ocsd_err_severity_t filter_level, const std::string &msg) 105*c120c564SAndrew Turner { 106*c120c564SAndrew Turner if ((m_errLogHandle != OCSD_INVALID_HANDLE) && 107*c120c564SAndrew Turner isLoggingErrorLevel(filter_level)) 108*c120c564SAndrew Turner { 109*c120c564SAndrew Turner // ensure we have not disabled the attachPt 110*c120c564SAndrew Turner if (m_error_logger.first()) 111*c120c564SAndrew Turner m_error_logger.first()->LogMessage(this->m_errLogHandle, filter_level, msg); 112*c120c564SAndrew Turner } 113*c120c564SAndrew Turner 114*c120c564SAndrew Turner } 115*c120c564SAndrew Turner 116*c120c564SAndrew Turner void TraceComponent::do_attach_notify(const int num_attached) 117*c120c564SAndrew Turner { 118*c120c564SAndrew Turner if(num_attached) 119*c120c564SAndrew Turner { 120*c120c564SAndrew Turner // ensure we have not disabled the attachPt 121*c120c564SAndrew Turner if(m_error_logger.first()) 122*c120c564SAndrew Turner { 123*c120c564SAndrew Turner m_errLogHandle = m_error_logger.first()->RegisterErrorSource(m_name); 124*c120c564SAndrew Turner m_errVerbosity = m_error_logger.first()->GetErrorLogVerbosity(); 125*c120c564SAndrew Turner } 126*c120c564SAndrew Turner } 127*c120c564SAndrew Turner else 128*c120c564SAndrew Turner { 129*c120c564SAndrew Turner m_errLogHandle = OCSD_INVALID_HANDLE; 130*c120c564SAndrew Turner } 131*c120c564SAndrew Turner } 132*c120c564SAndrew Turner 133*c120c564SAndrew Turner void TraceComponent::updateErrorLogLevel() 134*c120c564SAndrew Turner { 135*c120c564SAndrew Turner if(m_error_logger.first()) 136*c120c564SAndrew Turner { 137*c120c564SAndrew Turner m_errVerbosity = m_error_logger.first()->GetErrorLogVerbosity(); 138*c120c564SAndrew Turner } 139*c120c564SAndrew Turner } 140*c120c564SAndrew Turner 141*c120c564SAndrew Turner ocsd_err_t TraceComponent::setComponentOpMode(uint32_t op_flags) 142*c120c564SAndrew Turner { 143*c120c564SAndrew Turner if( (~m_supported_op_flags & op_flags) != 0) 144*c120c564SAndrew Turner return OCSD_ERR_INVALID_PARAM_VAL; 145*c120c564SAndrew Turner m_op_flags = op_flags; 146*c120c564SAndrew Turner return OCSD_OK; 147*c120c564SAndrew Turner } 148*c120c564SAndrew Turner 149*c120c564SAndrew Turner /* End of File trc_component.cpp */ 150