/******************************************************************************
版权所有：	
文件名称：	factor.h
文件版本：	01.01
创建作者:	   sunxi
创建日期：	2013-05-20
功能说明：	通道参数处理。
其它说明：
修改记录：
*/
#ifndef _FACTOR_H
#define _FACTOR_H
/*------------------------------- 头文件 --------------------------------------
*/
#include "equ.h"


/*------------------------------- 宏定义 --------------------------------------
*/
#define ACFACTOR_FILE_VERSION	0X01010103	//文件版本

#define MAX_FACTOR 		1.5   	// 通道系数最大值
#define MIN_FACTOR 		0.5  	// 通道系数最小值
#define DEFAULT_FACTOR 	1.0 	// 通道系数默认值

#define MAX_PHASE 		10.0   	// 角度系数最大值
#define MIN_PHASE 		-10.0 	// 角度系数最小值
#define DEFAULT_PHASE	0.0 	// 角度系数默认值


/*------------------------------ 类型结构 -------------------------------------
*/
struct ac_slot_factor
{
	float factor_e_c[EQU_SLOT_AC_CHN];	// 幅值系数
	float factor_p_c[EQU_SLOT_AC_CHN];
	// 角度系统
#ifdef PROTECT_AC_ADJUST
	float factor_p_e_c[EQU_SLOT_AC_CHN];	// 保护幅值系数
#endif
	float pq_factor[EQU_SLOT_AC_CHN][2];// PQ系数
	float temp;							// 校准温度
};

//系数文件头，16bytes
struct acfactor_file_head
{
	u32	signature;	//文件签名
	u32	version;	//文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};

struct acfactor_file_head_data
{
	// 文件头
	struct acfactor_file_head cfh;		

	u8  auth_id[AUTH_ID_LEN];//比对flash的唯一ID号，以保证校准文件与板卡的对应
	u16 base_v;		// 最后一次校准的基准电压
	u16 base_i;		// 最后一次校准的基准电流
	u16	addr;		//起始地址
	u16	num;		//存储总量
};

/*------------------------------ 函数声明 -------------------------------------
*/
extern u32 g_factor_version;
extern const float g_e_k_ECVT[EQU_SCALE_NUM];

int factor_init(void);
int factor_exit(void);

int factor_read(u32 index,struct ac_slot_factor *asf);
int factor_write(u32 index,struct ac_slot_factor *asf);
int factor_write_all(u16 base_v,u16 base_i);
int factor_write_board(u32 board,struct ac_slot_factor *asf);
int factor_get_default(struct ac_slot_factor *asf);
int factor_restore_default(void);

int factor_e_c_get(u32 slot,u32 index,float *f);
int factor_e_c_set(u32 slot,u32 index,float f);
int factor_p_c_get(u32 slot,u32 index,float *f);
int factor_p_c_set(u32 slot,u32 index,float f);

#ifdef PROTECT_AC_ADJUST
int factor_p_e_c_get(u32 slot,u32 index,float *f);
int factor_p_e_c_set(u32 slot,u32 index,float f);
#endif

int factor_pq_get(u32 slot,u32 index,float *f);
int factor_pq_set(u32 slot,u32 index,float *f);

float factor_e_k(u32 index);
float factor_p_k(u32 index);
float factor_e_ps(u32 index);

int factor_temp_get(int slot,float *temp);
int factor_temp_set(int slot,float temp);

int factor_printf(void);

#endif//
//========================== 本文件结束 =============================

