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@0:9a59cffaafad, 2016-02-12 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |