// Hard.h: interface for the CHard class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HARD_H__0825ABE2_BBFA_4220_9826_6FCBBDB4BA92__INCLUDED_)
#define AFX_HARD_H__0825ABE2_BBFA_4220_9826_6FCBBDB4BA92__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
struct  CH
{
	UCHAR m_nLeverPos;//通道位置 (0 ~ 255) 0是在屏幕最下 255最上
	WORD* m_pSrcData;//从硬件读上来的数据(0 ~ 255)
	short* m_pDisData;//读取的数据m_pSrcData减去零电平的位置(-255 ~ 255)计算电压用这个
	bool bCHEnable ;//通道使能
	UCHAR nCHVoltDIV;//电压档位！！！注意电压档是离散的也就说 只有粗调没有细调
	UCHAR nCHCoupling ;//通道耦合 直流交流
	bool bCHBWLimit ;//硬件20M带宽限制是否打开，这个主要为了降噪 当被测信号无20MHz以上分量时建议打开
	COLORREF clrRGB;//通道颜色
};


class CHard  
{
public:
	CHard();
	virtual ~CHard();
//Attributes
public:
	float m_fVoltDiv[20];
	double m_dbSampleRate;
	ULONG  m_nBufferLen;//每个通道点数
	ULONG  m_nReadLen;	//每个通道读上来的数据点数必须<=m_nBufferLen
	
	USHORT m_nDeviceIndex;//设备索引值标识符
	CH  m_ch[MAX_CH_NUM];//通道信息
	USHORT m_nTimeDIV;//
	BOOL m_bCollect;
	WORD m_nTriggerHorPos;//水平触发位置 0-100  其实就是百分比 比如 50 50/100=0.5 表示在中央
	WORD m_nTriggerVePos;//垂直触发位置 0-255 其实就是百分比 比如 64 50/256=0.25 表示在出发位置距离屏幕最下端1/4处
	char m_nTriggerSlope;//边沿触发触发沿
	double m_fSampleRate;
	char m_nTriggerSource;//边沿触发触发源
	char m_nTriggerMode;////触发类型比如边沿
	char m_nTriggerSweep;//自动 普通 
	PUCHAR m_pDeviceStatus;//硬件信息
	USHORT m_nReadOK;//本次读数据是否正确,0,不正确；非0正确。
	bool m_bValidDevice;//设备是否有效
public:
	double		fRound(double f, unsigned nLen);//将 f保留nLen位有效数字
	void Init();//初始化
	bool ReadData();//获取数据
	void SourceToDisplay();//将原数据转换成信号绝对值
	void DisplayToRealVolt();//将信号绝对值转换成信号实际电压值
	int range255ToRange200(int nData);
	bool m_bRestartCollect;//重新开始采集

	void setCHVpos(int nCH, WORD nValue);//设置通道垂直位置 0-255
	void setCHCouple(int nCH, WORD nValue);//设置通道耦合方式
	void setCHVoltDiv(int nCH, WORD nValue);//设置电压挡位

	void setTriggerHPos(WORD nValue);//设置水平触发位置
	void setTriggerVPos(WORD nValue);//设置垂直触发位置
	void SetBufferLen(ULONG nValue);//设置内存长度
	void SetReadLen(ULONG nValue);//设置读取长度

	void SetSampleRate(double fSa);//设置采样率
	void SetCHOnOff(int nCH,bool b);//设置通道开关
	


};

#endif // !defined(AFX_HARD_H__0825ABE2_BBFA_4220_9826_6FCBBDB4BA92__INCLUDED_)
