

#ifndef __DRIVERPARAS_H__
#define	__DRIVERPARAS_H__

#include "config.h"

#define	DRIVER_PARA_ST		0
#define	DRIVER_PARA_NOR		1

#ifndef DRIVER_PARA
#define	DRIVER_PARA		DRIVER_PARA_NOR
#endif


#if (DRIVERS_NUM > 0)

#if (DRIVER_PARA == DRIVER_PARA_NOR)
#include "norparas.h"
#define DRV_PARA_NUMS		PARA_NUM_PER_BLK
#define DRV_PARA_STR_LEN	PARA_STR_LEN
#else

#define DRV_PARA_NUMS		64
#define DRV_PARA_STR_LEN	30

#endif


#define	CTRLMODE_OPEN	0
#define	CTRLMODE_CLOSE	1

typedef struct
{
	// 0
	int closeCtrlMode;		// 开闭环模式
	int cmdSource;			// 命令来源, 0 内部命令; 1, 外部脉冲;
	int stepPerCircle;		// 每圈脉冲数

	// 3
	int openRunCircle;		// 开环运行电流
	int openLockCircle;		// 开环锁定电流
	int openMaxOffset;		// 开环最大偏移限制

	// 6
	s32 maxSpeed;			// 最高转速限制, 单位: 可控位置个数/控制周期

	// 7
	int closeAdjust;		// 闭环磁场修正
	int closeCircle;		// 闭环电流比例

	// 9
	int maxAdvance;			// 最大控制偏差

	// 10
	// 闭环位置控制pid
	int kp;					// 位置环比例增益 范围(0--1000), 	默认 500
	int ki;					// 位置环积分增益 范围(0--1000),	默认 20
	int kd;					// 位置环微分增益 范围(0--1000),	默认 800

	// 13
	int ecdAdjust;			// 编码器较准

	// 14
	u32 startPPS;			// 启动速度
	u32 runPPS;				// 运行速度
	u32 addPPSS;			// 加速度
	u32 brkPPSS;			// 刹车速度

	// 18
	u32	numerator;			// 电子齿轮分子
	u32	denominator;		// 电子齿轮分母

	// 20
	u32 basecircle;			// 闭环最小电流

	// 21
	u32 rev[DRV_PARA_NUMS-21];
}DriverPara;

#ifdef _IN_DRIVERPARAS_C

// 默认参数表
static const u32 g_defDriverParaList[DRV_PARA_NUMS][3] =
{
//	最小		最大		默认
// 0
	{0, 	1, 		0	}	, // int closeCtrlMode;		// 开闭环模式
	{0, 	1, 		0	}	, // int cmdSource;			// 命令来源, 0 内部命令; 1, 外部脉冲;
	{100,	204800,	4000}	, // int stepPerCircle;		// 每圈脉冲数

	// 3
	{1,		320,	200	}	, // int openRunCircle;		// 开环运行电流
	{0,		320,	0	}	, // int openLockCircle;	// 开环锁定电流
	{1,		1000,	200	}	, // int openMaxOffset;		// 开环最大偏移限制

	// 6
	{1,		10000,	4000}	, // s32 maxSpeed;			// 最高转速限制, 单位: 可控位置个数/控制周期

	// 7
	{0,		0,		0	}	, // int closeAdjust;		// 闭环磁场修正
	{1,		1000,	100	}	, // int closeCircle;		// 闭环电流比例
	{1,		1200,	1200}	, // int maxAdvance;		// 最大控制偏差

	// 10
	// 闭环控制pid
	{0,		1000,	400	}	, // int kp;				// 位置环比例增益 范围(0--1000), 	默认 400
	{0,		1000,	20	}	, // int ki;				// 位置环积分增益 范围(0--1000),	默认 20
	{0,		1000,	800	}	, // int kd;				// 位置环微分增益 范围(0--1000),	默认 800

	// 13
	{0,		0,		0	}	, // int ecdAdjust;			// 编码器较准

	// 14
	{1,		10000,		1000	}	, // u32 startPPS;			// 启动速度
	{1,		200000,		40000	}	, // u32 runPPS;			// 运行速度
	{1,		40000,		100		}	, // u32 addPPSS;			// 加速度
	{1,		40000,		10000	}	, // u32 brkPPSS;			// 刹车速度

	// 18
	{100,	204800,	4000}	, // u32 numerator;			// 电子齿轮分子
	{1,		204800,	1	}	, // u32 denominator;		// 电子齿轮分母

	// 20
	{0,		50,		0	},		// 闭环最小电流
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},

	// 32
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
	{0,		0,		0	},
};

static const char g_driverParaStrList[DRV_PARA_NUMS][DRV_PARA_STR_LEN] =
{
	"开闭环模式; 0开环; 1, 闭环;",
	"命令来源, 0 内部; 1, 外部;",
	"每圈脉冲数",
	"开环运行电流",
	"开环锁定电流",
	"开环最大控制偏差",
	"最高转速限制",
	"闭环磁场修正",
	"闭环电流比例",
	"闭环最大控制偏差",
	"位置环比例增益(0--1000)",
	"位置环积分增益(0--1000)",
	"位置环微分增益(0--1000)",
	"编码器较准，默认0",
	"启动速度",
	"运行速度",
	"加速度",
	"刹车速度",
	"电子齿轮分子",
	"电子齿轮分母",

	// 20
	"闭环最小电流(0-50)",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
// 32
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
};

#endif

//-----------------------

void InitDriverParas(void);

DriverPara * GetDriverParas(int didx);
void SaveDriverParas(int didx);

const char * GetDriverParaName(int pidx);

//-----------------------

#endif

//-----------------------

#endif
