// ParallelPro.h: interface for the CParallelPro class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PARALLELPRO_H__302E2FBD_2828_44E3_AE8D_0B201DA7F6E0__INCLUDED_)
#define AFX_PARALLELPRO_H__302E2FBD_2828_44E3_AE8D_0B201DA7F6E0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ParallelPort.h"

class CPro;
class CIsPro;

class CParallelPro : public CParallelPort  
{
public:
	int m_nIspSpd;//下载线速度，0：一般，1：较快，2：最快
	int m_nProType;//编程器(下载线)类型
	void DetectPro(int FID);
	//查寻是否支持该器件的FID，不支持则显示编程器不可用
	int  m_nLockBits;//锁定位数
	CIsPro* m_pIsPro;//"Isp编程方法"类指针
	CIsPro* GetIsPro(BYTE FID);//根据FID得到"Isp编程方法"类指针
	CArray<CIsPro*,CIsPro*> m_arIsp;//Isp编程方法类对象队列
	int  m_nCurWork;//标识当前的编程操作
	static UINT ProWorkThread(LPVOID pParam);//编程操作线程
	void SckBytes(int nBytes);
	//Isp编程时与器件的通信,包括向MOSI写,和从MISO读
	BOOL GetMiso();//得到MISO引脚的电平
	void SetMosi(BOOL bLogic);//设置MOSI引脚的电平
	void SetRst(BOOL bLogic);//设置器件RST引脚的电平
	void SetSck(BOOL bLogic);//设置器件Sck引脚的电平
	
	void LockBit(BYTE FID,int nBit);//写锁定位
	void BeginRead(BYTE FID);//读器件开始
	void BeginWrite(BYTE FID);//写器件开始
	void Erase(BYTE FID);//擦除器件
	void ReadSign(BYTE FID);//读锁定位

	int  m_nPinMosi;//控制MOSI所用的并口引脚
	int	 m_nPinMiso;//控制MISO所用的并口引脚
	int	 m_nPinRst;//控制RST所用的并口引脚
	int	 m_nPinSck;//控制SCK所用的并口引脚
	int	 m_nPinLe;//控制器件锁存所用的并口引脚
	int	 m_nPinOe;//控制器件OE所用的并口引脚
	int	 m_nPinR1;//保留引脚1
	int	 m_nPinR2;//保留引脚2
	BOOL m_bLe;//锁存有效时的电平
			   //例如m_bLe=1:表示高电平锁存,m_bLe=0:表示低电平锁存
	BOOL m_b2Le;//锁存无效时的电平
				//如果m_bLe和m_b2Le一样，表示LE常开启或关闭
	BOOL m_bOe;//OE有效,原理同上
	BOOL m_b2Oe;
	int  m_nPinAf;//Atmel ByteBlaster使用
	int	 m_nPinIni;//Atmel ByteBlaster使用
	BYTE OutBuf[10];//ISP通讯时输出缓冲
	BYTE InBuf[10];//ISP通讯时输入缓冲
	BOOL m_bThread;//标识是否有线程存在
	BOOL m_bCanUse;//下载线是否可用
	BOOL m_bPort;//并口是否初始化
	CPro* m_pPro;
	BOOL InitPort(CPro* Pro,int nPort=0x378,int nProType=1,int nIspSpd=0);
	//初始化并口和下载线
	CParallelPro();
	virtual ~CParallelPro();
};

#endif // !defined(AFX_PARALLELPRO_H__302E2FBD_2828_44E3_AE8D_0B201DA7F6E0__INCLUDED_)
