#include "ImpedanceControl.h"
#include <Arduino.h>

ImpedanceControl::ImpedanceControl() {
    k_sel = ks1;
    x = 0;
    x0 = 0;
    prev_x = 0;
    torque = 0;
}

ImpedanceControl::~ImpedanceControl() { }

void ImpedanceControl::setSpringConst(int kc) {
    // Default value is ks0
    if (kc == 1) {
        k_sel = ks1;
    } else if (kc == 2) {
        k_sel = ks2;
    } else {
        k_sel = ks0;
    }
}

void ImpedanceControl::setSpringZeroPos(int kc) {
    // Default value is zero0
    if (kc == 1) {
        x0 = zero1;
    } else {
        x0 = zero0;
    }
}

float ImpedanceControl::getSpringConst() {
    return k_sel;
}

float ImpedanceControl::getSpringZeroPos() {
    return x0;
}

void ImpedanceControl::impedanceControllerUpdate(float x_, float dt) {
    float delta_x = 0;

    x = x_;
    delta_x = x - x0;
    v = (x - prev_x)/dt; // delta_x in rads and dt in sec
    a = (v - prev_v)/dt;
    torque = delta_x*k_sel + dampener*v + mass*a;
    
    /* if (delta_x > 0) { */
        /* v = (x - prev_x)/dt; // delta_x in rads and dt in sec */
        /* torque = dampener*v + delta_x*k_sel; */
    /* } else { */
    /*     v = 0; */
    /*     torque = 0; */
    /* } */
    prev_x = x;
    prev_v = v;
}

float ImpedanceControl::getDesiredTorque() {
    return torque;
}