Baseline for testing

Dependents:   mbed_escm2000

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?

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