
#ifndef __PARAS_H__
#define	__PARAS_H__

#include "config.h"

#ifndef USE_SMEC
#define USE_SMEC		0		// 0:不使用加密芯片
								// 1:使用加密芯片(使用加密芯片每次读写参数会增加30ms)
#endif

//---------------------------------
// FRAM地址划分

// 共8K字节

// 256字节 分期付款密码存储
// 256字节 nvpara
// 512字节 预留

// 1K字节 机器参数
// 1K字节 工作参数

// 1K字节 动框角度

#define	ENC_ADDR		0x0000		// 256字节
#define	NVPARA_ADDR		0x0100		// 256字节
#define REV_ADDR		0x0200		// 512字节

#define	MCPARA_ADDR		0x0400		// 机器参数,1K
#define	WKPARA_ADDR		0x0800		// 工作参数,1K

#define	ANGPARA_ADDR	0x0C00		// 动框起始角度

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

// 参数类型
#define PTYPE_U		0	// 无符号数
#define PTYPE_S		1	// 有符号数
#define PTYPE_B		2	// 位图

#define	PARA_NUM		256
#define	PARA_STR_LEN	30

#define	PARA_MC_VALID		0x00005500
#define	PARA_WK_VALID		0x000000AA

#define	PARA_VALID		(PARA_MC_VALID|PARA_WK_VALID)

//---------------------------------
//
#define MAX_HOR		12		// 横,下标2最大值,针步
#define	MAX_VER		21		// 竖,下标1最大值,转速

typedef struct
{
	u32 buf[PARA_NUM];
}  __attribute__ ((packed)) ParaStruct;

//--------------------------------------------------------------
// 贴布绣(按针)
typedef struct
{
	u32 dataidx;	// 数据索引
	u16 mvmnt;		// 移动位移量
}  __attribute__ ((packed)) Patch;

#define PATCH_DATA_NUM		10			// 支持设定的个数

typedef struct
{
	Patch patch[PATCH_DATA_NUM];
}  __attribute__ ((packed)) PatchData;

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

#ifdef _IN_PARAS_C

ParaStruct g_mcPara;
ParaStruct g_wkPara;

ParaStruct g_angPara;

PatchData g_patchData;

#else

extern ParaStruct g_mcPara;		// 机器参数
extern ParaStruct g_wkPara;		// 工作参数

extern ParaStruct g_angPara;	// 起始动框角度参数

extern PatchData g_patchData;	// 贴布绣数据,按针

#endif

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

void InitParas(void);

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

void SaveMcPara(void);
void SaveWkPara(void);

void SaveAngPara(void);

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

void CheckMcParaRange(void);
void CheckAMcParaRange(int id);

void CheckWkParaRange(void);
void CheckAWkParaRange(int id);

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

void WriteDefMcPara(void);
void WriteDefWkPara(void);

void WriteDefMvAngPara(void);

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

void SetMcParaNameString(void* pDat);
void SetWkParaNameString(void* pDat);

void SetMcParaList(void * pDat);
void SetWkParaList(void * pDat);
void SetDefAngParaList(void * pDat);

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

u32 GetAMcPara(int id);
void SetAMcPara(int id, u32 val);

u32 GetAWkPara(int id);
void SetAWkPara(int id, u32 val);

void SetAAnglePara(int id, u16 val);

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


#endif


