Wojciech Rynczuk / Mbed 2 deprecated vcdMaker_Demo

Dependencies:   mbed vcdLogger vcdSignal

Committer:
ketjow
Date:
Fri Feb 12 21:38:04 2016 +0000
Revision:
0:9a59cffaafad
Child:
1:446154224f92
vcdMaker demo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ketjow 0:9a59cffaafad 1 #include "logger.hpp"
ketjow 0:9a59cffaafad 2
ketjow 0:9a59cffaafad 3 #include <new>
ketjow 0:9a59cffaafad 4 #include <cstring>
ketjow 0:9a59cffaafad 5
ketjow 0:9a59cffaafad 6 Logger::Logger(uint32_t nLines, uint32_t nCharacters) : m_Lines(nLines), m_Characters(nCharacters)
ketjow 0:9a59cffaafad 7 {
ketjow 0:9a59cffaafad 8 m_ReadMarker = 0;
ketjow 0:9a59cffaafad 9 m_WriteMarker = 0;
ketjow 0:9a59cffaafad 10 m_isRecording = false;
ketjow 0:9a59cffaafad 11 m_pLogData = new(std::nothrow) char [sizeof(char) * m_Lines * m_Characters];
ketjow 0:9a59cffaafad 12 m_Timer.start();
ketjow 0:9a59cffaafad 13 }
ketjow 0:9a59cffaafad 14
ketjow 0:9a59cffaafad 15 Logger::~Logger()
ketjow 0:9a59cffaafad 16 {
ketjow 0:9a59cffaafad 17 delete m_pLogData;
ketjow 0:9a59cffaafad 18 }
ketjow 0:9a59cffaafad 19
ketjow 0:9a59cffaafad 20 uint32_t Logger::Log(const char* line)
ketjow 0:9a59cffaafad 21 {
ketjow 0:9a59cffaafad 22 int32_t was_masked;
ketjow 0:9a59cffaafad 23
ketjow 0:9a59cffaafad 24 if (m_pLogData != NULL)
ketjow 0:9a59cffaafad 25 {
ketjow 0:9a59cffaafad 26 if (true == m_isRecording)
ketjow 0:9a59cffaafad 27 {
ketjow 0:9a59cffaafad 28 //Disable interrupts
ketjow 0:9a59cffaafad 29 was_masked = __disable_irq();
ketjow 0:9a59cffaafad 30
ketjow 0:9a59cffaafad 31 if ((m_ReadMarker == (m_WriteMarker + 1)) || \
ketjow 0:9a59cffaafad 32 ((m_WriteMarker == (m_Lines - 1)) && (m_ReadMarker == 0)))
ketjow 0:9a59cffaafad 33 {
ketjow 0:9a59cffaafad 34 AlarmFull();
ketjow 0:9a59cffaafad 35 }
ketjow 0:9a59cffaafad 36 else
ketjow 0:9a59cffaafad 37 {
ketjow 0:9a59cffaafad 38 (void)std::strncpy(m_pLogData + (m_WriteMarker * m_Characters), line, m_Characters);
ketjow 0:9a59cffaafad 39 m_WriteMarker++;
ketjow 0:9a59cffaafad 40 if (m_WriteMarker == m_Lines)
ketjow 0:9a59cffaafad 41 {
ketjow 0:9a59cffaafad 42 m_WriteMarker = 0;
ketjow 0:9a59cffaafad 43 }
ketjow 0:9a59cffaafad 44 }
ketjow 0:9a59cffaafad 45
ketjow 0:9a59cffaafad 46 //Enable interrupts (or not)
ketjow 0:9a59cffaafad 47 if (!was_masked)
ketjow 0:9a59cffaafad 48 {
ketjow 0:9a59cffaafad 49 __enable_irq();
ketjow 0:9a59cffaafad 50 }
ketjow 0:9a59cffaafad 51 }
ketjow 0:9a59cffaafad 52 }
ketjow 0:9a59cffaafad 53 else
ketjow 0:9a59cffaafad 54 {
ketjow 0:9a59cffaafad 55 Printf("Not enough memory for logging.\n");
ketjow 0:9a59cffaafad 56 }
ketjow 0:9a59cffaafad 57 return 0;
ketjow 0:9a59cffaafad 58 }
ketjow 0:9a59cffaafad 59
ketjow 0:9a59cffaafad 60 uint32_t Logger::Print()
ketjow 0:9a59cffaafad 61 {
ketjow 0:9a59cffaafad 62 uint32_t counter = 0;
ketjow 0:9a59cffaafad 63 if (m_pLogData != NULL)
ketjow 0:9a59cffaafad 64 {
ketjow 0:9a59cffaafad 65 while(m_ReadMarker != m_WriteMarker)
ketjow 0:9a59cffaafad 66 {
ketjow 0:9a59cffaafad 67 Printf(m_pLogData + (m_ReadMarker++ * m_Characters));
ketjow 0:9a59cffaafad 68 if (m_ReadMarker == m_Lines)
ketjow 0:9a59cffaafad 69 {
ketjow 0:9a59cffaafad 70 m_ReadMarker = 0;
ketjow 0:9a59cffaafad 71 }
ketjow 0:9a59cffaafad 72 counter++;
ketjow 0:9a59cffaafad 73 }
ketjow 0:9a59cffaafad 74 }
ketjow 0:9a59cffaafad 75 return counter;
ketjow 0:9a59cffaafad 76 }
ketjow 0:9a59cffaafad 77
ketjow 0:9a59cffaafad 78 int32_t Logger::GetTime()
ketjow 0:9a59cffaafad 79 {
ketjow 0:9a59cffaafad 80 return m_Timer.read_us();
ketjow 0:9a59cffaafad 81 }
ketjow 0:9a59cffaafad 82
ketjow 0:9a59cffaafad 83 void Logger::StartRecording()
ketjow 0:9a59cffaafad 84 {
ketjow 0:9a59cffaafad 85 if (0 == StartAction())
ketjow 0:9a59cffaafad 86 {
ketjow 0:9a59cffaafad 87 m_isRecording = true;
ketjow 0:9a59cffaafad 88 }
ketjow 0:9a59cffaafad 89 }
ketjow 0:9a59cffaafad 90
ketjow 0:9a59cffaafad 91 void Logger::StopRecording()
ketjow 0:9a59cffaafad 92 {
ketjow 0:9a59cffaafad 93 m_isRecording = false;
ketjow 0:9a59cffaafad 94 StopAction();
ketjow 0:9a59cffaafad 95 }
ketjow 0:9a59cffaafad 96
ketjow 0:9a59cffaafad 97 bool Logger::IsRecording()
ketjow 0:9a59cffaafad 98 {
ketjow 0:9a59cffaafad 99 return m_isRecording;
ketjow 0:9a59cffaafad 100 }