1 /* 2 * \file trc_component.cpp 3 * \brief OpenCSD : 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 35 #include "common/trc_component.h" 36 37 class errLogAttachMonitor : public IComponentAttachNotifier 38 { 39 public: 40 errLogAttachMonitor() 41 { 42 m_pComp = 0; 43 }; 44 virtual ~ errLogAttachMonitor() 45 { 46 if (m_pComp) 47 m_pComp->getErrorLogAttachPt()->set_notifier(0); 48 m_pComp = 0; 49 50 }; 51 virtual void attachNotify(const int num_attached) 52 { 53 if(m_pComp) 54 m_pComp->do_attach_notify(num_attached); 55 } 56 void Init(TraceComponent *pComp) 57 { 58 m_pComp = pComp; 59 if(m_pComp) 60 m_pComp->getErrorLogAttachPt()->set_notifier(this); 61 } 62 private: 63 TraceComponent *m_pComp; 64 }; 65 66 TraceComponent::TraceComponent(const std::string &name) 67 { 68 Init(name); 69 } 70 71 TraceComponent::TraceComponent(const std::string &name, int instIDNum) 72 { 73 std::string name_combined = name; 74 char num_buffer[32]; 75 sprintf(num_buffer,"_%04d",instIDNum); 76 name_combined += (std::string)num_buffer; 77 Init(name_combined); 78 } 79 80 TraceComponent::~TraceComponent() 81 { 82 if (m_pErrAttachMon) 83 delete m_pErrAttachMon; 84 } 85 86 void TraceComponent::Init(const std::string &name) 87 { 88 m_errLogHandle = OCSD_INVALID_HANDLE; 89 m_errVerbosity = OCSD_ERR_SEV_NONE; 90 m_name = name; 91 92 m_supported_op_flags = 0; 93 m_op_flags = 0; 94 m_assocComp = 0; 95 96 m_pErrAttachMon = new (std::nothrow) errLogAttachMonitor(); 97 if(m_pErrAttachMon) 98 m_pErrAttachMon->Init(this); 99 } 100 101 void TraceComponent::LogError(const ocsdError &Error) 102 { 103 if((m_errLogHandle != OCSD_INVALID_HANDLE) && 104 isLoggingErrorLevel(Error.getErrorSeverity())) 105 { 106 // ensure we have not disabled the attachPt 107 if(m_error_logger.first()) 108 m_error_logger.first()->LogError(m_errLogHandle,&Error); 109 } 110 } 111 112 void TraceComponent::LogMessage(const ocsd_err_severity_t filter_level, const std::string &msg) 113 { 114 if ((m_errLogHandle != OCSD_INVALID_HANDLE) && 115 isLoggingErrorLevel(filter_level)) 116 { 117 // ensure we have not disabled the attachPt 118 if (m_error_logger.first()) 119 m_error_logger.first()->LogMessage(this->m_errLogHandle, filter_level, msg); 120 } 121 122 } 123 124 void TraceComponent::do_attach_notify(const int num_attached) 125 { 126 if(num_attached) 127 { 128 // ensure we have not disabled the attachPt 129 if(m_error_logger.first()) 130 { 131 m_errLogHandle = m_error_logger.first()->RegisterErrorSource(m_name); 132 m_errVerbosity = m_error_logger.first()->GetErrorLogVerbosity(); 133 } 134 } 135 else 136 { 137 m_errLogHandle = OCSD_INVALID_HANDLE; 138 } 139 } 140 141 void TraceComponent::updateErrorLogLevel() 142 { 143 if(m_error_logger.first()) 144 { 145 m_errVerbosity = m_error_logger.first()->GetErrorLogVerbosity(); 146 } 147 } 148 149 ocsd_err_t TraceComponent::setComponentOpMode(uint32_t op_flags) 150 { 151 m_op_flags = op_flags & m_supported_op_flags; 152 return OCSD_OK; 153 } 154 155 /* End of File trc_component.cpp */ 156