Baseline for testing
EventLog.h@0:929bb73983c5, 2019-07-25 (annotated)
- Committer:
- foxbrianr
- Date:
- Thu Jul 25 00:43:28 2019 +0000
- Revision:
- 0:929bb73983c5
- Child:
- 1:aaddf80105fe
Baseline for testing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
foxbrianr | 0:929bb73983c5 | 1 | #ifndef _EVENT_LOG_ |
foxbrianr | 0:929bb73983c5 | 2 | #define _EVENT_LOG_ |
foxbrianr | 0:929bb73983c5 | 3 | |
foxbrianr | 0:929bb73983c5 | 4 | /* fault log */ |
foxbrianr | 0:929bb73983c5 | 5 | #include "mbed.h" |
foxbrianr | 0:929bb73983c5 | 6 | |
foxbrianr | 0:929bb73983c5 | 7 | #define MAX_EVENT_LENGTH 40 |
foxbrianr | 0:929bb73983c5 | 8 | #define MAX_EVENTS 50 |
foxbrianr | 0:929bb73983c5 | 9 | |
foxbrianr | 0:929bb73983c5 | 10 | class ESCM_Event |
foxbrianr | 0:929bb73983c5 | 11 | { |
foxbrianr | 0:929bb73983c5 | 12 | public: |
foxbrianr | 0:929bb73983c5 | 13 | |
foxbrianr | 0:929bb73983c5 | 14 | int port; |
foxbrianr | 0:929bb73983c5 | 15 | int address; |
foxbrianr | 0:929bb73983c5 | 16 | char timeStr[MAX_EVENT_LENGTH]; |
foxbrianr | 0:929bb73983c5 | 17 | |
foxbrianr | 0:929bb73983c5 | 18 | }; |
foxbrianr | 0:929bb73983c5 | 19 | |
foxbrianr | 0:929bb73983c5 | 20 | class ESCM_EventLog |
foxbrianr | 0:929bb73983c5 | 21 | { |
foxbrianr | 0:929bb73983c5 | 22 | |
foxbrianr | 0:929bb73983c5 | 23 | public: |
foxbrianr | 0:929bb73983c5 | 24 | |
foxbrianr | 0:929bb73983c5 | 25 | |
foxbrianr | 0:929bb73983c5 | 26 | ESCM_EventLog(); |
foxbrianr | 0:929bb73983c5 | 27 | virtual ~ESCM_EventLog(); |
foxbrianr | 0:929bb73983c5 | 28 | |
foxbrianr | 0:929bb73983c5 | 29 | ESCM_Event events[MAX_EVENTS] ; |
foxbrianr | 0:929bb73983c5 | 30 | |
foxbrianr | 0:929bb73983c5 | 31 | void init(); |
foxbrianr | 0:929bb73983c5 | 32 | int load(); |
foxbrianr | 0:929bb73983c5 | 33 | void save(); |
foxbrianr | 0:929bb73983c5 | 34 | void display(Serial *pc); |
foxbrianr | 0:929bb73983c5 | 35 | void add(int address); |
foxbrianr | 0:929bb73983c5 | 36 | void add(int address, char* timeStamp); |
foxbrianr | 0:929bb73983c5 | 37 | void clear(); |
foxbrianr | 0:929bb73983c5 | 38 | |
foxbrianr | 0:929bb73983c5 | 39 | static const int max_size_ = 5; |
foxbrianr | 0:929bb73983c5 | 40 | |
foxbrianr | 0:929bb73983c5 | 41 | int head_ ; |
foxbrianr | 0:929bb73983c5 | 42 | int tail_ ; |
foxbrianr | 0:929bb73983c5 | 43 | bool full_ ; |
foxbrianr | 0:929bb73983c5 | 44 | |
foxbrianr | 0:929bb73983c5 | 45 | void put(ESCM_Event item){ |
foxbrianr | 0:929bb73983c5 | 46 | |
foxbrianr | 0:929bb73983c5 | 47 | events[head_] = item; |
foxbrianr | 0:929bb73983c5 | 48 | |
foxbrianr | 0:929bb73983c5 | 49 | head_ = (head_ + 1) % max_size_; |
foxbrianr | 0:929bb73983c5 | 50 | full_ = head_ == tail_; |
foxbrianr | 0:929bb73983c5 | 51 | |
foxbrianr | 0:929bb73983c5 | 52 | if(full_) |
foxbrianr | 0:929bb73983c5 | 53 | { |
foxbrianr | 0:929bb73983c5 | 54 | tail_ = (tail_ + 1) % max_size_; |
foxbrianr | 0:929bb73983c5 | 55 | } |
foxbrianr | 0:929bb73983c5 | 56 | |
foxbrianr | 0:929bb73983c5 | 57 | } |
foxbrianr | 0:929bb73983c5 | 58 | |
foxbrianr | 0:929bb73983c5 | 59 | ESCM_Event get() { |
foxbrianr | 0:929bb73983c5 | 60 | |
foxbrianr | 0:929bb73983c5 | 61 | if(empty()) |
foxbrianr | 0:929bb73983c5 | 62 | { |
foxbrianr | 0:929bb73983c5 | 63 | return ESCM_Event(); |
foxbrianr | 0:929bb73983c5 | 64 | } |
foxbrianr | 0:929bb73983c5 | 65 | |
foxbrianr | 0:929bb73983c5 | 66 | //Read data and advance the tail (we now have a free space) |
foxbrianr | 0:929bb73983c5 | 67 | ESCM_Event val = events[tail_]; |
foxbrianr | 0:929bb73983c5 | 68 | full_ = false; |
foxbrianr | 0:929bb73983c5 | 69 | tail_ = (tail_ + 1) % max_size_; |
foxbrianr | 0:929bb73983c5 | 70 | |
foxbrianr | 0:929bb73983c5 | 71 | |
foxbrianr | 0:929bb73983c5 | 72 | return val; |
foxbrianr | 0:929bb73983c5 | 73 | |
foxbrianr | 0:929bb73983c5 | 74 | } |
foxbrianr | 0:929bb73983c5 | 75 | |
foxbrianr | 0:929bb73983c5 | 76 | void reset() |
foxbrianr | 0:929bb73983c5 | 77 | { |
foxbrianr | 0:929bb73983c5 | 78 | head_ = tail_; |
foxbrianr | 0:929bb73983c5 | 79 | full_ = false; |
foxbrianr | 0:929bb73983c5 | 80 | } |
foxbrianr | 0:929bb73983c5 | 81 | |
foxbrianr | 0:929bb73983c5 | 82 | bool empty() const |
foxbrianr | 0:929bb73983c5 | 83 | { |
foxbrianr | 0:929bb73983c5 | 84 | |
foxbrianr | 0:929bb73983c5 | 85 | //if head and tail are equal, we are empty |
foxbrianr | 0:929bb73983c5 | 86 | return (!full_ && (head_ == tail_)); |
foxbrianr | 0:929bb73983c5 | 87 | } |
foxbrianr | 0:929bb73983c5 | 88 | |
foxbrianr | 0:929bb73983c5 | 89 | bool full() const |
foxbrianr | 0:929bb73983c5 | 90 | { |
foxbrianr | 0:929bb73983c5 | 91 | //If tail is ahead the head by 1, we are full |
foxbrianr | 0:929bb73983c5 | 92 | return full_; |
foxbrianr | 0:929bb73983c5 | 93 | } |
foxbrianr | 0:929bb73983c5 | 94 | |
foxbrianr | 0:929bb73983c5 | 95 | int capacity() const |
foxbrianr | 0:929bb73983c5 | 96 | { |
foxbrianr | 0:929bb73983c5 | 97 | return max_size_; |
foxbrianr | 0:929bb73983c5 | 98 | } |
foxbrianr | 0:929bb73983c5 | 99 | |
foxbrianr | 0:929bb73983c5 | 100 | int size() const |
foxbrianr | 0:929bb73983c5 | 101 | { |
foxbrianr | 0:929bb73983c5 | 102 | int size = max_size_; |
foxbrianr | 0:929bb73983c5 | 103 | if(!full_) |
foxbrianr | 0:929bb73983c5 | 104 | { |
foxbrianr | 0:929bb73983c5 | 105 | if(head_ >= tail_) |
foxbrianr | 0:929bb73983c5 | 106 | { |
foxbrianr | 0:929bb73983c5 | 107 | size = head_ - tail_; |
foxbrianr | 0:929bb73983c5 | 108 | } |
foxbrianr | 0:929bb73983c5 | 109 | else |
foxbrianr | 0:929bb73983c5 | 110 | { |
foxbrianr | 0:929bb73983c5 | 111 | size = max_size_ + head_ - tail_; |
foxbrianr | 0:929bb73983c5 | 112 | } |
foxbrianr | 0:929bb73983c5 | 113 | } |
foxbrianr | 0:929bb73983c5 | 114 | return size; |
foxbrianr | 0:929bb73983c5 | 115 | } |
foxbrianr | 0:929bb73983c5 | 116 | }; |
foxbrianr | 0:929bb73983c5 | 117 | #endif |