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

📄 comsdktest.pas

📁 中控嵌入式指纹识别开发描述
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  UName, UPwd: widestring;
begin
  DeleteFile(fn);
  f := tinifile.Create(fn);
  try
    if CZKEM1.ReadAllUserID(DevID) then
    begin
      c:=0;
      while CZKEM1.GetAllUserInfo(DevID, dwEnrollNumber, UName, UPwd,
        dwMachinePrivilege, Enable) do
      begin
        s:=format('Users_%d',[dwEnrollNumber]);
        f.WriteInteger(s,'Privilege',dwMachinePrivilege);
        f.WriteBool(s,'Enabled', Enable);
        f.WriteString(s, 'Name', UName);
        f.WriteString(s, 'Password', UPwd);
        //Try get every fingerprint template
        for i:=0 to 9 do
        begin
          zeromemory(@EnrollData[0], 2048);
          Len:=2048;
          if CZKEM1.GetUserTmp(DevId, dwEnrollNumber, i, EnrollData[0], Len) then
            f.WriteString(s, 'FPT_'+inttostr(i), encodedata(EnrollData[0], Len));
        end;
        inc(c);
      end;

    end;
  finally
    f.Free;
  end;
end;

procedure TForm1.ReadDeviceStatus;
var
  s: widestring;
  ErrorCode, Value, i,
  dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: integer;
begin
  if CZKEM1.GetFirmwareVersion(devid, s) then
    AddInfo('Firmware Version: '+s)
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetFirmwareVersion ErrorNo.=%d',[ErrorCode]));
  end;
  if CZKEM1.GetSerialNumber(devid, s) then
    AddInfo('Serial Number: '+s)
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetSerialNumber ErrorNo.=%d',[ErrorCode]));
  end;

  if CZKEM1.GetProductCode(devid, s) then
    AddInfo('ProductCode: '+s)
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetProductCode ErrorNo.=%d',[ErrorCode]));
  end;

  if CZKEM1.GetDeviceTime(devid, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond) then
    AddInfo(Format('DeviceTime=%d-%d-%d %d:%d:%d',[dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond]))
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetDeviceTime ErrorNo.=%d',[ErrorCode]));
  end;

  for i:=1 to length(StatusNames) do
  if CZKEM1.GetDeviceStatus(devid, i, value) then
    AddInfo(format('%s: %d', [StatusNames[i],value]))
  else
  begin
    CZKEM1.GetLastError(ErrorCode);
    AddInfo(format('! GetDeviceStatus(%d) ErrorNo.=%d',[i, ErrorCode]));
  end;
end;

procedure TForm1.RestoreUser(const fn: string);
var
  f: tinifile;
  eno,i: integer;
  dwEnrollNumber,dwBackupNumber,Password,
  dwMachinePrivilege, dwEnable, c: integer;
  fpt, s, UName, UPwd: string;
  Sections: Tstrings;
begin
    f:=tinifile.Create(fn);
    try
    Sections := tstringlist.Create;
      try
        f.ReadSections(Sections);
        for i:=1 to 65534 do
        begin
          s:=format('Users_%d',[i]);
          if Sections.IndexOf(s)>=0 then
          begin
            Application.ProcessMessages;
            dwMachinePrivilege := f.ReadInteger(s, 'Privilege', 0);
            dwEnable := f.ReadInteger(s, 'Enabled', 1);
            UPwd := f.ReadString(s, 'Password', '');
            if UPwd='-1' then
              UPwd:='';
            UName := f.ReadString(s, 'Name','');
            CZKEM1.SetUserInfo(DevId, i, UName, UPwd, dwMachinePrivilege, dwEnable<>0);
            for dwBackupNumber:=0 to 9 do
            begin
              fpt:=f.ReadString(s, 'FPT_'+inttostr(dwBackupNumber), '');
              if fpt>'' then
              begin
                fpt:=decodedata(fpt);
                if CZKEM1.SetUserTmp(DevId, i, dwBackupNumber, pbyte(@fpt[1])^) then
                  AddInfo(format('SetEnrollData OK: User=%d,FP=%d', [i,dwBackupNumber]))
                else
                begin
                  CZKEM1.GetLastError(eno);
                  AddInfo(format('SetEnrollData Fail: User=%d,FP=%d, Error=%d', [i,dwBackupNumber,eno]));
                end;
              end;
            end;

          end;
        end;
      finally
        sections.Free;
      end;
    finally
      f.free;
    end;
end;

procedure TForm1.vleDevInfoValidate(Sender: TObject; ACol, ARow: Integer;
  const KeyName, KeyValue: String);
begin
  Modified[ARow] := '1';
end;

procedure TForm1.btnSetNameClick(Sender: TObject);
begin
  ShowUserForm(CZKEM1, DevID);
