📄 ctkint.c
字号:
#include <windows.h>
#include <dos.h>
#include <commdlg.h>
#include "def.h"
#include "ctkdef.h"
extern HWND _far hWndEvent;
extern WPARAM _far wParamEvent;
extern CHANNELPARAM FAR *lpChannelP;
extern UINT SIOCtrlAddr[];
extern UINT SIODataAddr[];
extern int Freq;
extern int SendMsgCnt;
extern void wait(int);
extern int frequency(void);
int idComDev;
//void FAR PASCAL _export SendPara(int);
void interrupt _far IntSvcRtn3(void);
void interrupt _far IntSvcRtn5(void);
//-----------------------------------------------------------------//
void interrupt _far IntSvcRtn3(void)
{
int i,j;
BYTE inbyte;
CHANNELPARAM FAR *lpCh;
RUNFLAG *runf;
for (i=0; i<CHANNELMAXNUM; i++)
{
lpCh=lpChannelP+i;
runf = (RUNFLAG *)lpCh->Reserved;
if (lpCh->CHValidFlag && (lpCh->CHType==CTKBOARD)) //如果通道是CTK板SIO, 并且通道使用
{
if (lpCh->RecBuff && ((lpCh->RxWriteP+1)%lpCh->RxBuffLen!=lpCh->RxReadP%lpCh->RxBuffLen))//jgx
{
outportb(SIOCtrlAddr[lpCh->SIOOrd],1);
wait(32);//jgx 32
inbyte=inportb(SIOCtrlAddr[lpCh->SIOOrd]);
wait(32); //jgx
/// if (inbyte & (bit4+bit5+bit6)) lpCh->CHErr++;//jgx 98.8
outportb(SIOCtrlAddr[lpCh->SIOOrd],0);
wait(32);//jgx 32
inbyte=inportb(SIOCtrlAddr[lpCh->SIOOrd]);
// if (1==1)//(i!=16 &&i!=17)
// {
if (inbyte & bit0)
{
wait(32); //jgx 32
*(lpCh->RecBuff+lpCh->RxWriteP)=inportb(SIODataAddr[lpCh->SIOOrd]);
lpCh->RxWriteP = (lpCh->RxWriteP+1)%lpCh->RxBuffLen;
lpCh->InvalidCharNum = 0;
runf->InvalidCharNum = 0;
wait(32); //jgx 32
}
else {lpCh->InvalidCharNum++;
runf->InvalidCharNum++;
}
/*
}
else
{
BYTE *buf;
int len=0;
len=ReadComm(idComDev,buf, 1);
if (len==1)
{
*(lpCh->RecBuff+lpCh->RxWriteP)=*buf;
lpCh->RxWriteP = (lpCh->RxWriteP+1)%lpCh->RxBuffLen;
runf->InvalidCharNum = 0;
}
else runf->InvalidCharNum++;
}
*/
} // Receive Data from SIO port
if (lpCh->SendBuff && (lpCh->TxWriteP!=lpCh->TxReadP))
{
outportb(SIOCtrlAddr[lpCh->SIOOrd],0);
wait(32);
inbyte=inportb(SIOCtrlAddr[lpCh->SIOOrd]);
if (inbyte & bit2)
{
outportb(SIODataAddr[lpCh->SIOOrd],*(lpCh->SendBuff+lpCh->TxReadP));
lpCh->TxReadP = (lpCh->TxReadP+1)%lpCh->TxBuffLen;
wait(32);
lpCh->NoTxNum = 0;
lpCh->CHStatus &= ~NoTxFlag;
}
else
{
runf->NoTxNum++;
if (runf->NoTxNum>30000)
{
lpCh->CHStatus |= NoTxFlag;
lpCh->NoTxNum = 0;
}
}
} // Send Data to SIO port
}
}
outportb(0x20,0x20);
wait(32);
}
void interrupt _far IntSvcRtn5(void)
{
Freq = frequency();
// if (++SendMsgCnt<10)
PostMessage(hWndEvent, WM_COMMAND, 555, 0L);
outportb(0x20,0x20);
wait(32); // jgx 98.8
}
void FAR PASCAL _export SendPara(id)
{
idComDev=id;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -