3rd Repo, trying to figure this out.

Dependencies:   LPS25H hts221

Fork of SOFT253_Template_Weather_OS_54 by Stage-1 Students SoCEM

Committer:
aburch1
Date:
Thu May 11 19:23:55 2017 +0000
Revision:
83:0d3572a8a851
Parent:
82:668b51a39148
Child:
85:422d0a1b95cf
Comments cleaned and improved throughout classes. Main header class comment complete, other class comments still need to be written.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Netaphous 64:8ada3e0b2048 1 #include "CircularArray.h"
Netaphous 64:8ada3e0b2048 2 #include <stdio.h>
Netaphous 64:8ada3e0b2048 3 #include <ctype.h>
aburch1 83:0d3572a8a851 4
aburch1 83:0d3572a8a851 5
aburch1 81:996c0a3319b4 6 CircularArray::CircularArray(int limit, MessageLogger *newLogger)
Netaphous 64:8ada3e0b2048 7 {
Netaphous 64:8ada3e0b2048 8 maxSize = limit;
Netaphous 64:8ada3e0b2048 9 array = new Measure[maxSize];
Netaphous 64:8ada3e0b2048 10 firstValue = 0;
Netaphous 64:8ada3e0b2048 11 currentSize = 0;
aburch1 81:996c0a3319b4 12 logger = newLogger;
aburch1 81:996c0a3319b4 13 }
aburch1 83:0d3572a8a851 14
aburch1 83:0d3572a8a851 15 /**
aburch1 83:0d3572a8a851 16 Adds a new Measure object to the next available space in the buffer.
aburch1 83:0d3572a8a851 17
aburch1 83:0d3572a8a851 18 @param _measure : Measure object to be added to buffer.
aburch1 83:0d3572a8a851 19 */
Netaphous 64:8ada3e0b2048 20 void CircularArray::pushValue(Measure _measure)
Netaphous 64:8ada3e0b2048 21 {
Netaphous 64:8ada3e0b2048 22 if(currentSize >= maxSize)
Netaphous 64:8ada3e0b2048 23 {
Netaphous 64:8ada3e0b2048 24 firstValue++;
Netaphous 64:8ada3e0b2048 25 currentSize--;
Netaphous 64:8ada3e0b2048 26 }
aburch1 72:ef4a4e3089c1 27 int next = nextSpace();
aburch1 72:ef4a4e3089c1 28 array[next] = _measure;
Netaphous 64:8ada3e0b2048 29 currentSize++;
Netaphous 64:8ada3e0b2048 30 }
aburch1 80:959151952153 31
aburch1 83:0d3572a8a851 32 /**
aburch1 83:0d3572a8a851 33 Returns the first element in the buffer.
aburch1 83:0d3572a8a851 34
aburch1 83:0d3572a8a851 35 @return array : First Measure object in the buffer.
aburch1 83:0d3572a8a851 36 */
aburch1 80:959151952153 37 Measure CircularArray::pullValue()
aburch1 80:959151952153 38 {
aburch1 80:959151952153 39 return array[firstValue];
aburch1 80:959151952153 40 }
aburch1 83:0d3572a8a851 41
aburch1 81:996c0a3319b4 42 char temp2[256];
aburch1 83:0d3572a8a851 43
aburch1 83:0d3572a8a851 44 /**
aburch1 83:0d3572a8a851 45 Prints the newest n measurements from the buffer, using the MessageLogger.
aburch1 83:0d3572a8a851 46
aburch1 83:0d3572a8a851 47 @param n : The number of measurements to be printed.
aburch1 83:0d3572a8a851 48 */
aburch1 83:0d3572a8a851 49 void CircularArray::readN(int n)
Netaphous 64:8ada3e0b2048 50 {
aburch1 83:0d3572a8a851 51 if(n > currentSize)
Netaphous 64:8ada3e0b2048 52 {
aburch1 83:0d3572a8a851 53 n = currentSize;
aburch1 83:0d3572a8a851 54 snprintf(temp2, 256, "Not enough measurements taken. Printing all %i measurement(s): \r\n", n);
Netaphous 64:8ada3e0b2048 55 }
aburch1 82:668b51a39148 56 else
aburch1 82:668b51a39148 57 {
aburch1 83:0d3572a8a851 58 snprintf(temp2, 256, "Printing %i measurement(s): \r\n", n);
aburch1 82:668b51a39148 59 }
aburch1 82:668b51a39148 60
aburch1 82:668b51a39148 61 logger->SendMessage(temp2);
aburch1 82:668b51a39148 62
aburch1 83:0d3572a8a851 63 int currentElement = nextSpace() - n;
aburch1 83:0d3572a8a851 64
Netaphous 64:8ada3e0b2048 65 if(currentElement < 0)
Netaphous 64:8ada3e0b2048 66 {
Netaphous 64:8ada3e0b2048 67 currentElement += maxSize;
Netaphous 64:8ada3e0b2048 68 }
aburch1 79:4e6b53eb678b 69
aburch1 79:4e6b53eb678b 70 char* ptr;
aburch1 83:0d3572a8a851 71
aburch1 83:0d3572a8a851 72 // Iterates through newest n measurements sending the data to be printed via the MessageLogger.
aburch1 83:0d3572a8a851 73 for(int i = 0; i < n; i++)
Netaphous 64:8ada3e0b2048 74 {
aburch1 79:4e6b53eb678b 75 ptr = array[currentElement].date.ToString();
aburch1 82:668b51a39148 76 snprintf(temp2, 256, "%i. %s, T: %f, H: %f, P: %f\n\r",i + 1,ptr , array[currentElement].temperature, array[currentElement].humidity, array[currentElement].pressure);
aburch1 81:996c0a3319b4 77 logger->SendMessage(temp2);
Netaphous 64:8ada3e0b2048 78 currentElement++;
Netaphous 64:8ada3e0b2048 79 currentElement = currentElement % maxSize;
Netaphous 64:8ada3e0b2048 80 }
Netaphous 64:8ada3e0b2048 81 }
aburch1 83:0d3572a8a851 82
aburch1 83:0d3572a8a851 83 /**
aburch1 83:0d3572a8a851 84 Calls readN to print all measurements that are held in the buffer so far.
aburch1 83:0d3572a8a851 85 */
Netaphous 65:3723d2729b68 86 void CircularArray::readAll()
Netaphous 64:8ada3e0b2048 87 {
aburch1 82:668b51a39148 88 logger->SendMessage("Printing all measurementss performed so far: \r\n");
aburch1 82:668b51a39148 89
aburch1 83:0d3572a8a851 90 readN(currentSize);
Netaphous 64:8ada3e0b2048 91 }
aburch1 83:0d3572a8a851 92
aburch1 83:0d3572a8a851 93 /**
aburch1 83:0d3572a8a851 94 Moves firstValue pointer n elements forward to allow old elements to be overwritten.
aburch1 83:0d3572a8a851 95
aburch1 83:0d3572a8a851 96 @param n : Number of elements to be removed.
aburch1 83:0d3572a8a851 97 */
aburch1 83:0d3572a8a851 98 void CircularArray::deleteN(int n)
Netaphous 64:8ada3e0b2048 99 {
aburch1 83:0d3572a8a851 100 if(n >= maxSize)
Netaphous 64:8ada3e0b2048 101 {
Netaphous 64:8ada3e0b2048 102 deleteAll();
Netaphous 64:8ada3e0b2048 103 }
Netaphous 64:8ada3e0b2048 104 else
Netaphous 64:8ada3e0b2048 105 {
aburch1 83:0d3572a8a851 106 firstValue += n;
aburch1 83:0d3572a8a851 107 currentSize -= n;
Netaphous 64:8ada3e0b2048 108 firstValue = firstValue % maxSize;
Netaphous 64:8ada3e0b2048 109 }
Netaphous 64:8ada3e0b2048 110 }
aburch1 83:0d3572a8a851 111
aburch1 83:0d3572a8a851 112 /**
aburch1 83:0d3572a8a851 113 Resets currently used size of the buffer to 0, allowing for new measurements to overwrite old measurements.
aburch1 83:0d3572a8a851 114 */
Netaphous 64:8ada3e0b2048 115 void CircularArray::deleteAll()
Netaphous 64:8ada3e0b2048 116 {
aburch1 82:668b51a39148 117 snprintf(temp2, 256, "Deleted %i records.", currentSize);
aburch1 82:668b51a39148 118 logger->SendMessage(temp2);
Netaphous 64:8ada3e0b2048 119 currentSize = 0;
aburch1 82:668b51a39148 120
Netaphous 64:8ada3e0b2048 121 }
aburch1 83:0d3572a8a851 122
aburch1 83:0d3572a8a851 123 /**
aburch1 83:0d3572a8a851 124 @return currentSize: The current number of elements used in the buffer.
aburch1 83:0d3572a8a851 125 */
Netaphous 64:8ada3e0b2048 126 int CircularArray::getSize()
Netaphous 64:8ada3e0b2048 127 {
Netaphous 64:8ada3e0b2048 128 return currentSize;
Netaphous 64:8ada3e0b2048 129 }
aburch1 83:0d3572a8a851 130
aburch1 83:0d3572a8a851 131 /**
aburch1 83:0d3572a8a851 132 Calculates the next available space in the buffer.
aburch1 83:0d3572a8a851 133
aburch1 83:0d3572a8a851 134 @return nextSpace : The index of the next available space.
aburch1 83:0d3572a8a851 135 */
Netaphous 64:8ada3e0b2048 136 int CircularArray::nextSpace()
Netaphous 64:8ada3e0b2048 137 {
Netaphous 64:8ada3e0b2048 138 int nextSpace = firstValue + currentSize;
Netaphous 64:8ada3e0b2048 139 nextSpace = nextSpace % maxSize;
Netaphous 64:8ada3e0b2048 140 return nextSpace;
Netaphous 64:8ada3e0b2048 141 }