Wojciech Rynczuk / Mbed 2 deprecated vcdMaker_Demo

Dependencies:   mbed vcdLogger vcdSignal

Committer:
ketjow
Date:
Sat Feb 20 20:48:44 2016 +0000
Revision:
1:446154224f92
Parent:
0:9a59cffaafad
vcdMaker Demo release 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ketjow 1:446154224f92 1 /*!
ketjow 1:446154224f92 2 @file logger.cpp
ketjow 1:446154224f92 3
ketjow 1:446154224f92 4 The implementation of the logger base class.
ketjow 1:446154224f92 5
ketjow 1:446154224f92 6 @par Full Description
ketjow 1:446154224f92 7 The implementation of the logger base class.
ketjow 1:446154224f92 8
ketjow 1:446154224f92 9 @if REVISION_HISTORY_INCLUDED
ketjow 1:446154224f92 10 @par Edit History
ketjow 1:446154224f92 11 @li [0] wojciech.rynczuk@wp.pl 20-JAN-2015 Initial file revision.
ketjow 1:446154224f92 12 @endif
ketjow 1:446154224f92 13
ketjow 1:446154224f92 14 @ingroup Logger
ketjow 1:446154224f92 15
ketjow 1:446154224f92 16 @par Copyright (c) MMXV Wojciech Rynczuk
ketjow 1:446154224f92 17
ketjow 1:446154224f92 18 Distributed under MIT License
ketjow 1:446154224f92 19
ketjow 1:446154224f92 20 */
ketjow 1:446154224f92 21
ketjow 0:9a59cffaafad 22 #include "logger.hpp"
ketjow 0:9a59cffaafad 23
ketjow 0:9a59cffaafad 24 #include <new>
ketjow 0:9a59cffaafad 25 #include <cstring>
ketjow 0:9a59cffaafad 26
ketjow 0:9a59cffaafad 27 Logger::Logger(uint32_t nLines, uint32_t nCharacters) : m_Lines(nLines), m_Characters(nCharacters)
ketjow 0:9a59cffaafad 28 {
ketjow 0:9a59cffaafad 29 m_ReadMarker = 0;
ketjow 0:9a59cffaafad 30 m_WriteMarker = 0;
ketjow 0:9a59cffaafad 31 m_isRecording = false;
ketjow 0:9a59cffaafad 32 m_pLogData = new(std::nothrow) char [sizeof(char) * m_Lines * m_Characters];
ketjow 0:9a59cffaafad 33 m_Timer.start();
ketjow 0:9a59cffaafad 34 }
ketjow 0:9a59cffaafad 35
ketjow 0:9a59cffaafad 36 Logger::~Logger()
ketjow 0:9a59cffaafad 37 {
ketjow 0:9a59cffaafad 38 delete m_pLogData;
ketjow 0:9a59cffaafad 39 }
ketjow 0:9a59cffaafad 40
ketjow 0:9a59cffaafad 41 uint32_t Logger::Log(const char* line)
ketjow 0:9a59cffaafad 42 {
ketjow 0:9a59cffaafad 43 int32_t was_masked;
ketjow 0:9a59cffaafad 44
ketjow 0:9a59cffaafad 45 if (m_pLogData != NULL)
ketjow 0:9a59cffaafad 46 {
ketjow 0:9a59cffaafad 47 if (true == m_isRecording)
ketjow 0:9a59cffaafad 48 {
ketjow 0:9a59cffaafad 49 //Disable interrupts
ketjow 0:9a59cffaafad 50 was_masked = __disable_irq();
ketjow 0:9a59cffaafad 51
ketjow 0:9a59cffaafad 52 if ((m_ReadMarker == (m_WriteMarker + 1)) || \
ketjow 0:9a59cffaafad 53 ((m_WriteMarker == (m_Lines - 1)) && (m_ReadMarker == 0)))
ketjow 0:9a59cffaafad 54 {
ketjow 0:9a59cffaafad 55 AlarmFull();
ketjow 0:9a59cffaafad 56 }
ketjow 0:9a59cffaafad 57 else
ketjow 0:9a59cffaafad 58 {
ketjow 0:9a59cffaafad 59 (void)std::strncpy(m_pLogData + (m_WriteMarker * m_Characters), line, m_Characters);
ketjow 0:9a59cffaafad 60 m_WriteMarker++;
ketjow 0:9a59cffaafad 61 if (m_WriteMarker == m_Lines)
ketjow 0:9a59cffaafad 62 {
ketjow 0:9a59cffaafad 63 m_WriteMarker = 0;
ketjow 0:9a59cffaafad 64 }
ketjow 0:9a59cffaafad 65 }
ketjow 0:9a59cffaafad 66
ketjow 0:9a59cffaafad 67 //Enable interrupts (or not)
ketjow 0:9a59cffaafad 68 if (!was_masked)
ketjow 0:9a59cffaafad 69 {
ketjow 0:9a59cffaafad 70 __enable_irq();
ketjow 0:9a59cffaafad 71 }
ketjow 0:9a59cffaafad 72 }
ketjow 0:9a59cffaafad 73 }
ketjow 0:9a59cffaafad 74 else
ketjow 0:9a59cffaafad 75 {
ketjow 0:9a59cffaafad 76 Printf("Not enough memory for logging.\n");
ketjow 0:9a59cffaafad 77 }
ketjow 0:9a59cffaafad 78 return 0;
ketjow 0:9a59cffaafad 79 }
ketjow 0:9a59cffaafad 80
ketjow 0:9a59cffaafad 81 uint32_t Logger::Print()
ketjow 0:9a59cffaafad 82 {
ketjow 0:9a59cffaafad 83 uint32_t counter = 0;
ketjow 0:9a59cffaafad 84 if (m_pLogData != NULL)
ketjow 0:9a59cffaafad 85 {
ketjow 0:9a59cffaafad 86 while(m_ReadMarker != m_WriteMarker)
ketjow 0:9a59cffaafad 87 {
ketjow 0:9a59cffaafad 88 Printf(m_pLogData + (m_ReadMarker++ * m_Characters));
ketjow 0:9a59cffaafad 89 if (m_ReadMarker == m_Lines)
ketjow 0:9a59cffaafad 90 {
ketjow 0:9a59cffaafad 91 m_ReadMarker = 0;
ketjow 0:9a59cffaafad 92 }
ketjow 0:9a59cffaafad 93 counter++;
ketjow 0:9a59cffaafad 94 }
ketjow 0:9a59cffaafad 95 }
ketjow 0:9a59cffaafad 96 return counter;
ketjow 0:9a59cffaafad 97 }
ketjow 0:9a59cffaafad 98
ketjow 0:9a59cffaafad 99 int32_t Logger::GetTime()
ketjow 0:9a59cffaafad 100 {
ketjow 0:9a59cffaafad 101 return m_Timer.read_us();
ketjow 0:9a59cffaafad 102 }
ketjow 0:9a59cffaafad 103
ketjow 0:9a59cffaafad 104 void Logger::StartRecording()
ketjow 0:9a59cffaafad 105 {
ketjow 0:9a59cffaafad 106 if (0 == StartAction())
ketjow 0:9a59cffaafad 107 {
ketjow 0:9a59cffaafad 108 m_isRecording = true;
ketjow 0:9a59cffaafad 109 }
ketjow 0:9a59cffaafad 110 }
ketjow 0:9a59cffaafad 111
ketjow 0:9a59cffaafad 112 void Logger::StopRecording()
ketjow 0:9a59cffaafad 113 {
ketjow 0:9a59cffaafad 114 m_isRecording = false;
ketjow 0:9a59cffaafad 115 StopAction();
ketjow 0:9a59cffaafad 116 }
ketjow 0:9a59cffaafad 117
ketjow 0:9a59cffaafad 118 bool Logger::IsRecording()
ketjow 0:9a59cffaafad 119 {
ketjow 0:9a59cffaafad 120 return m_isRecording;
ketjow 0:9a59cffaafad 121 }