platform: auto-register figments, now that we have json config
This commit is contained in:
parent
c351621d9d
commit
eb4ff37580
@ -140,7 +140,11 @@ Platform::bootSplash()
|
||||
Log.trace("Registered tasks:");
|
||||
auto it = beginTasks();
|
||||
while (it != endTasks()) {
|
||||
Log.trace((*it)->name);
|
||||
if ((*it)->isFigment()) {
|
||||
Log.trace(" Figment: %s", (*it)->name);
|
||||
} else {
|
||||
Log.trace(" %s", (*it)->name);
|
||||
}
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +54,29 @@ class Platform : public Task {
|
||||
}
|
||||
}
|
||||
|
||||
struct figment_iterator: public std::iterator<std::input_iterator_tag, Figment*> {
|
||||
TaskRegistration* cur;
|
||||
explicit figment_iterator() : cur(NULL) {}
|
||||
explicit figment_iterator(TaskRegistration* head) : cur(head) {
|
||||
while (cur && !cur->task->isFigment()) {
|
||||
cur = cur->next;
|
||||
}
|
||||
}
|
||||
figment_iterator& operator++() {
|
||||
if (cur) {
|
||||
do {
|
||||
cur = cur->next;
|
||||
} while (cur && !cur->task->isFigment());
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
figment_iterator operator++(int) {figment_iterator ret = *this; ++(*this); return ret;}
|
||||
bool operator==(figment_iterator other) const { return cur == other.cur; }
|
||||
bool operator!=(figment_iterator other) const { return !(*this == other); }
|
||||
Figment* operator*() const { return static_cast<Figment*>(cur->task); }
|
||||
};
|
||||
|
||||
struct task_iterator: public std::iterator<std::input_iterator_tag, Task*> {
|
||||
TaskRegistration* cur;
|
||||
explicit task_iterator() : cur(NULL) {}
|
||||
@ -71,6 +94,14 @@ class Platform : public Task {
|
||||
Task* operator*() const { return cur->task; }
|
||||
};
|
||||
|
||||
static figment_iterator beginFigments() {
|
||||
return figment_iterator(firstTask);
|
||||
}
|
||||
|
||||
static figment_iterator endFigments() {
|
||||
return figment_iterator(NULL);
|
||||
}
|
||||
|
||||
static task_iterator beginTasks() {
|
||||
return task_iterator(firstTask);
|
||||
}
|
||||
|
23
src/main.cpp
23
src/main.cpp
@ -154,22 +154,6 @@ private:
|
||||
STATIC_ALLOC(BPM);
|
||||
STATIC_TASK(BPM);
|
||||
|
||||
// Render all layers to the displays
|
||||
Renderer renderer{
|
||||
{&dpy},
|
||||
{
|
||||
Static<ChimesAnimation>::instance(),
|
||||
Static<DrainAnimation>::instance(),
|
||||
Static<SolidAnimation>::instance(),
|
||||
Static<Flashlight>::instance(),
|
||||
Static<UpdateStatus>::instance(),
|
||||
&inputBlip,
|
||||
&power,
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TASK(renderer);
|
||||
|
||||
Renderer configRenderer{
|
||||
{&dpy},
|
||||
{Static<DrainAnimation>::instance(), /*&configDisplay,*/ Static<InputBlip>::instance(), &power}
|
||||
@ -460,7 +444,6 @@ void setup() {
|
||||
|
||||
Log.notice(u8"💡 Starting FastLED...");
|
||||
Platform::addLEDs(leds, HardwareConfig::MAX_LED_NUM);
|
||||
runner = new MainLoop{std::vector<Task*>{Platform::beginTasks(), Platform::endTasks()}};
|
||||
|
||||
// Tune in,
|
||||
if (Platform::bootopts.isSafeMode) {
|
||||
@ -473,6 +456,12 @@ void setup() {
|
||||
//runner = &configApp;
|
||||
} else {
|
||||
Log.notice(u8"🌌 Starting Figment...");
|
||||
// Render all layers to the displays
|
||||
Renderer* renderer = new Renderer({&dpy}, std::vector<Figment*>{Platform::beginFigments(), Platform::endFigments()});
|
||||
|
||||
std::vector<Task*> defaultTasks{Platform::beginTasks(), Platform::endTasks()};
|
||||
defaultTasks.push_back(renderer);
|
||||
runner = new MainLoop{std::vector<Task*>{defaultTasks.begin(), defaultTasks.end()}};
|
||||
}
|
||||
Serial.flush();
|
||||
runner->start();
|
||||
|
Loading…
Reference in New Issue
Block a user