Baseline for testing
EventLog.cpp@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.cpp |
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 | 0:929bb73983c5 | 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 | 0:929bb73983c5 | 23 | #include "mbed.h" |
foxbrianr | 0:929bb73983c5 | 24 | #include "EventLog.h" |
foxbrianr | 1:aaddf80105fe | 25 | #include "stdio.h" |
foxbrianr | 1:aaddf80105fe | 26 | |
foxbrianr | 1:aaddf80105fe | 27 | |
foxbrianr | 1:aaddf80105fe | 28 | |
foxbrianr | 1:aaddf80105fe | 29 | |
foxbrianr | 1:aaddf80105fe | 30 | /*------------------------------------------------------------------- |
foxbrianr | 1:aaddf80105fe | 31 | * define local file system |
foxbrianr | 1:aaddf80105fe | 32 | *-------------------------------------------------------------------*/ |
foxbrianr | 1:aaddf80105fe | 33 | LocalFileSystem local("local"); |
foxbrianr | 1:aaddf80105fe | 34 | |
foxbrianr | 1:aaddf80105fe | 35 | const char * filename = "/local/events.bin"; |
foxbrianr | 1:aaddf80105fe | 36 | |
foxbrianr | 1:aaddf80105fe | 37 | |
foxbrianr | 2:486d068deff9 | 38 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 39 | ESCM_Event::ESCM_Event(): address(0),port(0xFF) |
foxbrianr | 1:aaddf80105fe | 40 | { |
foxbrianr | 1:aaddf80105fe | 41 | |
foxbrianr | 1:aaddf80105fe | 42 | } |
foxbrianr | 1:aaddf80105fe | 43 | |
foxbrianr | 2:486d068deff9 | 44 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 45 | ESCM_Event::ESCM_Event(uint16_t address): address(address),port(0xFF) |
foxbrianr | 1:aaddf80105fe | 46 | { |
foxbrianr | 1:aaddf80105fe | 47 | setTimeNow(); |
foxbrianr | 1:aaddf80105fe | 48 | } |
foxbrianr | 1:aaddf80105fe | 49 | |
foxbrianr | 2:486d068deff9 | 50 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 51 | void ESCM_Event::setTimeNow(void) |
foxbrianr | 1:aaddf80105fe | 52 | { |
foxbrianr | 1:aaddf80105fe | 53 | time_t rawtime; |
foxbrianr | 1:aaddf80105fe | 54 | struct tm * timeinfo; |
foxbrianr | 1:aaddf80105fe | 55 | |
foxbrianr | 1:aaddf80105fe | 56 | time ( &rawtime ); |
foxbrianr | 1:aaddf80105fe | 57 | timeinfo = localtime ( &rawtime ); timeinfo = localtime (&rawtime); |
foxbrianr | 1:aaddf80105fe | 58 | |
foxbrianr | 1:aaddf80105fe | 59 | hours = timeinfo->tm_hour; |
foxbrianr | 1:aaddf80105fe | 60 | mins = timeinfo->tm_min; |
foxbrianr | 1:aaddf80105fe | 61 | secs = timeinfo->tm_sec; |
foxbrianr | 1:aaddf80105fe | 62 | year = timeinfo->tm_year+1900; |
foxbrianr | 1:aaddf80105fe | 63 | month = timeinfo->tm_mon + 1; |
foxbrianr | 1:aaddf80105fe | 64 | day = timeinfo->tm_mday; |
foxbrianr | 1:aaddf80105fe | 65 | } |
foxbrianr | 1:aaddf80105fe | 66 | |
foxbrianr | 2:486d068deff9 | 67 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 68 | void ESCM_Event::getTime (char * buffer) { |
foxbrianr | 1:aaddf80105fe | 69 | sprintf(buffer,"%02d:%02d %02d/%02d/%04d", hours,mins,month,day,year); |
foxbrianr | 1:aaddf80105fe | 70 | } |
foxbrianr | 1:aaddf80105fe | 71 | |
foxbrianr | 0:929bb73983c5 | 72 | |
foxbrianr | 0:929bb73983c5 | 73 | |
foxbrianr | 2:486d068deff9 | 74 | /******************************************************************************/ |
foxbrianr | 0:929bb73983c5 | 75 | ESCM_EventLog::ESCM_EventLog() { |
foxbrianr | 0:929bb73983c5 | 76 | full_=false; |
foxbrianr | 2:486d068deff9 | 77 | dirty=false; |
foxbrianr | 0:929bb73983c5 | 78 | head_=0; |
foxbrianr | 0:929bb73983c5 | 79 | tail_=0; |
foxbrianr | 0:929bb73983c5 | 80 | |
foxbrianr | 0:929bb73983c5 | 81 | } |
foxbrianr | 0:929bb73983c5 | 82 | |
foxbrianr | 2:486d068deff9 | 83 | /******************************************************************************/ |
foxbrianr | 0:929bb73983c5 | 84 | ESCM_EventLog::~ESCM_EventLog() { |
foxbrianr | 0:929bb73983c5 | 85 | } |
foxbrianr | 0:929bb73983c5 | 86 | |
foxbrianr | 2:486d068deff9 | 87 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 88 | int ESCM_EventLog::init() |
foxbrianr | 0:929bb73983c5 | 89 | { |
foxbrianr | 0:929bb73983c5 | 90 | full_=false; |
foxbrianr | 2:486d068deff9 | 91 | dirty = true; |
foxbrianr | 0:929bb73983c5 | 92 | head_=0; |
foxbrianr | 0:929bb73983c5 | 93 | tail_=0; |
foxbrianr | 2:486d068deff9 | 94 | |
foxbrianr | 0:929bb73983c5 | 95 | printf("Initializing Event Log\n\r"); |
foxbrianr | 2:486d068deff9 | 96 | if ( !load() ) { |
foxbrianr | 3:2b760f267603 | 97 | printf("..Load Failed \n\r"); |
foxbrianr | 3:2b760f267603 | 98 | printf("..Setting Default Event Log\n\r"); |
foxbrianr | 1:aaddf80105fe | 99 | memset ( events,0,sizeof(ESCM_Event)*MAX_EVENTS); |
foxbrianr | 1:aaddf80105fe | 100 | // for testing |
foxbrianr | 2:486d068deff9 | 101 | for ( int i=0; i<MAX_EVENTS; i++) { |
foxbrianr | 1:aaddf80105fe | 102 | add(i*2); |
foxbrianr | 1:aaddf80105fe | 103 | } |
foxbrianr | 1:aaddf80105fe | 104 | save(); |
foxbrianr | 3:2b760f267603 | 105 | } else { |
foxbrianr | 3:2b760f267603 | 106 | printf("..Loaded Event Log\n\r"); |
foxbrianr | 1:aaddf80105fe | 107 | } |
foxbrianr | 2:486d068deff9 | 108 | |
foxbrianr | 3:2b760f267603 | 109 | printf("Complete\n\r"); |
foxbrianr | 1:aaddf80105fe | 110 | return 1; |
foxbrianr | 0:929bb73983c5 | 111 | } |
foxbrianr | 0:929bb73983c5 | 112 | |
foxbrianr | 2:486d068deff9 | 113 | /******************************************************************************/ |
foxbrianr | 0:929bb73983c5 | 114 | int ESCM_EventLog::load() |
foxbrianr | 2:486d068deff9 | 115 | { |
foxbrianr | 2:486d068deff9 | 116 | printf("Reading %s ...\n\r",filename ); |
foxbrianr | 0:929bb73983c5 | 117 | FILE *input = fopen(filename, "rb"); |
foxbrianr | 1:aaddf80105fe | 118 | if(input!= NULL){ |
foxbrianr | 1:aaddf80105fe | 119 | |
foxbrianr | 1:aaddf80105fe | 120 | uint16_t code; |
foxbrianr | 1:aaddf80105fe | 121 | uint16_t size; |
foxbrianr | 3:2b760f267603 | 122 | uint16_t hr; |
foxbrianr | 3:2b760f267603 | 123 | |
foxbrianr | 3:2b760f267603 | 124 | |
foxbrianr | 0:929bb73983c5 | 125 | |
foxbrianr | 1:aaddf80105fe | 126 | fread(&code, sizeof(uint16_t),1,input); |
foxbrianr | 1:aaddf80105fe | 127 | fread(&size, sizeof(uint16_t),1,input); |
foxbrianr | 0:929bb73983c5 | 128 | |
foxbrianr | 2:486d068deff9 | 129 | if (code != EVENT_LOG_FORMAT && size != MAX_EVENTS ) { |
foxbrianr | 2:486d068deff9 | 130 | fclose(input); |
foxbrianr | 1:aaddf80105fe | 131 | return 0; |
foxbrianr | 1:aaddf80105fe | 132 | } |
foxbrianr | 1:aaddf80105fe | 133 | |
foxbrianr | 1:aaddf80105fe | 134 | fread(&head_, sizeof(uint16_t),1,input); |
foxbrianr | 1:aaddf80105fe | 135 | fread(&tail_, sizeof(uint16_t),1,input); |
foxbrianr | 0:929bb73983c5 | 136 | |
foxbrianr | 0:929bb73983c5 | 137 | for (int i=0;i<MAX_EVENTS;i++) |
foxbrianr | 0:929bb73983c5 | 138 | { |
foxbrianr | 1:aaddf80105fe | 139 | fread( &events[i].port, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 140 | fread( &events[i].address, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 141 | fread( &events[i].hours, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 142 | fread( &events[i].mins, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 143 | fread( &events[i].secs, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 144 | fread( &events[i].day, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 145 | fread( &events[i].month, sizeof(uint16_t),1 , input); |
foxbrianr | 1:aaddf80105fe | 146 | fread( &events[i].year, sizeof(uint16_t),1 , input); |
foxbrianr | 3:2b760f267603 | 147 | #if 0 |
foxbrianr | 3:2b760f267603 | 148 | if ( events[i].hours < 12 ) { |
foxbrianr | 3:2b760f267603 | 149 | |
foxbrianr | 3:2b760f267603 | 150 | hr = (events[i].hours == 0) ? 12 : events[i].hours; |
foxbrianr | 3:2b760f267603 | 151 | |
foxbrianr | 3:2b760f267603 | 152 | printf("%02d) %02x %02d:%02d:%02dam\r", |
foxbrianr | 3:2b760f267603 | 153 | i, |
foxbrianr | 3:2b760f267603 | 154 | events[i].address, |
foxbrianr | 3:2b760f267603 | 155 | hr, |
foxbrianr | 3:2b760f267603 | 156 | events[i].mins, |
foxbrianr | 3:2b760f267603 | 157 | events[i].secs ); |
foxbrianr | 3:2b760f267603 | 158 | |
foxbrianr | 3:2b760f267603 | 159 | } else { |
foxbrianr | 3:2b760f267603 | 160 | |
foxbrianr | 3:2b760f267603 | 161 | hr = (events[i].hours - 12); |
foxbrianr | 3:2b760f267603 | 162 | |
foxbrianr | 3:2b760f267603 | 163 | printf("%02d) %02x %02d:%02d:%02dpm\r", |
foxbrianr | 3:2b760f267603 | 164 | i, |
foxbrianr | 3:2b760f267603 | 165 | events[i].address, |
foxbrianr | 3:2b760f267603 | 166 | hr, |
foxbrianr | 3:2b760f267603 | 167 | events[i].mins, |
foxbrianr | 3:2b760f267603 | 168 | events[i].secs ); |
foxbrianr | 3:2b760f267603 | 169 | } |
foxbrianr | 3:2b760f267603 | 170 | #endif |
foxbrianr | 3:2b760f267603 | 171 | |
foxbrianr | 0:929bb73983c5 | 172 | } |
foxbrianr | 0:929bb73983c5 | 173 | fclose(input); |
foxbrianr | 3:2b760f267603 | 174 | |
foxbrianr | 3:2b760f267603 | 175 | printf("Number of Events = %d (%d) \n\r", this->size(),this->capacity()); |
foxbrianr | 0:929bb73983c5 | 176 | } |
foxbrianr | 0:929bb73983c5 | 177 | else |
foxbrianr | 0:929bb73983c5 | 178 | { |
foxbrianr | 0:929bb73983c5 | 179 | printf("Could not Read %s\n\r",filename ); |
foxbrianr | 0:929bb73983c5 | 180 | return 0; |
foxbrianr | 0:929bb73983c5 | 181 | } |
foxbrianr | 1:aaddf80105fe | 182 | return 1; |
foxbrianr | 0:929bb73983c5 | 183 | } |
foxbrianr | 0:929bb73983c5 | 184 | |
foxbrianr | 2:486d068deff9 | 185 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 186 | int ESCM_EventLog::save() |
foxbrianr | 0:929bb73983c5 | 187 | { |
foxbrianr | 2:486d068deff9 | 188 | int result = 1; |
foxbrianr | 2:486d068deff9 | 189 | |
foxbrianr | 2:486d068deff9 | 190 | if (!dirty) |
foxbrianr | 2:486d068deff9 | 191 | return 0; |
foxbrianr | 2:486d068deff9 | 192 | |
foxbrianr | 2:486d068deff9 | 193 | printf("Saving %s ...\n\r",filename ); |
foxbrianr | 0:929bb73983c5 | 194 | |
foxbrianr | 1:aaddf80105fe | 195 | FILE *output = fopen(filename, "wb"); |
foxbrianr | 1:aaddf80105fe | 196 | if (output != NULL) { |
foxbrianr | 1:aaddf80105fe | 197 | |
foxbrianr | 2:486d068deff9 | 198 | uint16_t code = EVENT_LOG_FORMAT; |
foxbrianr | 1:aaddf80105fe | 199 | uint16_t size = MAX_EVENTS; |
foxbrianr | 1:aaddf80105fe | 200 | |
foxbrianr | 1:aaddf80105fe | 201 | fwrite(&code, sizeof(uint16_t),1,output); |
foxbrianr | 1:aaddf80105fe | 202 | fwrite(&size, sizeof(uint16_t),1,output); |
foxbrianr | 1:aaddf80105fe | 203 | fwrite(&head_, sizeof(uint16_t),1,output); |
foxbrianr | 1:aaddf80105fe | 204 | fwrite(&tail_, sizeof(uint16_t),1,output); |
foxbrianr | 1:aaddf80105fe | 205 | |
foxbrianr | 1:aaddf80105fe | 206 | for (int i=0;i<MAX_EVENTS;i++) |
foxbrianr | 2:486d068deff9 | 207 | { |
foxbrianr | 1:aaddf80105fe | 208 | fwrite( &events[i].port, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 209 | fwrite( &events[i].address, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 210 | fwrite( &events[i].hours, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 211 | fwrite( &events[i].mins, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 212 | fwrite( &events[i].secs, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 213 | fwrite( &events[i].day, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 214 | fwrite( &events[i].month, sizeof(uint16_t),1 , output); |
foxbrianr | 1:aaddf80105fe | 215 | fwrite( &events[i].year, sizeof(uint16_t),1 , output); |
foxbrianr | 2:486d068deff9 | 216 | ThisThread::sleep_for(1); |
foxbrianr | 1:aaddf80105fe | 217 | |
foxbrianr | 1:aaddf80105fe | 218 | } |
foxbrianr | 1:aaddf80105fe | 219 | fflush(output); |
foxbrianr | 1:aaddf80105fe | 220 | fclose(output); |
foxbrianr | 2:486d068deff9 | 221 | dirty = false; |
foxbrianr | 2:486d068deff9 | 222 | result = 1; |
foxbrianr | 1:aaddf80105fe | 223 | } |
foxbrianr | 1:aaddf80105fe | 224 | else |
foxbrianr | 0:929bb73983c5 | 225 | { |
foxbrianr | 1:aaddf80105fe | 226 | printf("Could not save %s\n\r",filename ); |
foxbrianr | 2:486d068deff9 | 227 | result = 0; |
foxbrianr | 0:929bb73983c5 | 228 | } |
foxbrianr | 0:929bb73983c5 | 229 | |
foxbrianr | 0:929bb73983c5 | 230 | printf("Done \n\r" ); |
foxbrianr | 2:486d068deff9 | 231 | return result; |
foxbrianr | 0:929bb73983c5 | 232 | } |
foxbrianr | 0:929bb73983c5 | 233 | |
foxbrianr | 2:486d068deff9 | 234 | /******************************************************************************/ |
foxbrianr | 0:929bb73983c5 | 235 | void ESCM_EventLog::display(Serial *pc) |
foxbrianr | 0:929bb73983c5 | 236 | { |
foxbrianr | 0:929bb73983c5 | 237 | int j = tail_; |
foxbrianr | 1:aaddf80105fe | 238 | int i = head_ ; |
foxbrianr | 0:929bb73983c5 | 239 | int count = 0 ; |
foxbrianr | 0:929bb73983c5 | 240 | |
foxbrianr | 0:929bb73983c5 | 241 | pc->printf("\n\r"); |
foxbrianr | 0:929bb73983c5 | 242 | pc->printf("-----------------------------\n\r"); |
foxbrianr | 0:929bb73983c5 | 243 | pc->printf("- Event Log \n\r"); |
foxbrianr | 0:929bb73983c5 | 244 | pc->printf("-----------------------------\n\r"); |
foxbrianr | 0:929bb73983c5 | 245 | pc->printf("%d %d %d \n\r", i,j, full_); |
foxbrianr | 0:929bb73983c5 | 246 | |
foxbrianr | 0:929bb73983c5 | 247 | |
foxbrianr | 0:929bb73983c5 | 248 | while ( count < size() ) |
foxbrianr | 0:929bb73983c5 | 249 | { |
foxbrianr | 1:aaddf80105fe | 250 | if (--i < 0 ) { |
foxbrianr | 0:929bb73983c5 | 251 | i =( max_size_ - 1 ); |
foxbrianr | 0:929bb73983c5 | 252 | } |
foxbrianr | 1:aaddf80105fe | 253 | |
foxbrianr | 1:aaddf80105fe | 254 | pc->printf("%02d <%02d> %02d :: %02d:%02d:%02d %02d/%02d/%04d \n\r", |
foxbrianr | 1:aaddf80105fe | 255 | count, |
foxbrianr | 1:aaddf80105fe | 256 | events[i].port, |
foxbrianr | 1:aaddf80105fe | 257 | events[i].address, |
foxbrianr | 1:aaddf80105fe | 258 | events[i].hours, |
foxbrianr | 1:aaddf80105fe | 259 | events[i].mins, |
foxbrianr | 1:aaddf80105fe | 260 | events[i].secs, |
foxbrianr | 1:aaddf80105fe | 261 | events[i].month, |
foxbrianr | 1:aaddf80105fe | 262 | events[i].day, |
foxbrianr | 1:aaddf80105fe | 263 | events[i].year |
foxbrianr | 1:aaddf80105fe | 264 | ); |
foxbrianr | 1:aaddf80105fe | 265 | |
foxbrianr | 0:929bb73983c5 | 266 | count++; |
foxbrianr | 0:929bb73983c5 | 267 | } |
foxbrianr | 0:929bb73983c5 | 268 | pc->printf("-----------------------------\n\r"); |
foxbrianr | 0:929bb73983c5 | 269 | } |
foxbrianr | 2:486d068deff9 | 270 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 271 | void ESCM_EventLog::add(uint16_t address, uint16_t port) |
foxbrianr | 1:aaddf80105fe | 272 | { |
foxbrianr | 1:aaddf80105fe | 273 | ESCM_Event newEvent; |
foxbrianr | 1:aaddf80105fe | 274 | newEvent.address = address; |
foxbrianr | 1:aaddf80105fe | 275 | newEvent.port = port; |
foxbrianr | 1:aaddf80105fe | 276 | newEvent.setTimeNow(); |
foxbrianr | 1:aaddf80105fe | 277 | put( newEvent ); |
foxbrianr | 1:aaddf80105fe | 278 | } |
foxbrianr | 0:929bb73983c5 | 279 | |
foxbrianr | 2:486d068deff9 | 280 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 281 | void ESCM_EventLog::add(uint16_t address) |
foxbrianr | 1:aaddf80105fe | 282 | { |
foxbrianr | 1:aaddf80105fe | 283 | ESCM_Event newEvent; |
foxbrianr | 1:aaddf80105fe | 284 | newEvent.address = address; |
foxbrianr | 1:aaddf80105fe | 285 | newEvent.port = 0; |
foxbrianr | 1:aaddf80105fe | 286 | newEvent.setTimeNow(); |
foxbrianr | 1:aaddf80105fe | 287 | put( newEvent ); |
foxbrianr | 1:aaddf80105fe | 288 | } |
foxbrianr | 1:aaddf80105fe | 289 | |
foxbrianr | 2:486d068deff9 | 290 | /******************************************************************************/ |
foxbrianr | 1:aaddf80105fe | 291 | ESCM_Event * ESCM_EventLog::index (int pos ){ |
foxbrianr | 1:aaddf80105fe | 292 | |
foxbrianr | 1:aaddf80105fe | 293 | ESCM_Event * result = NULL; |
foxbrianr | 1:aaddf80105fe | 294 | if (!empty()) |
foxbrianr | 1:aaddf80105fe | 295 | { |
foxbrianr | 1:aaddf80105fe | 296 | if (pos < size() || pos >= 0 ) { |
foxbrianr | 1:aaddf80105fe | 297 | |
foxbrianr | 1:aaddf80105fe | 298 | int index = (head_ - 1 - pos ); |
foxbrianr | 1:aaddf80105fe | 299 | |
foxbrianr | 1:aaddf80105fe | 300 | if (index < 0 ) |
foxbrianr | 1:aaddf80105fe | 301 | index += max_size_; |
foxbrianr | 1:aaddf80105fe | 302 | |
foxbrianr | 1:aaddf80105fe | 303 | result = &(events[index]); |
foxbrianr | 1:aaddf80105fe | 304 | } |
foxbrianr | 1:aaddf80105fe | 305 | } |
foxbrianr | 1:aaddf80105fe | 306 | return result; |
foxbrianr | 1:aaddf80105fe | 307 | } |