📄 bt878test.c
字号:
#include "CORE_VGA.H"
#include "BT848.H"
#define SERIAL_COMM 0x3f8
typedef struct {
int nBytesPerPixel;
int bSample;
int nWho;
int source;
int bright;
int contrast;
int hue;
int saturation;
int bFrameField;
int bShowMemIMG;
int bMask;
int nMaxMemIMGNum;
int nViewedMemIMGNum;
} SampleStatus;
SampleStatus status;
/******************************
描述: 将从通讯口COM1接收到的数据放入程序指定的缓冲数组中
******************************/
void PushKBuffer_JZ(const unsigned char inB)
{
if( inB==0xff || inB==0xfc )
{
sbuf[flag][flag1]=inB;
pflag[flag]=1;
flag1=0;
if( ++flag==20 ) { flag=0;}
}
else
{
sbuf[flag][flag1]=inB;
if( ++flag1==10 ) { flag1=0;}
}
}
void interrupt far (*asyncvect)(void);
/******************************
描述: 处理通讯口COM1接收数据的中断服务程序
******************************/
void interrupt far asyncint(void)
{
unsigned char B;
disable();
B=inportb(SERIAL_COMM);
if( B==0xfc ) { captureflag=1;}
else PushKBuffer_JZ(B);
outportb(0x20, 0x20);
enable();
}
/******************************
描述: 通讯口COM1初始化 (9600bps N 8 1)
******************************/
void InitCOM1(void)
{
unsigned char B;
outportb(SERIAL_COMM+3, 0x80); // DLAB=1; set div rate
outportb(SERIAL_COMM, 0x0C); // low baud
outportb(SERIAL_COMM+1, 0x00); // high baud
outportb(SERIAL_COMM+3, 0x03); // DLAB=0; set data format
outportb(SERIAL_COMM+4, 0x0b);
outportb(SERIAL_COMM+1, 0x01); // interrupt enable
/* install affair-routine for serial communications */
asyncvect=getvect(0x0C);
disable();
//inportb(SERIAL_COMM);
//inportb(SERIAL_COMM+6);
//inportb(SERIAL_COMM+3);
//inportb(SERIAL_COMM+2);
outportb(SERIAL_COMM+4, 0x0B);
outportb(SERIAL_COMM+1, 0x01);
B=inportb(0x21)&0xEF; // 1110 1111
outport(0x21, B);
setvect(0x0C, asyncint);
enable();
}
/******************************
描述: 禁止通讯口COM1接收任何数据
******************************/
void DisableCOM1(void)
{
disable();
outportb(SERIAL_COMM+1, 0x00);
outportb(SERIAL_COMM+4, 0x00);
outportb(0x21, inportb(0x21)&0x10);
enable();
setvect(0x0C, asyncvect);
}
/******************************
描述: Mask code of BT878Card.
******************************/
int GetMaskWidth(int nWid)
{ return((nWid+7)/8);}
void InitMask(iRect* rect)
{
long dwMaskCount;
int i;
rect->left=200;
rect->right=rect->left+200-1; // width=160
rect->top=50;
rect->bottom=rect->top+200;
nMaskWid = GetMaskWidth(rect->right - rect->left +1);
nMaskHei = rect->bottom - rect->top;
dwMaskCount = (long)nMaskWid * (long)nMaskHei;
pMask=(BYTE far*)farmalloc(dwMaskCount);
_fmemset(pMask,0,dwMaskCount);
}
void main()
{
char _str_init878msg[50];
int _int_ret_init878=0;
if( Init878(0xD000, 40*1024L)==0 )
{ // alloc 40K mem for RISC
Button(410, 310, 200, 150, 0x03, "请检查视频设备!", 176, 231, 234); delay(3000);
}
bright=128;
n878=0;
InitCOM1();
_int_ret_init878=IsVideoPresent(n878);
memset(_str_init878msg, 0, 50);
sprintf(_str_init878msg, "init878()=%d", _int_ret_init878);
Bar(0,0,100,100,(_int_ret_init878>0?255:0),0,(_int_ret_init878>0?0:255));
ShowASCMemX(0,0,1,2,_str_init878msg, 255,255,255);
if(_int_ret_init878<=0)
outportb(SERIAL_COMM, 0xfd);
delay(5);
InitCOM1();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -