#pragma once

#include "main.h"
#include "bsp/can.h"
#include "device/motor.h"
#include "device/motor_rm.h"
#include "component/pid.h"

typedef struct
{
    float m1;
    float m2;
    float m3;
    float m4;
} motor_speed_t;

class Chassis {
public:
    Chassis();
    void init();
    void operator()();
private:
    void update_motors();
    void calc_chassis();
    void calc_pid();
    void send_control();
    KPID_t pid[4];
    KPID_Params_t pid_params[4];
    motor_speed_t target_speed = {0};
    MOTOR_RM_Param_t motors_param[4];
    MOTOR_RM_t chassis_motors[4];
    float pid_output[4] = {0};
    uint64_t time = 0;
    uint64_t last_time = 0;
    uint64_t dt = 0;
};

