Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed vcdLogger vcdSignal
Logger/logger.cpp@1:446154224f92, 2016-02-20 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |