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

📄 bc2018.c

📁 上海大宇指纹机软件qqqfwefgergr
💻 C
📖 第 1 页 / 共 5 页
字号:
		for(i=0;i<3;i++)
		{CheckNum+=(Uchar)((Parameter&(0x00ff0000>>(8*i)))>>(16-8*i));}
		JudgeAndCoding(2,Cmd,ParaType,Parameter);
		PtRevOrSendDat+=RecordInputCondit_CodingDatCnt;
		MarkKeyNum_SendDatLenth+=RecordInputCondit_CodingDatCnt;
		CmdPackParaLenth+=RecordInputCondit_CodingDatCnt;
		RecordInputCondit_CodingDatCnt=0;
		break;
	case 5://需传递模板号(则取Parameter最低字,可能需编码)
		for(i=0;i<2;i++)
		{CheckNum+=(Uchar)((Parameter&(0x0000ff00>>(8*i)))>>(8-8*i));}
		JudgeAndCoding(2,Cmd,ParaType,Parameter);
		PtRevOrSendDat+=RecordInputCondit_CodingDatCnt;
		MarkKeyNum_SendDatLenth+=RecordInputCondit_CodingDatCnt;
		CmdPackParaLenth+=RecordInputCondit_CodingDatCnt;
		RecordInputCondit_CodingDatCnt=0;
		break;
	case 6://需传递配置表(则取Parameter[xx xx xx 00],再发[00 00 00 00])
        for(i=0;i<4;i++)
		{	CheckNum+=(Uchar)((Parameter&(0xff000000>>(8*i)))>>(24-8*i));
			*PtRevOrSendDat++=(Uchar)((Parameter&(0xff000000>>(8*i)))>>(24-8*i));
			MarkKeyNum_SendDatLenth++;
		}
		for(i=0;i<4;i++)
		{	*PtRevOrSendDat++=0x00;
			MarkKeyNum_SendDatLenth++;
		}
		break;
	case 8://需传递握手口令(则取Parameter)
		for(i=0;i<4;i++)
		{	CheckNum+=(Uchar)((Parameter&(0xff000000>>(8*i)))>>(24-8*i));
			*PtRevOrSendDat++=(Uchar)((Parameter&(0xff000000>>(8*i)))>>(24-8*i));
			MarkKeyNum_SendDatLenth++;
		}
		break;
	}
	//放校验和
	*PtRevOrSendDat++=(Uchar)((CheckNum&0xff00)>>8);
	*PtRevOrSendDat++=(Uchar)(CheckNum&0x00ff);
	MarkKeyNum_SendDatLenth+=2;
	//放结束符
	*PtRevOrSendDat++=0xC0;
	MarkKeyNum_SendDatLenth++;
	PtRevOrSendDat=&RevEepPageBytDatBuf;//ZSJYA
	//EA=1;ES=1;  //JJ
}
/*****************************************************************************
功能:起动串口发送.
输入参数:无
输出参数:PtSendDat   -指向发送缓冲区.
          MarkKeyNum_SendDatLenth-待发送的数据长度.
返回值:  无
编者:ZSJ
修改:
注意:应答包的实际包长度暂时不能从应答包取包长度记录值,因为包长度可能需要解码.
********************************************************************************/
void StartSeriSendDat()
{	SBUF=*PtRevOrSendDat++;
	MarkKeyNum_SendDatLenth--;
}

/***********单一功能函数*************/
#if NOUSE==1
/********************************************************************
简介:复位(指令0x15).
功能:模块软复位,进行系统初始化。复位后重新验证设备握手口令(当口令不为0000时).
输入参数:无
输出参数:无
返回值:(1B,如下列出情况)
   MX_OK(0x00)          复位成功;
   MX_COMM_ERR(0x01)    通讯错误;
   MX_RESET_ERR(0x14)   复位失败。
编者:ZSJ
修改:
*********************************************************************/
bit CmdReset()
{	ES=1;
	Delay_163us();
	PackSendDat(0,1,0x15,0,0,0);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>100)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	return(UnpackRevDat(/*0,*/0x15,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
#endif
/********************************************************************
简介:探测手指(指令0x01).
功能:探测传感器上是否按有手指.
输入参数:无
输出参数:无
返回值:(1B,如下列出情况)
      MX_OK(0x00)         按着手指;
      MX_COMM_ERR(0x01)     收包有错 (即通讯错误);
	  MX_NO_FINGER(0x02)  没有手指。
编者:ZSJ
修改:
*********************************************************************/
bit CmdDetectFinger()
{    ES=1;
	 Delay_163us();
	 PackSendDat(0,1,0x01,0,0,0);
	 TimeDoorOpenCnt=0;
	 BPreventStop=1;
	 StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
     //BDatRevOk=0;
	 LableBitVar&=0xfe;
	 //while(!BDatRevOk); //等待串口应答包完成
	 while((LableBitVar&0x01)==0x00)
	 {   DOG=~DOG;
		 if(TimeDoorOpenCnt>30)
		 {break;}
	 }
	 BPreventStop=0;
	 TimeDoorOpenCnt=0;
	 ES=0;
	 return(UnpackRevDat(/*0,*/0x01,InputPwCnt_RevDatLenth));
}

/********************************************************************
简介:录图像(指令0x02).
功能:从传感器录入指纹图像存于指纹模块的ImageBuffer,并返回有效
      面积百分比,上下左右边界等5个参数到外部.
	  要开辟的areaBorder[4]缓冲区.
输入参数:无
输出参数:(4B,如下)
      areaBorder[0]-指纹图像面积;
      areaBorder[1]-指纹图像上界;
	  areaBorder[2]-指纹图像左界;
	  areaBorder[3]-指纹图像右界.
返回值:(1B,如下列出情况)
      MX_OK(0x00)         录入成功;
      MX_COMM_ERR(0x01)     收包有错 (即通讯错误);
      MX_GET_IMG_ERR(0x03)  录入不成功。
编者:ZSJ
修改:
*********************************************************************/
bit CmdGetImage(/*Uchar* areaBorder*/)
{  	ES=1;
	Delay_163us();
	PackSendDat(0,1,0x02,0,0,0);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>100)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	return(UnpackRevDat(/*0,*/0x02,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及结果.
}

/********************************************************************
简介:生成特征(指令0x03).
	功能:根据系统配置表中定义的生成特征类型,由存于指纹模块的ImageBuffer
		  中的原始图像生成指纹特征文件存于CharBufferA或CharBufferB.
输入参数:iBufferID-缓冲区号(1B)(具体如下)
      iBufferID =CHAR_BUFFER_A 表示缓冲区CharBufferA,代号0x01
	  iBufferID =CHAR_BUFFER_B 表示缓冲区CharBufferB,代号0x02
      iBufferID =MODEL_BUFFER 表示缓冲区ModelBuffer,代号0x03
输出参数:无
返回值:(1B,如下列出情况)
      MX_OK(0x00)           生成特征成功;
      MX_COMM_ERR(0x01)       收包有错 (即通讯错误);
      MX_FP_TOO_DRY(0x04)     指纹太干,太淡而生不成特征;
	  MX_FP_TOO_WET(0x05)     指纹太湿,太糊而生不成特征;
	  MX_FP_DISORDER(0x06)    指纹太乱而生不成特征;
	  MX_LITTLE_FEATURE(0x07) 指纹正常,但特征点太少而生不成特征;
      MX_INVALID_IMAGE(0x15)  图像缓冲区内没有有效原始图而生不成特征。
编者:ZSJ
修改:
*********************************************************************/
bit CmdGenTemplet(Uchar iBufferID)
{	ES=1;
	Delay_163us();
	PackSendDat(0,2,0x03,1,0,iBufferID);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>100)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	return(UnpackRevDat(/*0,*/0x03,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及结果.
}
#if NOUSE==1
/********************************************************************
简介:精确比对(指令0x04).
功能:精确比对CharBufferA与CharBufferB中的特征文件.
输入参数:无
输出参数:目前为NULL,以后扩展为在iScore中返回比对分数
返回值:(1B,如下列出情况)
    MX_OK(0x00)       指纹匹配;
    MX_COMM_ERR(0x01)   收包有错 (即通讯错误);
    MX_NOT_MATCH(0x08)  指纹不匹配。
编者:ZSJ
修改:
*********************************************************************/
bit CmdMatchTwoTemplet(/*Uint* iScore*/)
{	ES=1;
	Delay_163us();
	PackSendDat(0,1,0x04,0,0,0);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>100)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	return(UnpackRevDat(/*0,*/0x04,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
#endif
/********************************************************************
简介:搜索指纹库(1:n搜索,指令0x25/0x05 分级/不分级).
功能:以CharBufferA或CharBufferB中的特征文件搜索整个或部分指纹库。
	  若搜索到,则返回页码与用户信息区内容.
输入参数:iBufferID-缓冲区号(1B)(具体如下)
          iStartPage-0<搜索起始页(2B)<FLASH库最大容量
          iPageNum-搜索页数(2B)
    iBufferID =CHAR_BUFFER_A 表示缓冲区CharBufferA,代号0x01
    iBufferID =CHAR_BUFFER_B 表示缓冲区CharBufferB,代号0x02
    iBufferID =MODEL_BUFFER 表示缓冲区ModelBuffer,代号0x03
输出参数:*iMbAddress-搜索到的指纹模板在flash中的页码(2B还不确定)
   	sUserInfo-用户信息内容指针,此内存为32B大小
返回值:(1B,如下列出情况)
    MX_OK(0x00)         搜索到;
    MX_COMM_ERR(0x01)     收包有错 (即通讯错误);
	MX_NOT_SEARCHED(0x09) 没搜到,此时页码与用户信息均为0。
编者:ZSJ
修改:
*********************************************************************/
bit CmdSearch(Uchar iBufferID,Uint iStartPage,Uint iPageNum/*,
				Uint *iMbAddress,Uchar* sUserInfo*/)
{
	Ulong Para;
    Para=iBufferID;
	ES=1;
	Delay_163us();
    if(iPageNum)
    {Para=(Para<<16)+iPageNum;}
	if(!iPageNum)
	{PackSendDat(0,2,0x25,1,0,Para);}
	else
	{PackSendDat(0,6,0x05,3,iStartPage,Para);}
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>40)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	//解开应答包,并返回应答码及应答结果.
	if(!iPageNum)
	{return(UnpackRevDat(/*0,*/0x25,InputPwCnt_RevDatLenth));}
	else
	{return(UnpackRevDat(/*0,*/0x05,InputPwCnt_RevDatLenth));}
}
/********************************************************************
简介:合并特征(指令0x06).
功能:将CharBufferA与CharBufferB中的特征文件合并生成模板,结果存于ModeBuffer.
输入参数:无
输出参数:无
返回值:(1B,如下列出情况)
    MX_OK(0x00)        合并成功;
    MX_COMM_ERR(0x01)  收包有错 (即通讯错误);
    MX_MERGE_ERR(0x0a) 合并失败(两枚指纹不属于同一手指)。
编者:ZSJ
修改:
*********************************************************************/
bit CmdMergeTwoTemple()
{	ES=1;
	PackSendDat(0,1,0x06,0,0,0);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>30)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	return(UnpackRevDat(/*0,*/0x06,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}

/********************************************************************
简介:存储模板(指令0x07).
功能:将ModelBuffer中的模板文件存到TimeOneMinuteCnt_PageId号flash数据库位置.
输入参数:iBufferID-缓冲区号(1B),目前为MODEL_BUFFER表示ModelBuffer,代号0x03;
    ITimeOneMinuteCnt_PageId-指纹库位置号 >0
输出参数:无
返回值:(1B,如下列出情况)
    MX_OK(0x00)              储存成功;
    MX_COMM_ERR(0x01)      通讯错误;
    MX_ADDRESS_OVER(0x0b)     TimeOneMinuteCnt_PageId超出指纹库范围。
编者:ZSJ
修改:
*********************************************************************/
bit CmdStoreTemplet(Uchar iBufferID,Uint iTimeOneMinuteCnt_PageId)
{   Ulong Para;
    Para=iBufferID;
	ES=1;
	Para=(Para<<16)+iTimeOneMinuteCnt_PageId;
	PackSendDat(0,4,0x07,4,0,Para);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>50)
		{break;}
	}
	BPreventStop=0;
	TimeDoorOpenCnt=0;
	ES=0;
	return(UnpackRevDat(/*0,*/0x07,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
/********************************************************************
简介:读出模板(指令0x08).
功能:将flash数据库中指定ID号的指纹模板读入到模板缓冲区ModelBuffer.
输入参数:iTimeOneMinuteCnt_PageId-指纹库模板号
输出参数:无
返回值:(1B,如下列出情况)
    MX_OK(0x00)            读出成功;
    MX_COMM_ERR(0x01)      通讯错误;
    MX_READ_ERR(0x0c)      读出有错。
编者:ZSJ
修改:
*********************************************************************/
bit CmdLoadTemple(Uint iTimeOneMinuteCnt_PageId)
{   ES=1;
	Delay_163us();
	PackSendDat(0,3,0x08,5,0,iTimeOneMinuteCnt_PageId);
	TimeDoorOpenCnt=0;
	BPreventStop=1;
	StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
    //BDatRevOk=0;
	LableBitVar&=0xfe;
	//while(!BDatRevOk); //等待串口应答包完成
	while((LableBitVar&0x01)==0x00)
	{   DOG=~DOG;
		if(TimeDoorOpenCnt>100)

⌨️ 快捷键说明

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