make configuratable through defs, fix bug with switch off
Signed-off-by: dragonchaser <christian@boltares.de>
This commit is contained in:
@@ -7,8 +7,6 @@
|
||||
#include <mutex>
|
||||
|
||||
// Methods
|
||||
CRGB BlendCRGB(CRGB a, CRGB b, uint8_t blendAmount);
|
||||
|
||||
uint64_t StrToHex(const char* str);
|
||||
|
||||
void CleanDatabase();
|
||||
@@ -45,20 +43,55 @@ void UpdatePalette();
|
||||
// CONSTS
|
||||
const std::map<String, String> overrideColors = {
|
||||
{"36E898", "FF0000"}, // MiiBand Klaas
|
||||
{"0C873F", "00FF00"}, // Tester 1
|
||||
{"D050CF", "0000FF"}, // Tester 2
|
||||
};
|
||||
|
||||
const std::map<String, void*> blackList = {
|
||||
//{ "36E898", nullptr },
|
||||
};
|
||||
|
||||
#define PUBLIC_LAMP 1
|
||||
#define PRIVATE_LAMP 2
|
||||
#define AMULETT 3
|
||||
|
||||
#define DEVICE_TYPE PUBLIC_LAMP
|
||||
|
||||
#ifndef DEVICE_TYPE
|
||||
// WE DO NOT HAVE A DEVICETYPE, so we do not have any variables here
|
||||
// to make sure the code compile fails
|
||||
#error "DEVICE_TYPE is not defined"
|
||||
|
||||
#elif DEVICE_TYPE == PUBLIC_LAMP
|
||||
// This is a PUBLIC LAMP, no restrictions here
|
||||
// Does not have a vibration motor
|
||||
static const bool useVibro = false;
|
||||
// WARNING: IF THIS LIST CONTAINS > 0 VALUES, NO OTHER DEVICES WILL BE ALLOWED
|
||||
// IF THIS LIST IS EMPTY IT WILL NOT BE USED
|
||||
const std::map<String, void*> whiteList = {
|
||||
//{ "36E898", nullptr },
|
||||
static const std::map<String, void*> whiteList = {};
|
||||
|
||||
#elif DEVICE_TYPE == PRIVATE_LAMP
|
||||
// This is a PRIVATE LAMP, restricted to a list of users
|
||||
// Does not have a vibration motor
|
||||
static const bool useVibro = false;
|
||||
// WARNING: IF THIS LIST CONTAINS > 0 VALUES, NO OTHER DEVICES WILL BE ALLOWED
|
||||
// IF THIS LIST IS EMPTY IT WILL NOT BE USED
|
||||
static const std::map<String, void*> whiteList = {
|
||||
{ "36E898", nullptr },
|
||||
};
|
||||
|
||||
#elif DEVICE_TYPE == AMULETT
|
||||
// This is an portable device, restricted to a list of users
|
||||
// Comes with a vibration motor to alert wearer
|
||||
static const bool useVibro = true;
|
||||
// WARNING: IF THIS LIST CONTAINS > 0 VALUES, NO OTHER DEVICES WILL BE ALLOWED
|
||||
// IF THIS LIST IS EMPTY IT WILL NOT BE USED
|
||||
static const std::map<String, void*> whiteList = {
|
||||
{ "36E898", nullptr },
|
||||
};
|
||||
|
||||
#else
|
||||
#error "Unknown DEVICE_TYPE"
|
||||
#endif
|
||||
|
||||
// VARIABLES
|
||||
BLEScan *pBLEScan;
|
||||
|
||||
@@ -167,15 +200,6 @@ void loop() {
|
||||
FastLED.delay(1000/LED_FRAMES_PER_SECOND);
|
||||
}
|
||||
|
||||
// Blends two CRGB colors using a uint8_t blend amount (0-255)
|
||||
CRGB BlendCRGB(CRGB a, CRGB b, uint8_t blendAmount) {
|
||||
CRGB result;
|
||||
result.r = lerp8by8(a.r, b.r, blendAmount);
|
||||
result.g = lerp8by8(a.g, b.g, blendAmount);
|
||||
result.b = lerp8by8(a.b, b.b, blendAmount);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Converts a string to a 64bit HEX value
|
||||
uint64_t StrToHex(const char* str) {
|
||||
return (uint64_t) strtoull(str, 0, 16);
|
||||
@@ -196,7 +220,7 @@ void CleanDatabase() {
|
||||
deviceDatabase.erase(itr);
|
||||
Serial.printf("Have not seen %s for %d ticks, removing!\n", itr, MAX_VANISH_COUNTER);
|
||||
}
|
||||
if (!keys.empty()) {
|
||||
if (!keys.empty() || deviceDatabase.size() < 1) {
|
||||
// there are changes to the database, we need to update the palette
|
||||
UpdatePalette();
|
||||
}
|
||||
@@ -212,13 +236,17 @@ void FillLEDsFromPaletteColors( uint8_t colorIndex) {
|
||||
// Updates the palette using module to create a repeated fillpatern of all detected devices using the lower 24bits of the btle address
|
||||
void UpdatePalette() {
|
||||
std::lock_guard<std::mutex> lock(blendMutex);
|
||||
String colors[MAX_MONITOR_DEVICES];
|
||||
std::vector<String> colors;
|
||||
|
||||
int numColors = deviceDatabase.size();
|
||||
int pos = 0 ;
|
||||
for (auto itr: deviceDatabase) {
|
||||
colors[pos++] = itr.first;
|
||||
colors.push_back(itr.first);
|
||||
}
|
||||
if (deviceDatabase.size() > 0 ) {
|
||||
|
||||
if (colors.empty()) {
|
||||
fill_solid(pal.entries, 256, CRGB::Black);
|
||||
} else {
|
||||
for (int i=0; i<256; i++) {
|
||||
pal[i] = CRGB(StrToHex(colors[ i % deviceDatabase.size() ].c_str()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user