Baseline for testing

Dependents:   mbed_escm2000

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?

UserRevisionLine numberNew 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