#ifndef __PLSR_H__
#define __PLSR_H__

#include "stdint.h"


/* 结构体定义，每段脉冲的参数 */
typedef struct
{
    uint32_t Frequency ; ///<< 脉冲的频率 
    int32_t PulseCount;  ///<< 脉冲的总数 
    int8_t NextPulse;    ///<< 下一段脉冲是第几个 ， 若为0代表默认下一个脉冲
	uint8_t EXT;         ///<< EXT
} Pulse;

typedef struct
{
	uint8_t SentPost;      ///<<脉冲发送端子
	uint8_t DirPost;       ///<<脉冲方向端子
	uint8_t EXT;           ///<<EXT信号
	uint8_t DirDelay;      ///<<脉冲方向延时时间
	uint8_t Dir;           ///<<脉冲方向逻辑(逻辑正0，逻辑反1)
	uint8_t AccMod;        ///<<脉冲加减速模式
	uint8_t RunMod;        ///<<运行模式(相对0，绝对1)
	uint8_t AllPulse;      ///<<脉冲总段数
	uint8_t StartPulse;    ///<<起始执行段数
	uint32_t InitSpeed;    ///<<脉冲默认速度
	uint16_t AccUpTime;     ///<<脉冲默认速度加速时间
	uint16_t AccDownTime;   ///<<脉冲默认速度减速时间
} Option;

/* 变量声明 */
extern Pulse PulseOutput[10];
extern Option Options;

extern uint8_t NowPulse;    ///<<  当前处于第几段脉冲 
extern uint8_t PrePulse;    ///<<  之前处于第几段脉冲
extern uint8_t PulseNum;    ///<< 一共有多少段脉冲(中断内使用)
extern int32_t MAX_Pulse;   ///<< 最多的脉冲数 
extern int32_t AccUpCount;  ///<<加速脉冲数
extern int32_t AccDownCount;///<<减速脉冲数
extern int32_t NowMAXPulse; ///<<当前要达到的总脉冲
extern int32_t PulseCount;
extern uint32_t NowFrequency;
extern int32_t NextPulseEND;


/* 函数声明 */
void SetFrequency(uint8_t SentPost, uint32_t Frequency);
void PulseStart(void);
float GetAcc(int32_t Start, int32_t End, int32_t AccCount);
void SetNextPulse(void);
void PLSROptionLoad(void);
void PLSRPluseLoad(void);
void CountSave(void);
void GetAddCount(void);


#endif