📄 uicreader.pas
字号:
////////////////////////////////////////////////////////////////////////////////
//
// Vanoda-BioMaster
// IC Card Reader PlugIn
// 主函数库
//程序设计:项波
//E-mail :xb_xj@sohu.com
//更新日期:2005年12月09日
//History:
//
////////////////////////////////////////////////////////////////////////////////
{
通讯格式:
--------------------------
命令说明:
一、 硬件协议
信号:RS232,半双工
波特率:9600bps
起始位:1位
停止位:1位
数据位长:8位数据位
奇偶校验位:无
二、 帧协议
--------------------------------------------------------
1.上位机发送帧格式:
03H : 成功
04H : 失败
05H : 关闭摄像头
------------------------------------------------------
2.单片机返回帧格式:
01H :按钮被按下
02H : IC卡号
02H X X X X X X X X 03H
X为卡号
===========================================================
}
unit UICReader;
interface
uses windows,Classes,SysUtils,SPComm,Forms;
type
//回调函数定义
TCardReaderCallbackProc = Procedure (CardID :PChar);stdcall;
Var
cb_CardReader : TCardReaderCallbackProc; //读卡回调函数
//函数列表
function CardReader_Init: Boolean;stdcall;
Function _InitPort(vComPort:String):Boolean;
procedure _StopReadComm;
Procedure CardReader_SetOnGetCardProc( Value : TCardReaderCallbackProc) ;stdcall;
procedure AddLog(sLog:String);
//输出调试信息 开关
//{$ifndef debug}
//{$define debug}
//{$endif}
implementation
Type
TOnReceiveEvent =
procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object;
TReceiver = class
Public
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
end;
Var
vReceiver : TReceiver; //接收串口信号
vComm : TComm; //串口
_InitOK : Boolean = False;
CommandStr : PChar; //发送缓冲
rbuf : array[1..10] of byte; //接收缓冲
procedure AddLog(sLog:String);
begin
{$ifdef Debug}
try
if Assigned(@Pinfo.addLog) then
Pinfo.AddLog(PChar(sLog));
except;
end;
{$endif}
end;
Function _InitPort(vComPort:String):Boolean;
//////////////////////////////////////
//初始化串口
//2005-12-14
//////////////////////////////////////
begin
Result := False;
//建立类
if Not Assigned(vReceiver) then
vReceiver := TReceiver.Create;
if not Assigned(vComm) then
vComm := TComm.Create(nil);
//设置串口响应函数
vComm.OnReceiveData := vReceiver.Comm1ReceiveData;
//初始化串口
With vComm do
begin
try
//设置端口号
StopComm;
CommName := vComPort;
TxContinueOnXoff := False;
Outx_XonXoffFlow := False;
Inx_XonXoffFlow := False;
IgnoreNullChar := True;
Parity := None;
StartComm;
Result := vComm.Handle > 0 ;
Except
Result := False;
;
End;
end;
_InitOK := Result;
end;
procedure _StopReadComm;
//-----------------------------------------------
//停止等待线程
//项波
//Date:2005-01-05
//
begin
if assigned(vComm) then
begin
vComm.StopComm;
AddLog('::CardReader - _StopReadComm' );
end;
end;
procedure _StartReadComm;
//-----------------------------------------------
//开启等待线程
//项波
//Date:2005-01-05
//
begin
if _InitOK then
begin
if assigned(vComm) then
begin
vComm.StopComm;
AddLog('::CardReader - _StartReadComm' );
end;
end;
end;
{ TReceiver }
////////////////////////////////////////////////////////////////////////////////
// TReceiver 接受到串口数据
////////////////////////////////////////////////////////////////////////////////
procedure TReceiver.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
Var
sCardID : String;
begin
sCardID :='';
case BufferLength of
10:
begin
// AddLog('::CardReader - Got Card ID ' );
if assigned(cb_CardReader) then
begin
try
//读取到卡号8位
SetLength(sCardID,BufferLength);
move(buffer^,PChar(sCardID)^,BufferLength);
sCardID := Copy(sCardID,2,8); // 移动指针取2-9位
AddLog('::CardReader - Card ID : '+sCardID);
cb_CardReader(PChar(sCardID));
except;
end;
end;
end;
12:
begin
// AddLog('::CardReader - Got Card ID ' );
if assigned(cb_CardReader) then
begin
try
//读取到卡号10位
SetLength(sCardID,BufferLength);
move(buffer^,PChar(sCardID)^,BufferLength);
sCardID := Copy(sCardID,2,10); // 移动指针取2-9位
AddLog('::CardReader - Card ID : '+sCardID);
cb_CardReader(PChar(sCardID));
except;
end;
end;
end;
else
;
end;
end;
////////////////////////////////////////////////////////////////////////////////
// 读卡器
////////////////////////////////////////////////////////////////////////////////
function CardReader_Init: Boolean;stdcall;
//初始化
begin
Result := _InitOK;
end;
Procedure CardReader_SetOnGetCardProc( Value : TCardReaderCallbackProc) ;stdcall;
//结束等待刷卡
begin
cb_CardReader := Value;
end;
///////////////////////////////////////////////////////////////////////////////
initialization
begin
//初始化函数列表
cb_CardReader := nil;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -