📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
List: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mBuf:array[0..100] of Byte;
mFun,mP1,mP2,mP3,mP4,rt:Word;
lP1,lP2:LongWord;
mHand:array[0..16] of Word;
mHardID:array[0..16] of LongWord;
rc:array[0..4] of Word;
function Rockey(fun:Word; var Handle:Word;
var lp1,lp2:LongWord;
var P1,P2,P3,P4:Word;
var buf:Byte):Word;
stdcall;external 'Rockey4ND.dll';
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
i,num:Integer;
str:string;
mRockeyNumber:Word;
tmpBuf:array[0..30] of Byte;
cStr:array[0..100] of Char;
RY_FIND,RY_FIND_NEXT,RY_OPEN,RY_CLOSE,RY_READ :Word;
RY_WRITE,RY_RANDOM,RY_SEED,RY_WRITE_USERID:Word;
RY_READ_USERID,RY_SET_MOUDLE,RY_CHECK_MOUDLE,RY_WRITE_ARITHMETIC:Word;
RY_CALCULATE1,RY_CALCULATE2,RY_CALCULATE3,RY_DECREASE:Word;
begin
RY_FIND :=1 ; {找锁}
RY_FIND_NEXT :=2 ; {找下一锁}
RY_OPEN :=3 ; {打开锁}
RY_CLOSE :=4 ; {关闭锁}
RY_READ :=5 ; {读锁}
RY_WRITE :=6 ; {写锁}
RY_RANDOM :=7 ; {产生随机数 }
RY_SEED :=8 ; {产生种子码 }
RY_WRITE_USERID :=9 ; {写用户 ID }
RY_READ_USERID :=10; {读用户 ID }
RY_SET_MOUDLE :=11; {设置模块字 }
RY_CHECK_MOUDLE :=12; {检查模块状态}
RY_WRITE_ARITHMETIC :=13; {写算法 }
RY_CALCULATE1 :=14; {计算 1 }
RY_CALCULATE2 :=15; {计算 2 }
RY_CALCULATE3 :=16; {计算 3 }
RY_DECREASE :=17; {递减模块单元 }
List.Items.Clear();
mP1:=$c44c;
mP2:=$c8f8;
mP3:=$799;
mP4:=$c43b;
for i:=0 to 30 do
mBuf[i]:=0;
rt:=0;
mFun:=1;
rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'没找到ROCKEY4ND,error:0x%x ',[rt]);
List.Items.Add(str);
exit;
end;
List.Items.Add('找到第1个ROCKEY4ND');
mHardID[0]:=lp1;
mFun:=RY_OPEN;
rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'没打开ROCKEY4ND,error:0x%x ',[rt]);
List.Items.Add(str);
exit;
end;
//Rockey4ND返回的类型是7,Rockey4返回的类型是
// 1 ROCKEY4 标准并口类型
// 2 ROCKEY4+ 增强并口类型
// 3 ROCKEY4 标准 USB 类型
// 4 ROCKEY4+ 增强 USB 类型
// 5 ROCKEY4 网络并口类型
// 6 ROCKEY4 网络 USB 类型
//Rockey4ND,Rockey4类型都通过lp2返回
if(lP2=7) then
List.Items.Add('已打开ROCKEY4ND');
i:=1;
while rt = 0 do
begin
mFun:=RY_FIND_NEXT;
rt:= Rockey(mFun,mHand[i],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
break;
mHardID[i]:=lP1;
FmtStr(str,'找到第0x%x个ROCKEY4ND',[i+1]);
List.Items.Add(str);
mFun:=RY_OPEN;
rt:= Rockey(mFun,mHand[i],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'没打开第0x%x个ROCKEY4ND',[i+1]);
List.Items.Add(str);
break;
end;
//识别类型
if(lP2=7) then
FmtStr(str,'已打开第0x%x个ROCKEY4ND',[i+1]);
List.Items.Add(str);
i:=i+1;
end;
mRockeyNumber:=i;
for num:=0 to mRockeyNumber-1 do
begin
List.Items.Add('*******************************************');
FmtStr(str,'开始测试第0x%x个ROCKEY4ND',[num+1]);
List.Items.Add(str);
{写}
mFun:=RY_WRITE;
for i:=0 to 10 do
mBuf[i]:=31;
mP1:=498;
mP2:=11;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'写ROCKEY4ND时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'写ROCKEY4ND正确',[i+1]);
List.Items.Add('正确写入ROCKEY4ND');
{读}
mFun:=RY_READ;
for i:=0 to 10 do
tmpBuf[i]:=0;
mP1:=498;
mP2:=11;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,tmpBuf[0]);
if rt<>0 then
begin
FmtStr(str,'读ROCKEY4ND时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end
else
begin
for i:=0 to 10 do
if mBuf[i] <> tmpBuf[i] then
break;
if i = 11 then
List.Items.Add('正确读出ROCKEY4ND')
else
List.Items.Add('正确读出ROCKEY4ND,但与写入的不同');
end;
{随机数}
mFun:=RY_RANDOM;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'检测随机数时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'随机数0x%x:',[mP1]);
List.Items.Add(str);
{种子码}
mFun:=RY_SEED;
lP2:=$12345678;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'发送种子码时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'种子码0x%x:返回值:0x%x,0x%x,0x%x,0x%x',[lP2,mP1,mP2,mP3,mP4]);
List.Items.Add(str);
rc[0] := mP1; rc[1] := mP2;
rc[2] := mP3; rc[3] := mP4;
{写用户ID}
mFun:=RY_WRITE_USERID;
lP1:=100;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'写用户ID时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'写用户ID0x%x',[lP1]);
List.Items.Add(str);
{读用户ID}
mFun:=RY_READ_USERID;
lP1:=0;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'读用户ID时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'读出用户ID0x%x',[lP1]);
List.Items.Add(str);
{设置模块}
mFun:=RY_SET_MOUDLE;
mP1:=7;
mP2:=$2122;
mP3:=1;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'设置模块0x%x时发现0x%x号错',[mP1,rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'设置模块0x%x,为0x%x,可递减',[mP1,mP2]);
List.Items.Add(str);
{检测模块第一次}
mFun:=RY_CHECK_MOUDLE;
mP1:=7;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'检测模块0x%x时发现0x%x号错',[mP1,rt]);
List.Items.Add(str);
break;
end;
if mP2 = 1 then
if mP3 = 1 then
FmtStr(str,'检测模块0x%x,有效,可递减',[mP1])
else
FmtStr(str,'检测模块0x%x,有效,不可递减',[mP1])
else
if mP3 = 1 then
FmtStr(str,'检测模块0x%x,无效,可递减',[mP1])
else
FmtStr(str,'检测模块0x%x,无效,不可递减',[mP1]) ;
List.Items.Add(str);
{递减}
mFun:=RY_DECREASE;
mP1:=7;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'递减模块0x%x时发现0x%x号错',[mP1,rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'递减模块0x%x,为0X2121',[mP1]);
List.Items.Add(str);
{写算法1}
cstr:='H=H^H, A=A*23, F=B*17, A=A+F, A=A+G, A=A<C, A=A^D, B=B^B, C=C^C, D=D^D';
for i:=0 to strlen(cstr) do
mBuf[i]:= Byte(cstr[i]);
mBuf[i]:=0;
mFun:=RY_WRITE_ARITHMETIC;
mP1:=0;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'写算法1时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
List.Items.Add('正确写入算法1');
{计算一}
mFun:=RY_CALCULATE1;
lP1 := 0; lP2 := 7;
mP1 := 5; mP2 := 3;
mP3 := 1; mP4 := $ffff;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'计算1时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
List.Items.Add('计算输入: p1=5, p2=3, p3=1, p4=0xffff');
List.Items.Add('结果: = ((5*23 + 3*17 + 0x2121) < 1) ^ 0xffff = BC71');
FmtStr(str,'计算输出: p1=0x%x, p2=0x%x, p3=0x%x, p4=0x%x',[mP1,mP2,mP3,mP4]);
List.Items.Add(str);
{写算法2}
cstr:='A=A+B, A=A+C, A=A+D, A=A+E, A=A+F, A=A+G, A=A+H';
for i:=0 to strlen(cstr) do
mBuf[i]:= Byte(cstr[i]);
mBuf[i]:=0;
mFun:=RY_WRITE_ARITHMETIC;
mP1:=10;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'写算法2时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
List.Items.Add('正确写入算法2');
{计算2}
mFun:=RY_CALCULATE2;
lP1 := 10; lP2 := $12345678;
mP1 := 1; mP2 := 2;
mP3 := 3; mP4 := 4;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'计算2时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
List.Items.Add('计算输入: p1=1, p2=2, p3=3, p4=4');
FmtStr(str,'结果: %04x + %04x + %04x + %04x + 1 + 2 + 3 + 4 = %04x',[rc[0], rc[1], rc[2], rc[3], Word(rc[0]+rc[1]+rc[2]+rc[3]+10)]);
List.Items.Add(str);
FmtStr(str,'计算输出: p1=0x%x, p2=0x%x, p3=0x%x, p4=0x%x',[mP1,mP2,mP3,mP4]);
List.Items.Add(str);
{写算法3}
cstr:='A=E|E, B=F|F, C=G|G, D=H|H';
for i:=0 to strlen(cstr) do
mBuf[i]:= Byte(cstr[i]);
mBuf[i]:=0;
mFun:=RY_WRITE_ARITHMETIC;
mP1:=17;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'写算法3时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
List.Items.Add('正确写入算法3');
{递减}
mFun:=RY_DECREASE;
mP1:=7;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'递减模块0x%x时发现0x%x号错',[mP1,rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'递减模块0x%x,为0X2120',[mP1]);
List.Items.Add(str);
{计算3}
mFun:=RY_CALCULATE3;
lP1 := 17; lP2 := 6;
mP1 := 1; mP2 := 2;
mP3 := 3; mP4 := 4;
rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,'计算3时发现0x%x号错',[rt]);
List.Items.Add(str);
break;
end;
FmtStr(str,'读出从6开始的模块字: 0x%x,0x%x,0x%x,0x%x',[mP1,mP2,mP3,mP4]);
List.Items.Add(str);
end;
for num:=0 to mRockeyNumber-1 do
begin
rt:= Rockey(RY_CLOSE,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
begin
List.Items.Add('关闭Rockey4ND');
break;
end;
end;
end;
//procedure TMainForm.BitBtn1Click(Sender: TObject);
//begin
// close()
//end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close()
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -