Skip to content
Snippets Groups Projects
icbm.ino 1.52 KiB
Newer Older
Cyril Danilevski's avatar
Cyril Danilevski committed
#include "esp32_ethernet.hpp"
Cyril Danilevski's avatar
Cyril Danilevski committed
#include "mpod.hpp"
#include "pins.hpp"
Cyril Danilevski's avatar
Cyril Danilevski committed
#include "rest.hpp"
Cyril Danilevski's avatar
Cyril Danilevski committed

unsigned long start;
extern bool eth_connected;
Cyril Danilevski's avatar
Cyril Danilevski committed
extern SNMP::Manager snmp;
Cyril Danilevski's avatar
Cyril Danilevski committed

TaskHandle_t restServerTask;
TaskHandle_t powerProcedureTask;

Cyril Danilevski's avatar
Cyril Danilevski committed
void setup() {
    Serial.begin(115200);
    initializeMCP();
Cyril Danilevski's avatar
Cyril Danilevski committed
    initializeNetwork();
    initializeRoutes();
Cyril Danilevski's avatar
Cyril Danilevski committed
    initializeSNMP();
    // Poll port expander to initialize the PINS struct.
    poll_port_expander();
    PINS.last_triggered = millis();
    PINS.stage = "";
    PINS.ramping = false;

    xTaskCreatePinnedToCore(webInterfaceLoop, "Web Interface", 10000, NULL, 1, &restServerTask, 0);

    xTaskCreatePinnedToCore(mainLoop, "PowerProcedure Task", 10000, NULL, 1, &powerProcedureTask,
                            1);
Cyril Danilevski's avatar
Cyril Danilevski committed
}

enum {
    NONE,
    ON,
    OFF,
};

Cyril Danilevski's avatar
Cyril Danilevski committed
    if (millis() - start >= 1000) {
        start = millis();
        Serial.print(eth_connected ? "." : "-");
Cyril Danilevski's avatar
Cyril Danilevski committed
    }
void webInterfaceLoop(void* pvParameters) {
    Serial.print("Web loop running on core ");
    Serial.println(xPortGetCoreID());
    while (true) {
        restServer.handleClient();
Cyril Danilevski's avatar
Cyril Danilevski committed
}

void mainLoop(void* pvParameters) {
    Serial.print("main loop running on core ");
    Serial.println(xPortGetCoreID());
    while (true) {
        isr_check_loop();
        snmp.loop();
        toggle_status_led();
        serialLoop();
        if (eth_connected) {  // We may be triggered, but disconnected from the network.
            powerOffCheckLoop();
        }
    }
}

void loop() {}