⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 protocol.cpp

📁 由visual c++编写的北航一个的指纹识别系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include "protocol.h"

bool     InitCom(int comport)
{
	char    Ccom[10];
	DCB     dcb;
	HANDLE  hCom;
	BOOL    fSuccess;
	COMSTAT  comstat;
	DWORD    dwError;
	COMMTIMEOUTS TimeOuts;

	Ccom[0]='C',Ccom[1]='O',Ccom[2]='M',Ccom[4]='\0';
	if( comport<1 || comport>8 )
		return false;
	Ccom[3]='0'+comport;
	
	hCom = CreateFile(Ccom,
		GENERIC_WRITE | GENERIC_READ,
		0,
		NULL,
		OPEN_EXISTING,
		0,
		NULL
		);
	if (hCom == INVALID_HANDLE_VALUE)
		return false;
	
	fSuccess = GetCommState(hCom, &dcb);
	if (!fSuccess)
		return false;
	dcb.BaudRate = (unsigned long) 57600;
	dcb.ByteSize = 8;
	dcb.Parity   = 0;
	dcb.StopBits = 0;
	
	fSuccess = SetCommState(hCom, &dcb);
	if (!fSuccess)
		return false;
	GetCommTimeouts(hCom,&TimeOuts);
	TimeOuts.ReadTotalTimeoutMultiplier=120;  //220
	TimeOuts.WriteTotalTimeoutConstant=50;   //60
	SetCommTimeouts(hCom,&TimeOuts);
	HCOM[comport]=hCom;
	ClearCommError(hCom,&dwError,&comstat);
	return true;
}

void   ReleaseCom(int comport)
{
	if( HCOM[comport]!=INVALID_HANDLE_VALUE )
		CloseHandle( HCOM[comport] );
}

//----------------------GetPkgByte--------------------
int   GetPkgByte(int comport,unsigned char *TranChar)
{
	DWORD    num;
	COMSTAT  comstat;
	DWORD    dwError;

    num=0;
	*TranChar=0;
	ClearCommError(HCOM[comport],&dwError,&comstat);
	ReadFile(HCOM[comport],TranChar,1,&num,NULL);
	if( num!=1 )
		return 0;
    return 1;
}

//-------------------SendPkgByte---------------------
int   SendPkgByte(int comport,unsigned char TranChar)
{
    DWORD    num;
	COMSTAT  comstat;
	DWORD    dwError;
	int      qq=9,tt=158;

	for(int pp=0;pp<=5000;pp++ )
        qq=qq*tt/tt;
    ClearCommError(HCOM[comport],&dwError,&comstat);
	WriteFile(HCOM[comport],&TranChar,1,&num,NULL);
	if( num!=1 )
		return 0;
    return 1;
}

int    GetPackage(int comport, CMD *cmd)
{   
    int           i,RptTimes;
    long          jyh;
    
    RptTimes=0;
hostReIn:
    if( !GetPkgByte(comport, &(cmd->PkgId )) )
        return 0;   
    if( !GetPkgByte(comport, &(cmd->Address[0]) ) )
        return 0;   
    if( !GetPkgByte(comport, &(cmd->Address[1] ) ))
        return 0;   
    if( !GetPkgByte(comport, &(cmd->PkgLen)) )
        return 0;
    jyh=cmd->PkgId+cmd->Address[0]+cmd->Address[1]+cmd->PkgLen;
    
    for( i=0;i<cmd->PkgLen;i++ )
    {
        if( !GetPkgByte(comport, &(cmd->PkgCnt[i] )) )
            return 0;
        jyh+=cmd->PkgCnt[i];
    }
    if( !GetPkgByte(comport, &(cmd->Jyh[0] )) )
        return 0;   
    if( !GetPkgByte(comport, &(cmd->Jyh[1] )) )
        return 0;

	Sleep(1);
    if( cmd->Jyh[0]!=(jyh&0xff00)>>8 || cmd->Jyh[1]!=(jyh&0xff) )
	{
        RptTimes++;
		if( RptTimes>3 )
		{
			SendPkgByte(comport, hEot );
            Sleep(1);
            SendPkgByte(comport, hEot );
            return 0;
		}
		SendPkgByte(comport, hReIn );
        Sleep(1);
        SendPkgByte(comport, hReIn );
        goto hostReIn;
	}

    SendPkgByte(comport, hRight );
    Sleep(1);
    SendPkgByte(comport, hRight );
    return 1;
} 