end;

procedure TForm1.btnDeleteUserClick(Sender: TObject);
begin
  CZKEM1.DeleteEnrollData(DevId, 69, DevId, 0);
  CZKEM1.DeleteEnrollData(DevId, 69, DevId, 1);
end;

var
  Testing: Boolean=false;

procedure TForm1.btnAutoTestClick(Sender: TObject);
var
  i: integer;
begin
  Testing:=not Testing;
  if Testing then
    btnAutoTest.Caption := 'End Test'
  else
    btnAutoTest.Caption := 'Start Test';
  i:=0;
  while Testing do
  begin
    AddInfo(Format('-----------Testing %d--------',[i]));
    inc(i);
    btnConnect.Click;
    if btnConnect.Tag=0 then
    begin
      Testing:=not Testing;
      if Testing then
        btnAutoTest.Caption := 'End Test'
      else
        btnAutoTest.Caption := 'Start Test';
      break;
    end;
//    sleep(1000);
    Addinfo('Clear Data...');
    btnClearData.Click;
    if FileExists(OpenDialog1.FileName) then
      RestoreUser(OpenDialog1.FileName);
    Application.ProcessMessages;
    Addinfo('Delete User 69...');
    btnDeleteUser.Click;
    Sleep(2000);
    ReadDeviceStatus;
    Application.ProcessMessages;
    if FileExists(OpenDialog1.FileName) then
      RestoreUser(OpenDialog1.FileName);
    ReadDeviceStatus;
    Addinfo('Clear Data...');
    btnClearData.Click;
    Addinfo('Disconnect...');
    btnConnect.Click;
    Application.ProcessMessages;
  end;
end;

procedure TForm1.btnBackupUserClick(Sender: TObject);
begin
  if savedialog1.Execute then
    BackupUser(savedialog1.FileName);
end;

procedure TForm1.btnRestoreClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
    RestoreUser(OpenDialog1.FileName);
end;

procedure TForm1.sbtnRS232Click(Sender: TObject);
begin
  edtnetAddress.EditLabel.Caption := 'Com Port:';
  edtNetPort.EditLabel.Caption := 'Device ID:';
  edtnetAddress.Text := 'COM1';
  edtNetPort.Text := '1';

end;

procedure TForm1.sbtnTCPIPClick(Sender: TObject);
begin
  edtnetAddress.EditLabel.Caption := 'IP Address:';
  edtNetPort.EditLabel.Caption := 'Port Number:';
  edtnetAddress.Text := '192.168.1.201';
  edtNetPort.Text := '$1112';
end;

procedure TForm1.btnACUnlockClick(Sender: TObject);
begin
  CZKem1.ACUnlock(DevId,200)
end;

procedure TForm1.chkEnabledClick(Sender: TObject);
begin
  CZKEM1.EnableDevice(DevID, chkEnabled.Checked);
end;
const
 TEMP1='A1CA268296295AA10B50AA604009469950016A41194E3C514A3754D318D6B94D4019DDBE7A' +
       '0312DCC078000EE52277F10735AF7A780D44A24FA30B4FB92BB80A819468610C221250401A' +
       '071C7A93092B8A6C400E18147DF109249C53B81740A747F30CC8945FBC12258D42540FDFA4' +
       '39FC10B9867CD20714993DB409C71C26330B453341BC10778873F40788B461B410C6BF4FA3' +
       '09E9B418382C9B266B930740BD5D78136AA73F323DC1283D405FB52D12220739A587380A31' +
       'AB2ED116263F293C0B7A46140614C334EA0F10117E4C56A5A8BACEFFFBEC12C0434C55A299' +
       'AACE6E76A2FCECA846A2FF99995D656F7707A1DFC9184BA2AE799958616D010A12A1EA994B' +
       'A19E6881545C6C0313A1FBA81F48A3BB7688BF5D1521248343A3CC8667AC49392FA1776728' +
       '42A7BC8467BB5215656742A79C6558CC7535556641A28A5646404BA3842663663FA2796521' +
       '3A51A3734545363DA16A312418086E57A2433343383E3A38231A120C026F5CA23454413D39' +
       '3314A227543061A244655246382104A2BA652164A2586454517E2A05A498656448A2615F57' +
       '54C207A4565A978AA2704B43C476A29AA8BD0FE0317773';
  TEMP2='ocoqgo5BMsMGAcUxvArqwlMxCOlEWfwM6qEuYQs4OTSAEHuUQ4EZOKhGQAyTETuTDUYqLABqNQM9wxNhDxUABMcRS/FQJChldAyKtSsjEQIjQ/gOnyYoIRhOKj7AEpQRSJNlMokb'+
        'AAVSrlTxDYAfNwAJLxErMwxKmQ88BcUbINQLSZMVfAZPk1zSBZoiafQMmK9tMwV+C2l8BJmEUzQOhjdctAl4sRdjC9I7SzgIdQt0swomn3Z4B5undLIQijUaQA/gFH9iA521brgI'+
        'dwhXkROGwmF8Cu4pVEQSX4BKCxARfk5Woau7aXQHFKH8qSPAR6L+qrpkcQYWof2agUeiz6mJXGkFGCGhuZgmR6LOiIdUXQscofyYgUqjq4ZmkiWiTKl5KEqjuWRWUS2hKZiCSqap'+
        'YkYyE3h5gUmnqlMzMiRniXhLoZpSPjWkAVVXiHdNoapjPi0hozd1d3YRTqG8eEkapEaGVnh4S6Hvnm4HpOeGZniJRU5cYGdzA6PIhneHgT9LYmhudqLahmWCd3d+Q2qmzMyXV2eY'+
        'lMJzpaqmh3d6hl/DA6Rmd4iXmGPAxAWiVIiageD/';

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  i:= CZKEM1.GetFPTempLengthStr(TEMP2);
  Memo1.lines.add(format('FPTempLength=%d',[i]));

  if CZKEM1.SetEnrollDataStr(devid, 1, devid, 0, 1, TEMP2, 0) then
    Memo1.lines.add('SetEnrollDataStr OK')
  else
    Memo1.lines.add('SetEnrollDataStr Fail.');
