You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.3 KiB
C

#pragma once
#include <windows.h>
#include "LaserLogger.h"
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);
#define LASER_PORT 7 //<2F><><EFBFBD>⿪<EFBFBD>ض˿<D8B6>
#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
class Pci365CardMgr
{
typedef struct SPciPort
{
SPciPort()
{
num = -1;
bReverse = false;
}
public:
int num;//<2F>˿ڵı<DAB5><C4B1><EFBFBD>
bool bReverse;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ת(<28><>ת<EFBFBD><D7AA><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>ȡ<EFBFBD><C8A1>д<EFBFBD>붼<EFBFBD>ᷴ<EFBFBD><E1B7B4><EFBFBD><EFBFBD>)
}SPciPort;
public:
Pci365CardMgr();
~Pci365CardMgr();
public:
static Pci365CardMgr* m_instance;
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>
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>
bool m_bIniPci365Card = false;
public:
void InitPci365Card();
public:
bool ReadDll();
bool IniPciCard();
void CtrlLaserGate(bool bon);
void WritePortState(SPciPort PciPort, bool bOpen);
bool LowOrHight(int &PortNum);
long& GetOutPortState(bool bLow);
int GetPortAddr(bool bLow, bool bWirte);
long SetBitOn(long PortVal, int PortIdx);
BYTE SetBitOff(BYTE PortVal, int PortIdx);
void WriteIoPortByte(int PortAddr, long PortVal);
//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>豸
public:
static Pci365CardMgr* GetInstance()
{
if (m_instance == nullptr) {
m_instance = new Pci365CardMgr();
}
return m_instance;
}
};