Baseline for testing
EventLog.h@3:2b760f267603, 2020-03-17 (annotated)
- Committer:
- foxbrianr
- Date:
- Tue Mar 17 17:23:55 2020 +0000
- Revision:
- 3:2b760f267603
- Parent:
- 2:486d068deff9
fix up code for barry
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
foxbrianr | 2:486d068deff9 | 1 | /************************************************************************** |
foxbrianr | 2:486d068deff9 | 2 | * @file EventLog.h |
foxbrianr | 2:486d068deff9 | 3 | * @brief Base class for wrapping the interface with the ESCM Event Log |
foxbrianr | 2:486d068deff9 | 4 | * @version: V1.0 |
foxbrianr | 2:486d068deff9 | 5 | * @date: 9/17/2019 |
foxbrianr | 2:486d068deff9 | 6 | |
foxbrianr | 2:486d068deff9 | 7 | * |
foxbrianr | 2:486d068deff9 | 8 | * @note |
foxbrianr | 2:486d068deff9 | 9 | * Copyright (C) 2019 E3 Design. All rights reserved. |
foxbrianr | 2:486d068deff9 | 10 | * |
foxbrianr | 2:486d068deff9 | 11 | * @par |
foxbrianr | 2:486d068deff9 | 12 | * E3 Designers LLC is supplying this software for use with Cortex-M3 LPC1768 |
foxbrianr | 2:486d068deff9 | 13 | * processor based microcontroller for the ESCM 2000 Monitor and Display. |
foxbrianr | 2:486d068deff9 | 14 | * * |
foxbrianr | 2:486d068deff9 | 15 | * @par |
foxbrianr | 2:486d068deff9 | 16 | * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED |
foxbrianr | 2:486d068deff9 | 17 | * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF |
foxbrianr | 2:486d068deff9 | 18 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. |
foxbrianr | 2:486d068deff9 | 19 | * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR |
foxbrianr | 2:486d068deff9 | 20 | * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
foxbrianr | 2:486d068deff9 | 21 | * |
foxbrianr | 2:486d068deff9 | 22 | ******************************************************************************/ |
foxbrianr | 2:486d068deff9 | 23 | |
foxbrianr | 0:929bb73983c5 | 24 | #ifndef _EVENT_LOG_ |
foxbrianr | 0:929bb73983c5 | 25 | #define _EVENT_LOG_ |
foxbrianr | 0:929bb73983c5 | 26 | |
foxbrianr | 0:929bb73983c5 | 27 | /* fault log */ |
foxbrianr | 0:929bb73983c5 | 28 | #include "mbed.h" |
foxbrianr | 2:486d068deff9 | 29 | #define EVENT_LOG_FORMAT 0xFAFA |
foxbrianr | 0:929bb73983c5 | 30 | #define MAX_EVENTS 50 |
foxbrianr | 0:929bb73983c5 | 31 | |
foxbrianr | 0:929bb73983c5 | 32 | class ESCM_Event |
foxbrianr | 0:929bb73983c5 | 33 | { |
foxbrianr | 0:929bb73983c5 | 34 | public: |
foxbrianr | 0:929bb73983c5 | 35 | |
foxbrianr | 1:aaddf80105fe | 36 | uint16_t port; |
foxbrianr | 1:aaddf80105fe | 37 | uint16_t address; |
foxbrianr | 1:aaddf80105fe | 38 | uint16_t hours; |
foxbrianr | 1:aaddf80105fe | 39 | uint16_t mins; |
foxbrianr | 1:aaddf80105fe | 40 | uint16_t secs; |
foxbrianr | 1:aaddf80105fe | 41 | uint16_t month; |
foxbrianr | 1:aaddf80105fe | 42 | uint16_t day; |
foxbrianr | 1:aaddf80105fe | 43 | uint16_t year; |
foxbrianr | 1:aaddf80105fe | 44 | |
foxbrianr | 1:aaddf80105fe | 45 | |
foxbrianr | 1:aaddf80105fe | 46 | ESCM_Event(); |
foxbrianr | 1:aaddf80105fe | 47 | ESCM_Event(uint16_t address); |
foxbrianr | 1:aaddf80105fe | 48 | |
foxbrianr | 1:aaddf80105fe | 49 | |
foxbrianr | 1:aaddf80105fe | 50 | void getTime (char* buffer); |
foxbrianr | 1:aaddf80105fe | 51 | void setTimeNow(void); |
foxbrianr | 1:aaddf80105fe | 52 | |
foxbrianr | 0:929bb73983c5 | 53 | |
foxbrianr | 0:929bb73983c5 | 54 | }; |
foxbrianr | 0:929bb73983c5 | 55 | |
foxbrianr | 0:929bb73983c5 | 56 | class ESCM_EventLog |
foxbrianr | 0:929bb73983c5 | 57 | { |
foxbrianr | 0:929bb73983c5 | 58 | |
foxbrianr | 0:929bb73983c5 | 59 | public: |
foxbrianr | 0:929bb73983c5 | 60 | |
foxbrianr | 0:929bb73983c5 | 61 | |
foxbrianr | 0:929bb73983c5 | 62 | ESCM_EventLog(); |
foxbrianr | 0:929bb73983c5 | 63 | virtual ~ESCM_EventLog(); |
foxbrianr | 0:929bb73983c5 | 64 | |
foxbrianr | 0:929bb73983c5 | 65 | ESCM_Event events[MAX_EVENTS] ; |
foxbrianr | 0:929bb73983c5 | 66 | |
foxbrianr | 1:aaddf80105fe | 67 | int init(); |
foxbrianr | 1:aaddf80105fe | 68 | int load(); |
foxbrianr | 1:aaddf80105fe | 69 | int save(); |
foxbrianr | 2:486d068deff9 | 70 | void clear(); |
foxbrianr | 1:aaddf80105fe | 71 | |
foxbrianr | 0:929bb73983c5 | 72 | void display(Serial *pc); |
foxbrianr | 1:aaddf80105fe | 73 | void add(uint16_t address); |
foxbrianr | 1:aaddf80105fe | 74 | void add(uint16_t address, uint16_t port); |
foxbrianr | 1:aaddf80105fe | 75 | ESCM_Event * index (int pos ); |
foxbrianr | 0:929bb73983c5 | 76 | |
foxbrianr | 2:486d068deff9 | 77 | Mutex _mutex; |
foxbrianr | 2:486d068deff9 | 78 | |
foxbrianr | 2:486d068deff9 | 79 | static const int max_size_ = MAX_EVENTS; |
foxbrianr | 0:929bb73983c5 | 80 | |
foxbrianr | 0:929bb73983c5 | 81 | int head_ ; |
foxbrianr | 0:929bb73983c5 | 82 | int tail_ ; |
foxbrianr | 0:929bb73983c5 | 83 | bool full_ ; |
foxbrianr | 2:486d068deff9 | 84 | bool dirty ; |
foxbrianr | 2:486d068deff9 | 85 | |
foxbrianr | 0:929bb73983c5 | 86 | void put(ESCM_Event item){ |
foxbrianr | 0:929bb73983c5 | 87 | |
foxbrianr | 0:929bb73983c5 | 88 | events[head_] = item; |
foxbrianr | 0:929bb73983c5 | 89 | |
foxbrianr | 0:929bb73983c5 | 90 | head_ = (head_ + 1) % max_size_; |
foxbrianr | 0:929bb73983c5 | 91 | full_ = head_ == tail_; |
foxbrianr | 0:929bb73983c5 | 92 | |
foxbrianr | 0:929bb73983c5 | 93 | if(full_) |
foxbrianr | 0:929bb73983c5 | 94 | { |
foxbrianr | 0:929bb73983c5 | 95 | tail_ = (tail_ + 1) % max_size_; |
foxbrianr | 0:929bb73983c5 | 96 | } |
foxbrianr | 2:486d068deff9 | 97 | |
foxbrianr | 2:486d068deff9 | 98 | dirty = true; |
foxbrianr | 0:929bb73983c5 | 99 | |
foxbrianr | 0:929bb73983c5 | 100 | } |
foxbrianr | 0:929bb73983c5 | 101 | |
foxbrianr | 0:929bb73983c5 | 102 | ESCM_Event get() { |
foxbrianr | 0:929bb73983c5 | 103 | |
foxbrianr | 0:929bb73983c5 | 104 | if(empty()) |
foxbrianr | 0:929bb73983c5 | 105 | { |
foxbrianr | 0:929bb73983c5 | 106 | return ESCM_Event(); |
foxbrianr | 0:929bb73983c5 | 107 | } |
foxbrianr | 0:929bb73983c5 | 108 | |
foxbrianr | 0:929bb73983c5 | 109 | //Read data and advance the tail (we now have a free space) |
foxbrianr | 0:929bb73983c5 | 110 | ESCM_Event val = events[tail_]; |
foxbrianr | 0:929bb73983c5 | 111 | full_ = false; |
foxbrianr | 0:929bb73983c5 | 112 | tail_ = (tail_ + 1) % max_size_; |
foxbrianr | 0:929bb73983c5 | 113 | |
foxbrianr | 2:486d068deff9 | 114 | dirty = true; |
foxbrianr | 0:929bb73983c5 | 115 | return val; |
foxbrianr | 0:929bb73983c5 | 116 | |
foxbrianr | 0:929bb73983c5 | 117 | } |
foxbrianr | 0:929bb73983c5 | 118 | |
foxbrianr | 0:929bb73983c5 | 119 | void reset() |
foxbrianr | 0:929bb73983c5 | 120 | { |
foxbrianr | 0:929bb73983c5 | 121 | head_ = tail_; |
foxbrianr | 0:929bb73983c5 | 122 | full_ = false; |
foxbrianr | 2:486d068deff9 | 123 | dirty = true; |
foxbrianr | 0:929bb73983c5 | 124 | } |
foxbrianr | 0:929bb73983c5 | 125 | |
foxbrianr | 0:929bb73983c5 | 126 | bool empty() const |
foxbrianr | 0:929bb73983c5 | 127 | { |
foxbrianr | 0:929bb73983c5 | 128 | |
foxbrianr | 0:929bb73983c5 | 129 | //if head and tail are equal, we are empty |
foxbrianr | 0:929bb73983c5 | 130 | return (!full_ && (head_ == tail_)); |
foxbrianr | 0:929bb73983c5 | 131 | } |
foxbrianr | 0:929bb73983c5 | 132 | |
foxbrianr | 0:929bb73983c5 | 133 | bool full() const |
foxbrianr | 0:929bb73983c5 | 134 | { |
foxbrianr | 0:929bb73983c5 | 135 | //If tail is ahead the head by 1, we are full |
foxbrianr | 0:929bb73983c5 | 136 | return full_; |
foxbrianr | 0:929bb73983c5 | 137 | } |
foxbrianr | 0:929bb73983c5 | 138 | |
foxbrianr | 0:929bb73983c5 | 139 | int capacity() const |
foxbrianr | 0:929bb73983c5 | 140 | { |
foxbrianr | 0:929bb73983c5 | 141 | return max_size_; |
foxbrianr | 0:929bb73983c5 | 142 | } |
foxbrianr | 0:929bb73983c5 | 143 | |
foxbrianr | 0:929bb73983c5 | 144 | int size() const |
foxbrianr | 0:929bb73983c5 | 145 | { |
foxbrianr | 0:929bb73983c5 | 146 | int size = max_size_; |
foxbrianr | 0:929bb73983c5 | 147 | if(!full_) |
foxbrianr | 0:929bb73983c5 | 148 | { |
foxbrianr | 0:929bb73983c5 | 149 | if(head_ >= tail_) |
foxbrianr | 0:929bb73983c5 | 150 | { |
foxbrianr | 0:929bb73983c5 | 151 | size = head_ - tail_; |
foxbrianr | 0:929bb73983c5 | 152 | } |
foxbrianr | 0:929bb73983c5 | 153 | else |
foxbrianr | 0:929bb73983c5 | 154 | { |
foxbrianr | 0:929bb73983c5 | 155 | size = max_size_ + head_ - tail_; |
foxbrianr | 0:929bb73983c5 | 156 | } |
foxbrianr | 0:929bb73983c5 | 157 | } |
foxbrianr | 0:929bb73983c5 | 158 | return size; |
foxbrianr | 0:929bb73983c5 | 159 | } |
foxbrianr | 0:929bb73983c5 | 160 | }; |
foxbrianr | 0:929bb73983c5 | 161 | #endif |