#ifndef __MOTOR_H
#define __MOTOR_H

#include "main.h"

#define MAX_PWM_DUTY              1049
#define PWM_LIMIT                 1000

#define ENCODER_RESOLUTION        11.0f
#define REDUCTION_RATIO           90.0f
#define PULSES_PER_REV            (ENCODER_RESOLUTION * 4.0f * REDUCTION_RATIO)

/* 控制循环 5ms，但速度估计窗口取 2 个采样点 => 10ms */
#define MOTOR_SPEED_WINDOW_SAMPLES 2U

typedef enum {
  MOTOR_FL = 0,
  MOTOR_RL,
  MOTOR_FR,
  MOTOR_RR
} Motor_ID_t;

void Motor_Init(void);
void Set_Motor_Output(Motor_ID_t id, int16_t control_out);
void Motor_Brake_All(void);

/* 外部仍按 5ms 调用；内部会按滚动窗口更新速度估计 */
void Motor_Update_RPM(float dt_s);
float Get_Motor_RPM(Motor_ID_t id);
void Motor_Get_And_Clear_Delta_Ticks(int16_t* d_fl, int16_t* d_rl, int16_t* d_fr, int16_t* d_rr);

#endif /* __MOTOR_H */
