#include "servo.h"


void ServoController::initServos() {
    HrzSrv.attach(12,  500, 2500);
    delay(50); // Espera 50ms para o motor se mover
    VrtSrv.attach(13,  500, 2500);
}

void ServoController::initMag() {
    while (!mag.begin()) {
        WebMonitor.println("ERRO: Não foi possível iniciar o magnetometro.");
        WebMonitor.println("Tentando novamente em 500ms");
        delay(500);
    }

    if (mag.isQMC()) {
        WebMonitor.println("Iniciando magnetometro QMC5883L");
        
        mag.setRange(QMC5883_RANGE_8GA);
        WebMonitor.print("Range: ");
        WebMonitor.println(mag.getRange());

        mag.setMeasurementMode(QMC5883_CONTINOUS);
        WebMonitor.print("Modo de leitura: ");
        WebMonitor.println(mag.getMeasurementMode());

        mag.setDataRate(QMC5883_DATARATE_200HZ);
        WebMonitor.print("Velocidade: ");
        WebMonitor.println(mag.getDataRate());

        mag.setSamples(QMC5883_SAMPLES_8);
        WebMonitor.print("Sample: ");
        WebMonitor.println(mag.getSamples());

        mag.setDeclinationAngle(DECLINATION);
        WebMonitor.print("Declinação: ");
        WebMonitor.println(DECLINATION);
    } else {
        WebMonitor.println("ERRO: Magnetometro encontrado não é suportado.");
        WebMonitor.println("Suspendendo operação.");
        while (true);
    }
}

void ServoController::updateHeading() {
    mag.getHeadingDegrees();
    sVector_t raw = mag.readRaw();
    float tmp = raw.HeadingDegress;
    
    headingBuffer[bufferPos++] = tmp;
    if (bufferPos > HEADING_BUFFER_LENGTH) {
        bufferPos = 0;
    }

    headingDegrees = 0;
    for (byte i = 0; i < HEADING_BUFFER_LENGTH; i++) {
        headingDegrees += headingBuffer[i];
    }
    headingDegrees /= HEADING_BUFFER_LENGTH;
}

void ServoController::moveToAzAlt() {

}

void ServoController::moveToRADec() {

}