end;

function TForm1.BTimeDecode(const TimeStr: string): integer;
var
  p,m,s: integer;
begin
  p := pos(':', TimeStr);
  m:=strtointdef(copy(TimeStr,1,p-1),-1);
  s:=strtointdef(copy(TimeStr,p+1,100),-1);
  if (m<0) or (s<0) or (m>255) or (s>255) then result := 255;
  result := m *256+s;
end;

function TForm1.BTimeEncode(MinuteSecond: integer): string;
var
  m,s: integer;
begin
  m:=MinuteSecond div 256;
  s:=MinuteSecond mod 256;
  if (MinuteSecond<0) or (m>59) or (s>59) then
    result := 'No'
  else
    result := format('%d:%d', [m,s]);
end;

function TForm1.BNetSpeedDecode(const speed: string): integer;
var
  i: integer;
begin
  result := NetSpeedValues[0];
  for i := 0 to length(NetSpeeds)-1 do
  if speed=NetSpeeds[i] then
  begin
    result := NetSpeedValues[i];
    exit;
  end;
end;

function TForm1.BNetSpeedEncode(speed: integer): string;
var
  i: integer;
begin
  result := NetSpeeds[0];
  for i := 0 to length(NetSpeeds)-1 do
  if speed=NetSpeedValues[i] then
  begin
    result := NetSpeeds[i];
    exit;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    SaveGLogs(SaveDialog1.filename);
end;

function TForm1.SaveGLogs(const fn: string): integer;
var
  dwEnrollNumber, dwSEnrollNumber, Params3,
    Params0, Params1, dwManipulation, Params2, dwYear,
    dwMonth, dwDay, dwHour, dwMinute: Integer;
  s: string;
  f: tfilestream;
begin
  result := 0;
  f:=tfilestream.Create(fn, fmOpenWrite or fmCreate);
  try
  if CZKEM1.ReadSuperLogData(DevId) then
  while CZKEM1.GetSuperLogData(DevId, dwEnrollNumber, dwSEnrollNumber, Params3,
    Params0, Params1, dwManipulation, Params2, dwYear,
    dwMonth, dwDay, dwHour, dwMinute) do
  begin
    s:=format('%5d %5d %5d %5d %5d %5d %d-%d-%d %d:%d'#13#10,[dwSEnrollNumber, dwManipulation,
      Params0, Params1, Params2, Params3,
      dwYear, dwMonth, dwDay, dwHour, dwMinute]);
    f.Write(s[1],length(s));
    inc(result);
  end;
  finally
    f.Free;
  end;
end;

procedure TForm1.btnSMSClick(Sender: TObject);
begin
  if btnSMS.Tag=0 then
  begin
    CZKEM1.SetSMS(0, 4, 'Welcome to ZK');
    CZKEM1.SetSMS(1, 2, 'Meet at 10:00');
    CZKEM1.SetSMS(2, 3, 'Write a report for C12 item');
    btnSMS.Caption := 'Clear SMS';
    btnSMS.Tag:=1;
  end
  else
  begin
    CZKEM1.SetSMS(0, 0, '');
    CZKEM1.SetSMS(1, 0, '');
    CZKEM1.SetSMS(2, 0, '');
    btnSMS.Caption := 'Set SMS';
    btnSMS.Tag:=0;
  end;
