diff --git a/lib/BleFingerprint/BleFingerprint.h b/lib/BleFingerprint/BleFingerprint.h index eb59ad1..27505ac 100644 --- a/lib/BleFingerprint/BleFingerprint.h +++ b/lib/BleFingerprint/BleFingerprint.h @@ -25,7 +25,7 @@ public: void setDistance(float distFl); NimBLEAddress getAddress() { return address; } - void setAddress(NimBLEAddress newAddr) { address = newAddr; } + long getLastSeen() { return lastSeenMicros; }; private: bool hasValue = false, enroll = false, reported = false; diff --git a/src/main.cpp b/src/main.cpp index f6dcf9c..d96b09f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,8 +12,19 @@ BleFingerprint *getFingerprintInternal(BLEAdvertisedDevice *advertisedDevice) if (fingerprints.size() >= MAX_MAC_ADDRESSES) { - delete fingerprints.back(); - fingerprints.pop_back(); + long oldestTime = LONG_MAX; + BleFingerprint *oldest; + for (auto it = fingerprints.begin(); it != fingerprints.end(); ++it) + { + long time = (*it)->getLastSeen(); + if (time < oldestTime) + { + oldestTime = time; + oldest = (*it); + } + } + fingerprints.remove(oldest); + delete oldest; } auto created = new BleFingerprint(advertisedDevice);