int    SendPackage(int comport,SCMD scmd)
{   
    int           i;
    long          jyh;        //unsigned int
    unsigned char ret;  

ModuleReIn:
    if( !SendPkgByte(comport, scmd.sPkgId ) )
        return 0;
    if( !SendPkgByte(comport, scmd.sAddress[0] ) )
        return 0;
    if( !SendPkgByte(comport, scmd.sAddress[1] ) )
        return 0;
    if( !SendPkgByte(comport, scmd.sPkgLen) )
        return 0;
    jyh=scmd.sPkgId+scmd.sAddress[0]+scmd.sAddress[1]+scmd.sPkgLen;
    
    for( i=0;i<scmd.sPkgLen;i++ )
    {
        if( !SendPkgByte(comport, scmd.sPkgCnt[i] ) )
            return 0;
        jyh+=scmd.sPkgCnt[i];
    }
    scmd.sJyh[0]=(jyh&0xff00)>>8;
    scmd.sJyh[1]=jyh&0xff;
    if( !SendPkgByte(comport, scmd.sJyh[0] ) )
        return 0;
    if( !SendPkgByte(comport, scmd.sJyh[1] ) )
        return 0;
	if( !GetPkgByte(comport, &ret ) )
        return 0;
    if( !GetPkgByte(comport, &ret ) )
        return 0;

    if( ret==mReIn )
	    goto ModuleReIn;
    if( ret==mRight )
        return 1;
	if( ret==mBusy )
        return 2;
    return 0;
}

int  SensorStatus(int comport,unsigned char* St0,unsigned char* St1)
{
	int   ret;
	SCMD scmd;
	CMD cmd;
	Sleep(30);                     //should delay 150ms

	scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=Status ;
	
	ret=SendPackage(comport,scmd);
	if( ret==2 )
		return 2;                   //busy
	if( ret==1 )
	{
		if( GetPackage(comport,&cmd) )
		{
			*St0=cmd.PkgCnt[0];
			*St1=cmd.PkgCnt[1];
			return 1;
		}
	}
    return 0;
}

int  SensorReset(int comport)
{
	SCMD scmd;
    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=Reset ;
	
	return( SendPackage(comport,scmd) );
}

int  SensorFree(int comport)
{
	SCMD scmd;
    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=Free ;
	return( SendPackage(comport,scmd) );
}

int  SensorGenTzz(int comport)
{
	SCMD scmd;
    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=GenTzz ;
	return( SendPackage(comport,scmd) );
}

int  SensorEnroll(int comport)
{
	SCMD scmd;
	Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=Enroll ;
	return( SendPackage(comport,scmd) );
}

int  SensorGenImg(int comport)
{
	SCMD scmd;
	Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=GenImg ;
	return( SendPackage(comport,scmd) );
}

int  SensorDownMb(int comport,int nummb,TZDP mb[])
{
	int i,ptr;
	int ret;
	SCMD scmd;

    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=DownMb ;
	ret=SendPackage(comport,scmd);
	if( !ret )
		return 0;
	if( ret==2 )
		return 2;

	Sleep(3);
	for( i=0,ptr=0;i<nummb;i++ )
    {
        scmd.sPkgCnt[ptr++]=mb[i].hres;
        scmd.sPkgCnt[ptr++]=mb[i].zres;
        scmd.sPkgCnt[ptr++]=mb[i].flag+((mb[i].direct/256)<<7);
        scmd.sPkgCnt[ptr++]=mb[i].direct%256;
    }
    scmd.sPkgId=EndData;
    scmd.sPkgLen=ptr;
    return( SendPackage(comport,scmd) );
}