end;

procedure TForm1.Button7Click(Sender: TObject);
var
  w,h: integer;
  image: array of byte;
begin
  setlength(image, 1024*512);
  w := 80;
  if CZKEM1.CaptureImage(TRUE, w, h, Image[0], 'fp.bmp') then
  begin
    addinfo('Captured an image.');
  end
  else
    addinfo('Capture image fail.');
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  if CZKEM1.UpdateFirmware('emfw.cfg') then
  begin
    addinfo('UpdateFirmware success.pls restart the devie.');
  end
  else
    addinfo('UpdateFirmware fail.');
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
  CZKEM1.clearLCd;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  czkem1.EnableClock(0);
  czkem1.WriteLCD(0,0,'        ***          ');
  czkem1.WriteLCD(1,0,'Welcome to ZK');
  czkem1.WriteLCD(2,0,'        ***          ');
  czkem1.WriteLCD(3,0,'        ');
  MessageDlg('Close this window to restore lcd display', mtInformation, [mbOK], 0);
  czkem1.EnableClock(1);
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
  czkem1.Beep(1000);
end;

procedure TForm1.Button13Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to 9 do
  begin
    czkem1.PlayVoiceByIndex(i);
    if MessageDlg('Continue next voice?', mtConfirmation, [mbYes,mbNo], 0) <> mrYes then
      exit;
  end;
  czkem1.PlayVoice(30,29);
end;

procedure TForm1.Button15Click(Sender: TObject);
var
  ErrorCode: integer;
begin
  CZkEM1.CancelOperation;
  CZkEM1.DelUserTmp(1, 65530, 0);
  if CZkEM1.StartEnroll(65530, 0) then
    AddInfo('Start Enroll a user, UserID=65530, FingerID=0')
  else
  begin
    CZkEM1.GetLastError(ErrorCode);
    AddInfo('StartEnroll Error, Code='+inttostr(ErrorCode));
  end;
end;

procedure TForm1.Button16Click(Sender: TObject);
var
  ErrorCode: integer;
begin
  CZkEM1.CancelOperation;
  if CZkEM1.StartVerify(65530, 0) then
    AddInfo('Start Verify a user, UserID=65530, FingerID=0')
  else
  begin
    CZkEM1.GetLastError(ErrorCode);
    AddInfo('StartVerify Error, Code='+inttostr(ErrorCode));
  end;
end;

procedure TForm1.Button17Click(Sender: TObject);
var
  ErrorCode: integer;
begin
  CZkEM1.CancelOperation;
  if CZkEM1.StartIdentify then
    AddInfo('StartIdentify user.')
  else
  begin
    CZkEM1.GetLastError(ErrorCode);
    AddInfo('StartIdentify Error, Code='+inttostr(ErrorCode));
  end;
end;

procedure TForm1.Button18Click(Sender: TObject);
var
  ErrorCode: integer;
begin
  if CZkEM1.CancelOperation then
    AddInfo('CancelOperation OK.')
  else
  begin
    CZkEM1.GetLastError(ErrorCode);
    AddInfo('CancelOperation Error, Code='+inttostr(ErrorCode));
  end;
end;

procedure TForm1.CZKEM1FingerFeature(ASender: TObject; Score: Integer);
begin
  AddInfo(format('Finger Feature: %d',[Score]));
end;

procedure TForm1.CZKEM1Verify(ASender: TObject; UserID: Integer);
begin
  AddInfo(format('User Verified: %d',[UserID]));
end;

procedure TForm1.Button19Click(Sender: TObject);
var
  ErrorCode: integer;
begin
  if SaveDialog2.Execute then
  begin
    if CZKEM1.BackupData(SaveDialog2.FileName) then
    begin
      AddInfo('Backup Data to File: "'+SaveDialog2.FileName+'" OK.');
      if OpenDialog2.FileName='' then
        OpenDialog2.FileName := SaveDialog2.FileName;
    end
    else
    begin
      CZkEM1.GetLastError(ErrorCode);
      AddInfo('CancelOperation Error, Code='+inttostr(ErrorCode));
    end;
  end;
end;

procedure TForm1.Button20Click(Sender: TObject);
var
  ErrorCode: integer;
begin
  if OpenDialog2.Execute then
  begin
    if CZKEM1.RestoreData(OpenDialog2.FileName) then
      AddInfo('Restore Data from File: "'+OpenDialog2.FileName+'" OK.')
    else
    begin
      CZkEM1.GetLastError(ErrorCode);
      AddInfo('RestoreData Error, Code='+inttostr(ErrorCode));
    end;
  end;

end;


end.

⌨️ 快捷键说明

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