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

📄 main.~pas

📁 USB interface examples using CDC by HT-PICC 18
💻 ~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 + -