|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
#include "Module.h"
|
|
|
|
|
#include "CH365DLL.H"
|
|
|
|
|
#include "GlobalFunction.h"
|
|
|
|
|
#include "PciPort.h"
|
|
|
|
|
#include "BitOperation.h"
|
|
|
|
|
#include "EnumPropertieType.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PORT_CNT 8 //<2F><>λ<EFBFBD>˿ڵĸ<DAB5><C4B8><EFBFBD>
|
|
|
|
|
#define OUT_PORT_ADDR_L 0xDE //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڵĵ<DAB5>ַ--<2D><>8 λ
|
|
|
|
|
#define OUT_PORT_ADDR_H 0xDD //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڵĵ<DAB5>ַ--<2D><>8 λ
|
|
|
|
|
#define IN_PORT_ADDR_L 0x1F //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڵĵ<DAB5>ַ--<2D><>8 λ 10 <20><><EFBFBD><EFBFBD>31
|
|
|
|
|
#define IN_PORT_ADDR_H 0xDF //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڵĵ<DAB5>ַ--<2D><>8 λ 10 <20><><EFBFBD><EFBFBD>223
|
|
|
|
|
|
|
|
|
|
typedef HANDLE (WINAPI*pCH365mOpenDevice)(ULONG iIndex,BOOL iEnableMemory,BOOL iEnableInterrupt);
|
|
|
|
|
typedef BOOL (WINAPI*pCH365mReadIoByte)(ULONG iIndex,PVOID iAddr,PUCHAR oByte);
|
|
|
|
|
typedef BOOL (WINAPI*pCH365mSetA15_A8)(ULONG iIndex,UCHAR iA15_A8);
|
|
|
|
|
typedef BOOL (WINAPI*pCH365mWriteIoByte)(ULONG iIndex,PVOID iAddr,UCHAR iByte);
|
|
|
|
|
typedef VOID (WINAPI*pCH365mCloseDevice)(ULONG iIndex);
|
|
|
|
|
|
|
|
|
|
//ch365 pci<63><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|
|
|
|
class CPciCh365Mgr:public CModule
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
CPciCh365Mgr(void);
|
|
|
|
|
~CPciCh365Mgr(void);
|
|
|
|
|
virtual void Ini();
|
|
|
|
|
virtual MODULE GetModuleType(){return _MODULE_PCI365;};
|
|
|
|
|
|
|
|
|
|
bool IsInitialize(){return m_bIni;};
|
|
|
|
|
bool ReadPortState(SPciPort PciPort,bool bCheckIniState = true);
|
|
|
|
|
void WritePortState(SPciPort PciPort,bool bOpen);
|
|
|
|
|
void SendOnePulse(SPciPort PciPort,unsigned int Delay);
|
|
|
|
|
long &GetOutPortState(bool bLow);
|
|
|
|
|
void DelayTime(unsigned int us);
|
|
|
|
|
LARGE_INTEGER GetClockFre(){return m_ClockFre;};
|
|
|
|
|
void CloseLaserPort();
|
|
|
|
|
private:
|
|
|
|
|
bool ReadDll();
|
|
|
|
|
bool IniPciCard();
|
|
|
|
|
void IniOutPortState();
|
|
|
|
|
void CheckIniState();
|
|
|
|
|
int GetPortAddr(bool bLow,bool bWirte);
|
|
|
|
|
|
|
|
|
|
void IniClockFre();
|
|
|
|
|
|
|
|
|
|
BOOL ReadIoPortByte(int PortAddr,long &PortVal);
|
|
|
|
|
void WriteIoPortByte(int PortAddr,long PortVal);
|
|
|
|
|
bool LowOrHight(int &PortNum);
|
|
|
|
|
private:
|
|
|
|
|
bool m_bIni;//pci <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
//dll <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
pCH365mOpenDevice CH365mOpenDevice;// <20><><EFBFBD><EFBFBD>CH365<36>豸,<2C><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|
|
|
|
pCH365mReadIoByte CH365mReadIoByte;//<2F><>I/O<>˿ڶ<CBBF>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
pCH365mSetA15_A8 CH365mSetA15_A8;//<2F><><EFBFBD>øߵ<C3B8>ַ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A15-A8<41><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
pCH365mWriteIoByte CH365mWriteIoByte;// <20><>I/O<>˿<EFBFBD>д<EFBFBD><D0B4>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
pCH365mCloseDevice CH365mCloseDevice;// <20>ر<EFBFBD>CH365<36>豸
|
|
|
|
|
|
|
|
|
|
HINSTANCE m_PciCh365Handle;//<2F><><EFBFBD><EFBFBD>Ch365<36><35>̬<EFBFBD><CCAC><EFBFBD>ӿ<EFBFBD><D3BF>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
HANDLE m_DeviceHandle;//pci<63>豸<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
|
|
|
|
|
long m_OutPortStateLow;//<2F><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>˿ڵ<CBBF>״̬(<28>Ͱ<EFBFBD>λ)--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|
|
|
|
long m_OutPortStateHigh;//<2F><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>˿ڵ<CBBF>״̬(<28>߰<EFBFBD>λ)--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
bool m_bHasSmartClock;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڲ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
LARGE_INTEGER m_ClockFre;//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5>
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern CPciCh365Mgr *gPciCh365Mgr;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ǵͰ<C7B5>λ
|
|
|
|
|
inline bool CPciCh365Mgr::LowOrHight(int &PortNum)
|
|
|
|
|
{
|
|
|
|
|
bool bLow = true;//<2F>Ͱ<EFBFBD>λ
|
|
|
|
|
if(PortNum>=PORT_CNT)//<2F>߰<EFBFBD>λ
|
|
|
|
|
{
|
|
|
|
|
bLow = false;
|
|
|
|
|
PortNum -= PORT_CNT;//ͳһ8 λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
return bLow;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>״̬
|
|
|
|
|
//bLow <20>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>8 λ
|
|
|
|
|
inline long &CPciCh365Mgr::GetOutPortState(bool bLow)
|
|
|
|
|
{
|
|
|
|
|
if(bLow)
|
|
|
|
|
return m_OutPortStateLow;
|
|
|
|
|
else
|
|
|
|
|
return m_OutPortStateHigh;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD>˿ڶ<CBBF>Ӧ<EFBFBD>ĵ<EFBFBD>ַ
|
|
|
|
|
inline int CPciCh365Mgr::GetPortAddr(bool bLow,bool bWirte)
|
|
|
|
|
{
|
|
|
|
|
int addr;
|
|
|
|
|
if(bLow)//<2F>Ͱ<EFBFBD>λ
|
|
|
|
|
{
|
|
|
|
|
if(bWirte)
|
|
|
|
|
{
|
|
|
|
|
addr = OUT_PORT_ADDR_L;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
addr = IN_PORT_ADDR_L;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else//<2F>߰<EFBFBD>λ
|
|
|
|
|
{
|
|
|
|
|
if(bWirte)
|
|
|
|
|
{
|
|
|
|
|
addr = OUT_PORT_ADDR_H;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
addr = IN_PORT_ADDR_H;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return addr;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡPortNum <20>˿<EFBFBD>״̬(1 <20><><EFBFBD><EFBFBD>0)
|
|
|
|
|
inline bool CPciCh365Mgr::ReadPortState(SPciPort PciPort,bool bCheckIniState)
|
|
|
|
|
{
|
|
|
|
|
if(bCheckIniState)
|
|
|
|
|
CheckIniState();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ǵͰ<C7B5>λ
|
|
|
|
|
bool bLow = LowOrHight(PciPort.num);
|
|
|
|
|
//<2F><><EFBFBD>ö˿ڵ<CBBF>ַ
|
|
|
|
|
int PortAddr = GetPortAddr(bLow,false);
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ֵ
|
|
|
|
|
long InPortState;
|
|
|
|
|
ReadIoPortByte(PortAddr,InPortState);
|
|
|
|
|
|
|
|
|
|
bool ret = IsBitOn(InPortState,PciPort.num);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if(PciPort.bReverse)
|
|
|
|
|
{
|
|
|
|
|
ret = !ret;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|