rfexamp.pas 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. unit rfexamp;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5. StdCtrls, Buttons;
  6. type
  7. TForm1 = class(TForm)
  8. ListBox1: TListBox;
  9. Button4: TButton;
  10. Button3: TButton;
  11. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  12. procedure Button3Click(Sender: TObject);
  13. procedure Button4Click(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. { Public declarations }
  18. end;
  19. var
  20. Form1: TForm1;
  21. icdev: longint;
  22. snr:longint;
  23. n1key,n2key,keya,keyb,wdata,sendblock,B0,B1,B2,B3,Bk:pchar;
  24. st,sector,block,loadmode:smallint;
  25. status:Array[0..18]of Char;
  26. databuff:Array[0..15]of Char;
  27. ack:Array[0..255]of Char;
  28. {a example for your to try using .dll. add_s return i+1}
  29. function add_s(i: smallint): smallint; stdcall;
  30. far;external 'mwrf32.dll' name 'add_s';
  31. {comm function.}
  32. function rf_init(port: smallint;baud:longint): longint; stdcall;
  33. far;external 'mwrf32.dll' name 'rf_init';
  34. function rf_exit(icdev: longint):smallint;stdcall;
  35. far;external 'mwrf32.dll'name 'rf_exit';
  36. function rf_encrypt(key:pchar;ptrsource:pchar;msglen:smallint;ptrdest:pchar):smallint;stdcall;
  37. far;external 'mwrf32.dll' name 'rf_encrypt';
  38. function rf_decrypt(key:pchar;ptrsource:pchar;msglen:smallint;ptrdest:pchar):smallint;stdcall;
  39. far;external 'mwrf32.dll' name 'rf_decrypt';
  40. //
  41. function rf_card(icdev:longint;mode:smallint;snr:pChar):smallint;stdcall;
  42. far;external 'mwrf32.dll'name 'rf_card';
  43. function rf_load_key(icdev:longint;mode,secnr:smallint;nkey:pchar):smallint;stdcall;
  44. far;external 'mwrf32.dll' name 'rf_load_key';
  45. function rf_load_key_hex(icdev:longint;mode,secnr:smallint;nkey:pchar):smallint;stdcall;
  46. far;external 'mwrf32.dll' name 'rf_load_key_hex';
  47. function rf_authentication(icdev:longint;mode,secnr:smallint):smallint;stdcall;
  48. far;external 'mwrf32.dll' name 'rf_authentication';
  49. //
  50. function rf_read(icdev:longint;adr:smallint;data:pchar):smallint;stdcall;
  51. far;external 'mwrf32.dll' name 'rf_read';
  52. function rf_read_hex(icdev:longint;adr:smallint;data:pchar):smallint;stdcall;
  53. far;external 'mwrf32.dll' name 'rf_read_hex';
  54. function rf_write(icdev:longint;adr:smallint;data:pchar):smallint;stdcall;
  55. far;external 'mwrf32.dll' name 'rf_write';
  56. function rf_write_hex(icdev:longint;adr:smallint;data:pchar):smallint;stdcall;
  57. far;external 'mwrf32.dll' name 'rf_write_hex';
  58. function rf_HL_writehex(icdev:longint;adr:smallint;snr:longint;data:pchar):smallint;stdcall;
  59. far;external 'mwrf32.dll' name 'rf_HL_writehex';
  60. function rf_halt(icdev:longint):smallint;stdcall;
  61. far;external 'mwrf32.dll' name 'rf_halt';
  62. function rf_reset(icdev:longint;msec:smallint):smallint;stdcall;
  63. far;external 'mwrf32.dll' name 'rf_reset';
  64. //M1 CARD
  65. function rf_initval(icdev:longint;adr:smallint;value:longint):smallint;stdcall;
  66. far;external 'mwrf32.dll' name 'rf_initval';
  67. function rf_readval(icdev:longint;adr:smallint;value:pchar):smallint;stdcall;
  68. far;external 'mwrf32.dll' name 'rf_readval';
  69. function rf_increment(icdev:longint;adr:smallint;value:longint):smallint;stdcall;
  70. far;external 'mwrf32.dll' name 'rf_increment';
  71. function rf_decrement(icdev:longint;adr:smallint;value:longint):smallint;stdcall;
  72. far;external 'mwrf32.dll' name 'rf_decrement';
  73. function rf_restore(icdev:longint;adr:smallint):smallint;stdcall;
  74. far;external 'mwrf32.dll' name 'rf_restore';
  75. function rf_transfer(icdev:longint;adr:smallint):smallint;stdcall;
  76. far;external 'mwrf32.dll' name 'rf_transfer';
  77. function rf_check_write(icdev,snr:longint;adr,authmode:smallint;data:pchar):smallint;stdcall;
  78. far;external 'mwrf32.dll' name 'rf_check_write';
  79. function rf_check_writehex(icdev,snr:longint;adr,authmode:smallint;data:pchar):smallint;stdcall;
  80. far;external 'mwrf32.dll' name 'rf_check_writehex';
  81. //M1 CARD HIGH FUNCTION
  82. function rf_HL_initval(icdev:longint;mode:smallint;secnr:smallint;value:longint;snr:pchar):smallint;stdcall;
  83. far;external 'mwrf32.dll' name 'rf_HL_initval';
  84. function rf_HL_increment(icdev:longint;mode:smallint;secnr:smallint;value,snr:longint;svalue,ssnr:pchar):smallint;stdcall;
  85. far;external 'mwrf32.dll' name 'rf_HL_increment';
  86. function rf_HL_decrement(icdev:longint;mode:smallint;secnr:smallint;value:longint;snr:longint;svalue,ssnr:pchar):smallint;stdcall;
  87. far;external 'mwrf32.dll' name 'rf_HL_decrement';
  88. function rf_HL_write(icdev:longint;mode,adr:smallint;ssnr,sdata:pchar):smallint;stdcall;
  89. far;external 'mwrf32.dll' name 'rf_HL_write';
  90. function rf_HL_read(icdev:longint;mode,adr:smallint;snr:longint;sdata,ssnr:pchar):smallint;stdcall;
  91. far;external 'mwrf32.dll' name 'rf_HL_read';
  92. function rf_changeb3(icdev:longint;Adr:smallint;keyA:pchar;B0:smallint;B1:smallint;B2:smallint;B3:smallint;Bk:smallint;KeyB:pchar):smallint;stdcall;
  93. far;external 'mwrf32.dll' name 'rf_changeb3';
  94. //DEVICE
  95. function rf_get_status(icdev:longint;status:pchar):smallint;stdcall;
  96. far;external 'mwrf32.dll' name 'rf_get_status';
  97. function rf_beep(icdev:longint;time:smallint):smallint;stdcall;
  98. far;external 'mwrf32.dll' name 'rf_beep';
  99. function rf_ctl_mode(icdev:longint;ctlmode:smallint):smallint;stdcall;
  100. far;external 'mwrf32.dll' name 'rf_ctl_mode';
  101. function rf_disp_mode(icdev:longint;mode:smallint):smallint;stdcall;
  102. far;external 'mwrf32.dll' name 'rf_disp_mode';
  103. function rf_disp8(icdev:longint;len:longint;disp:pchar):smallint;stdcall;
  104. far;external 'mwrf32.dll' name 'rf_disp8';
  105. function rf_disp(icdev:longint;pt_mode:smallint;disp:longint):smallint;stdcall;
  106. far;external 'mwrf32.dll' name 'rf_disp';
  107. //
  108. //寻卡
  109. function rf_request(icdev:longint;find_mode:smallint;cardtype:pchar):smallint;stdcall;
  110. far;external 'mwrf32.dll' name 'rf_request';
  111. function rf_anticoll(icdev:longint;find_mode:pchar;snr:pchar):smallint;stdcall;
  112. far;external 'mwrf32.dll' name 'rf_anticoll';
  113. function rf_select(icdev:longint;snr:longint;size:pchar):smallint;stdcall;
  114. far;external 'mwrf32.dll' name 'rf_select';
  115. function rf_settimehex(icdev:longint;dis_time:pchar):smallint;stdcall;
  116. far;external 'mwrf32.dll' name 'rf_settimehex';
  117. function rf_gettimehex(icdev:longint;dis_time:pchar):smallint;stdcall;
  118. far;external 'mwrf32.dll' name 'rf_gettimehex';
  119. function rf_swr_eeprom(icdev:longint;offset,len:smallint;data:pchar):smallint;stdcall;
  120. far;external 'mwrf32.dll' name 'rf_swr_eeprom';
  121. function rf_srd_eeprom(icdev:longint;offset,len:smallint;data:pchar):smallint;stdcall;
  122. far;external 'mwrf32.dll' name 'rf_srd_eeprom';
  123. //ML CARD
  124. function rf_authentication_2(icdev:longint;mode,keyNum,secnr:smallint):smallint;stdcall;
  125. far;external 'mwrf32.dll' name 'rf_authentication_2';
  126. function rf_initval_ml(icdev:longint;value:longint):smallint;stdcall;
  127. far;external 'mwrf32.dll' name 'rf_initval_ml';
  128. function rf_readval_ml(icdev:longint;rvalue:pchar):smallint;stdcall;
  129. far;external 'mwrf32.dll' name 'rf_readval_ml';
  130. function rf_decrement_transfer(icdev:longint;adr:smallint;value:longint):smallint;stdcall;
  131. far;external 'mwrf32.dll' name 'rf_decrement_transfer';
  132. function rf_sam_rst(icdev:longint;baud:smallint;samack:pChar):smallint;stdcall;
  133. far;external 'mwrf32.dll' name 'rf_sam_rst';
  134. function rf_sam_trn(icdev:longint;samblock,recv:pChar):smallint;stdcall;
  135. far;external 'mwrf32.dll' name 'rf_sam_trn';
  136. function rf_sam_off(icdev:longint):smallint;stdcall;
  137. far;external 'mwrf32.dll' name 'rf_sam_off';
  138. function rf_cpu_rst(icdev:longint;baud:smallint;cpuack:pChar):smallint;stdcall;
  139. far;external 'mwrf32.dll' name 'rf_cpu_rst';
  140. function rf_cpu_trn(icdev:longint;cpublock,recv:pChar):smallint;stdcall;
  141. far;external 'mwrf32.dll' name 'rf_cpu_trn';
  142. function rf_pro_rst(icdev:longint;_Data:pChar):smallint;stdcall;
  143. far;external 'mwrf32.dll' name 'rf_pro_rst';
  144. function rf_pro_trn(icdev:longint;problock,recv:pChar):smallint;stdcall;
  145. far;external 'mwrf32.dll' name 'rf_pro_trn';
  146. function rf_pro_halt(icdev:longint):smallint;stdcall;
  147. far;external 'mwrf32.dll' name 'rf_pro_halt';
  148. function hex_a(hex,a:pChar;length:smallint):smallint;stdcall;
  149. far;external 'mwrf32.dll' name 'hex_a';
  150. function a_hex(a,hex:pChar;length:smallint):smallint;stdcall;
  151. far;external 'mwrf32.dll' name 'a_hex';
  152. implementation
  153. {$R *.DFM}
  154. procedure TForm1.Button4Click(Sender: TObject);
  155. begin
  156. icdev:=rf_init(0,115200); //串口1 波特率115200
  157. if icdev<=0 then
  158. listbox1.Items.Add('Init error');
  159. st:=rf_get_status(icdev,@status);
  160. if st<>0 then
  161. listbox1.Items.Add('Init ERR')
  162. else
  163. listbox1.Items.Add('Init OK');
  164. listbox1.Items.Add('Hard Ver: '+ status);
  165. n1key:='ffffffffffff';
  166. n2key:='ffffffffffff';
  167. for block:=0 to 15 do
  168. begin
  169. st:=rf_load_key_hex(icdev,0,block,n1key); //加载A密码
  170. st:=rf_load_key_hex(icdev,4,block,n2key); //加载B密码
  171. end;
  172. if st<>0 then
  173. listbox1.items.add('load keyhex error')
  174. else
  175. listbox1.items.add('load keyhex Ok');
  176. rf_beep(icdev,50);
  177. end;
  178. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  179. begin
  180. st:=rf_exit(icdev);
  181. end;
  182. procedure TForm1.Button3Click(Sender: TObject);
  183. var
  184. value,i:longint;
  185. cardtype:longint;
  186. size:pchar;
  187. begin
  188. st:=rf_card(icdev,0,@snr); //寻卡
  189. if st<>0 then
  190. listbox1.items.add('card snr error')
  191. else
  192. listbox1.items.add('card snr Ok:'+inttostr(snr));
  193. wdata:='ffffffffffffff078069ffffffffffff'; //要改写的密码块,前12位为A密码 ,后12位为B密码 ,中间ff078069为控制块
  194. sector:= 2; //扇区
  195. block:=sector*4+3; //密码块
  196. st:=rf_authentication(icdev,0,sector); //以A密码验证
  197. //st:=rf_authentication(icdev,4,sector); //以B密码验证
  198. if st<>0 then
  199. listbox1.items.add(IntToStr(sector)+'密码验证不成功!!!!!!!!!!!');
  200. //else
  201. //listbox1.items.add(IntToStr(sector)+'密码验证成功 Ok');
  202. listBox1.ItemIndex:=ListBox1.Items.Count-1;
  203. st:=rf_write_hex(icdev,block,wdata);
  204. if st<>0 then
  205. listbox1.items.add(IntToStr(sector)+'密码修改不成功!!!!!!!!!!!')
  206. else
  207. listbox1.items.add(IntToStr(sector)+'扇区 change key Ok');
  208. //rf_beep(icdev,10); //beep 200ms
  209. listBox1.ItemIndex:=ListBox1.Items.Count-1;
  210. rf_beep(icdev,50);
  211. end;
  212. end.