📄 main.~pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Menus, Buttons;
Const
MAXSIZE=64;
MPUSB_FAIL=0;
MPUSB_SUCCESS=1;
MP_WRITE:DWORD=0;
MP_READ:DWORD=1;
MAX_NUM_MPUSB_DEV=127;
type
DWORD = LongInt;
PCHAR8 = array[0..MAXSIZE] of char;
PBYTE = array[0..MAXSIZE] of BYTE;
PDWORD = array[0..MAXSIZE] of DWORD;
PVOID = Pointer;
UINT = Cardinal;
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function _MPUSBGetDLLVersion():DWORD; stdcall;external 'mpusbapi.dll';
function _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD; stdcall;external 'mpusbapi.dll';
function _MPUSBOpen(instance:DWORD;pVID_PID:PCHAR8;pEP:PCHAR8;dwDir:DWORD;dwReserved:DWORD):THANDLE; stdcall;external 'mpusbapi.dll';
function _MPUSBRead(handle:THANDLE;var pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll';
function _MPUSBReadInt(handle:THANDLE;var pData:PBYTE;dwLen:DWORD;var pLength:PDWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll';
function _MPUSBWrite(handle:THANDLE;pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll';
function _MPUSBClose(handle:THANDLE):DWORD; stdcall;external 'mpusbapi.dll';
var
Form1: TForm1;
vid_pid:PCHAR8='vid_04d8&pid_0011';
out_pipe:PCHAR8='\MCHP_EP1';
in_pipe:PCHAR8='\MCHP_EP1';
myOutPipe:THANDLE;
myInPipe:THANDLE;
isConnected:boolean;
send_buf:PBYTE;
receive_buf:PBYTE;
implementation
uses ShellAPI;
{$R *.DFM}
procedure CheckInvalidHandle();
begin
if(GetLastError=ERROR_INVALID_HANDLE) then
begin
_MPUSBClose(myOutPipe);
_MPUSBClose(myInPipe);
myInPipe:=INVALID_HANDLE_VALUE;
myOutPipe:=INVALID_HANDLE_VALUE;
end
else
ShowMessage('Error Code :'+inttostr(GetLastError()));
end;
Procedure SendData(Data: PBYTE;Len:Longint);
Var
SentDataLength:DWORD ;
selection:DWORD;
Begin
selection:=0;
myOutPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_WRITE,0);
myInPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_READ,0);
if((myOutPipe <> INVALID_HANDLE_VALUE) and (myInPipe <> INVALID_HANDLE_VALUE)) then
begin
_MPUSBWrite(myOutPipe,Data,Len,SentDataLength,50)
end;
_MPUSBClose(myOutPipe);
_MPUSBClose(myInPipe);
myInPipe:= INVALID_HANDLE_VALUE;
myOutPipe:=INVALID_HANDLE_VALUE;
End;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (myOutPipe <> INVALID_HANDLE_VALUE) then _MPUSBClose(myOutPipe);
if (myInPipe <> INVALID_HANDLE_VALUE) then _MPUSBClose(myInPipe);
myInPipe:= INVALID_HANDLE_VALUE;
myOutPipe:=INVALID_HANDLE_VALUE;
end;
//-------------------------------------------------
// Connect to USB device and read firmware version
//-------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
selection:DWORD;
begin
selection:=0; // USB device that have PID & VID as we configed.
if (_MPUSBGetDeviceCount(vid_pid)=0) then
begin
StatusBar1.Panels[1].text:='Status : Device not connected';
StatusBar1.Panels[0].text:='Firmware version : unkhown';
exit;
end
else
begin
StatusBar1.Panels[1].text:='Status : Device connected';
end;
myOutPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_WRITE,0);
myInPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_READ,0);
_MPUSBClose(myOutPipe);
_MPUSBClose(myInPipe);
myInPipe:= INVALID_HANDLE_VALUE;
myOutPipe:=INVALID_HANDLE_VALUE;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
myOutPipe:=INVALID_HANDLE_VALUE;
myInPipe:= INVALID_HANDLE_VALUE;
end;
procedure TForm1.Button2Click(Sender: TObject);
var dulieu:PBYTE;
begin
dulieu[0]:=1;
dulieu[1]:=1;
SendData(dulieu,2);
end;
procedure TForm1.Button3Click(Sender: TObject);
var dulieu:PBYTE;
begin
dulieu[0]:=1;
dulieu[1]:=2;
SendData(dulieu,2);
end;
procedure TForm1.Button4Click(Sender: TObject);
var dulieu:PBYTE;
begin
dulieu[0]:=1;
dulieu[1]:=3;
SendData(dulieu,2);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -