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

📄 datacomm232.pas

📁 ah 209型通用读卡器驱动程序源码
💻 PAS
字号:
unit DataComm232;

interface

uses
  SysUtils, Classes, ComDrv32,Windows;

type
  TDllDataModule = class(TDataModule)
    Comm232: TCommPortDriver;
    procedure Comm232ReceiveData(Sender: TObject; DataPtr: Pointer;
      DataSize: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DllDataModule: TDllDataModule;
  CardNo : Integer = 0;
  CardType : byte = $00;
  bb : boolean = false;
  procedure Send_Card_Comm(var Card_No : integer;var Card_Type : byte;var bl : boolean);stdcall;
implementation

uses Ucomm, DataType, DKQ, packet_unit, CommandWord, CRCMAC_unit;

{$R *.dfm}

procedure TDllDataModule.Comm232ReceiveData(Sender: TObject;
  DataPtr: Pointer; DataSize: Integer);
var
   k,kk,m,mm : Word;
   jh : byte;
begin
  try
    ZeroMemory(@recbuf[1],MAXBUF);
    Move(DataPtr^,(@recbuf[1])^,DataSize);
    CopyMemory(@CommonBuf[1],@recbuf[1],DataSize);
    case CommonBuf[PACKET_HEAD_LEN+2] of
               SEND_CARD:            begin
                                         if(CommonBuf[PACKET_HEAD_LEN+3] = $00) then
                                         begin
                                             //如果没有卡片插入时发送状态
                                             CopyMemory(@kk,@CommonBuf[PACKET_HEAD_LEN-1],2);
                                             mm := CRC16(@CommonBuf[1],PACKET_HEAD_LEN-2);
                                             CopyMemory(@k,@CommonBuf[PACKET_HEAD_LEN+5],2);
                                             m := CRC16(@CommonBuf[PACKET_HEAD_LEN+1],4);
                                             if((k = m) and (kk = mm)) then
                                             begin
                                                ZeroMemory(@CommonBuf[1],MAXBUF);
                                             end;
                                         end
                                         else
                                         begin
                                            if((CommonBuf[PACKET_HEAD_LEN+3] = $11) or (CommonBuf[PACKET_HEAD_LEN+3] = $22) or (CommonBuf[PACKET_HEAD_LEN+3] = $33)) then
                                            begin
                                                CopyMemory(@kk,@CommonBuf[PACKET_HEAD_LEN-1],2);
                                                mm := CRC16(@CommonBuf[1],PACKET_HEAD_LEN-2);
                                                CopyMemory(@k,@CommonBuf[PACKET_HEAD_LEN+8],2);
                                                m := CRC16(@CommonBuf[PACKET_HEAD_LEN+1],7);
                                                if((k = m) and (kk = mm)) then
                                                begin
                                                   CopyMemory(@CardNo,@CommonBuf[PACKET_HEAD_LEN+4],4);
                                                   CardType := CommonBuf[PACKET_HEAD_LEN+3];
                                                   jh := CommonBuf[PACKET_HEAD_LEN+1];
                                                   TempData := RecvCard(jh);
                                                   Comm232.SendData(TempData.RSMP,TempData.RSML);
                                                   //在发送数据前,清空接收缓冲区
                                                   ZeroMemory(@CommonBuf[1],MAXBUF);
                                                end;
                                            end;
                                         end;
                                     end;
               RECV_CARD :           begin
                                        CopyMemory(@kk,@CommonBuf[PACKET_HEAD_LEN-1],2);
                                        mm := CRC16(@CommonBuf[1],PACKET_HEAD_LEN-2);
                                        CopyMemory(@k,@CommonBuf[PACKET_HEAD_LEN+3],2);
                                        m := CRC16(@CommonBuf[PACKET_HEAD_LEN+1],2);
                                        if((k = m) and (kk = mm)) then
                                        begin
                                             bb := true;
                                             ZeroMemory(@CommonBuf[1],MAXBUF);
                                        end;
                                     end;
               end;

  except
  end;
end;
procedure Send_Card_Comm(var Card_No : integer;var Card_Type : byte;var bl : boolean);stdcall;
begin
   Card_No := CardNo;
   Card_Type := CardType;
   bl := bb;
end;
end.

⌨️ 快捷键说明

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