/*
 * WESPION_App.h
 *
 *  Revised on: Dec 16, 2023
 *      Author: HwangSungWoo
 */

#ifndef INC_WESPION_APP_H_
#define INC_WESPION_APP_H_

/* Private includes */

/* USER Private includes */

/* USER Private defines */

/* USER Private extern function */

// WESPION_App.c
extern void WeightManager(void);
extern void WeightController(int side);
extern void DirectionDetector(int side);
extern void FfScaleChanger (int side, float FfScale_Target);
extern void WeightOnOff (int side);
extern void WeightBLEtoSetTask(float step);
extern void AutoWeight(void);
extern void ConvAng2Pos (void);
extern void ConvAng2Pos_HIL(void);
extern void PositionCalibrate (uint8_t side);

extern void SetWeight(uint8_t weight_L, uint8_t mode_L, uint8_t weight_R, uint8_t mode_R);

extern void SetRange(uint8_t side, uint8_t Point);
extern void SetRangeDigit(uint8_t side, uint8_t Point, uint16_t Position);

extern void Init_Encoder_v3(void);
// Protocol.c
extern void Return_LineEnding(void);

/* USER Private extern variables */
extern WP_EncInitTypeDef WP_EncInit;
extern WP_ForcedCaliTypeDef WP_ForcedCali;
extern WP_MachineTypeDef WP_Machine;
extern WP_GymTypeDef WP_Gym;
extern WP_WeightTypeDef WP_Weight;
extern WP_UserSettingTypeDef WP_UserSetting;
extern WP_RegenRTypeDef WP_RegenR;
extern WP_DeratingTypeDef WP_Derating;
extern WP_LEDCtrlTypeDef WP_LEDCtrl;

extern float TargetIq[2];

//  enum list
extern WP_WeightMode WeightMode;
extern WP_MotorSide MotorSide;
extern WP_DirStatus DirStatus;


extern int Status_DropRelease;
extern int cnt_DropRelease;
extern int cnt_DropReleaseLED;
extern void DropRelease (void);

extern int Cnt_PullWeightOn;
extern int Time_PullWeightOn;
extern int Status_PullWeightOn;
extern float PullWeightOnSpd;
extern void PullWeightOn (void);

extern int Status_MotionAutoWeight;
extern float Spd_PullAutoOn;
extern float Spd_DropAutoOff;
extern float Spd_StopAutoOff;
extern int Cnt_MotionAutoWeight;
extern int Time_PullAutoOn;
extern int Time_DropAutoOff;
extern int Time_StopAutoOff;
extern int Temp_OnOffStatus;
extern void MotionAutoWeight (void);
extern int check_MotionAutoWeight;
extern void ClampEccWeight(uint8_t side);
extern void ISR_DeferredNotify(void);    // 스케줄러(5ms)에서 호출 — ISR 지연 알림 처리
extern ISR_DeferredTypeDef ISR_Deferred; // ISR → 스케줄러 플래그
extern ISR_ProfileTypeDef ISR_Profile;   // ISR 수행시간 프로파일링
extern void ISR_Profile_Init(void);      // DWT 초기화
extern void ISR_Profile_Reset(void);     // max/avg 리셋
extern void Return_Debug_Report(void);   // BLE 디버그 리포트 (1초 주기)
extern uint8_t Debug_Report_Active;      // 디버그 리포트 활성화 플래그
//extern uint32_t SetRangeTemp[3];
extern int Active_ForcedCalib;
extern int ReStart_ForcedCalib;
extern int cnt_LED_EncInit, cnt_LED_EncInit_Err, cnt_LED_Calib, cnt_LED_Calib_Err;

#endif /* INC_WESPION_APP_H_ */
