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