int  SensorDownTz(int comport,int numtzd,TZDP tzd[])
{
	int i,ptr;
	int ret;
	SCMD scmd;

    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=DownTz ;
    ret=SendPackage(comport,scmd);
	if( !ret )
		return 0;
    if( ret==2 )
		return 2;

	Sleep(1);
	for( i=0,ptr=0;i<numtzd && i<=31;i++ )
    {
        scmd.sPkgCnt[ptr++]=tzd[i].hres;
        scmd.sPkgCnt[ptr++]=tzd[i].zres;
        scmd.sPkgCnt[ptr++]=tzd[i].flag+((tzd[i].direct/256)<<7);
        scmd.sPkgCnt[ptr++]=tzd[i].direct%256;
    }
	if(numtzd>32)
		scmd.sPkgId=Data;
	else
		scmd.sPkgId=EndData;
    scmd.sPkgLen=ptr;
    if( !SendPackage(comport,scmd) )
        return 0;
	if( numtzd<=32 )
		return 1;

	Sleep(3);
	for( i=32,ptr=0;i<numtzd && i<=31+32;i++ )
    {
        scmd.sPkgCnt[ptr++]=tzd[i].hres;
        scmd.sPkgCnt[ptr++]=tzd[i].zres;
        scmd.sPkgCnt[ptr++]=tzd[i].flag+((tzd[i].direct/256)<<7);
        scmd.sPkgCnt[ptr++]=tzd[i].direct%256;
    }
	scmd.sPkgId=EndData;
    scmd.sPkgLen=ptr;
    return( SendPackage(comport,scmd) );
}

int  SensorUpMb(int comport,int* nummb,TZDP mb[])
{
	int i,ptr;
	int ret;
	SCMD scmd;
	CMD cmd;

    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=UpMb ;
	ret=SendPackage(comport,scmd);
	if( !ret )
		return 0;
    if( ret==2 )
		return 2;

	if( !GetPackage(comport,&cmd) )
        return 0;
    if( cmd.PkgId!=EndData )
        return 0;
    *nummb=cmd.PkgLen/4;
    ptr=0;
    for( i=0;i<*nummb;i++ )
    {
       mb[i].hres=cmd.PkgCnt[ptr++];
       mb[i].zres=cmd.PkgCnt[ptr++];
       mb[i].flag=cmd.PkgCnt[ptr++];
       mb[i].direct=cmd.PkgCnt[ptr++];
       if(mb[i].flag&0x80)
       {
           mb[i].direct+=256;
           mb[i].flag&=0x7f;
       }
	}

    return 1;
}

int  SensorUpTz(int comport,int *numtzd,TZDP tzd[])
{
	int i,ptr;
	int ret;
	SCMD scmd;
	CMD cmd;

    Sleep(10);
    scmd.sPkgId=Cmd;
	scmd.sPkgLen=1;
	scmd.sPkgCnt[0]=UpTz ;
	ret=SendPackage(comport,scmd);
	if( !ret )
		return 0;
    if( ret==2 )
		return 2;

	if( !GetPackage(comport,&cmd) )
        return 0;
    if( cmd.PkgId!=EndData && cmd.PkgId!=Data )
        return 0;
    i=0;
    *numtzd=0;            
anothertzz:
    *numtzd+=cmd.PkgLen/4;
    ptr=0;
    for( ;i<*numtzd;i++ )
    {
        tzd[i].hres=cmd.PkgCnt[ptr++];
        tzd[i].zres=cmd.PkgCnt[ptr++];
        tzd[i].flag=cmd.PkgCnt[ptr++];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -