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

📄 main.~pas

📁 USB interface examples using CDC by HT-PICC 18
💻 ~PAS
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, XPMan;

Const
   MAXSIZE=64;
   MP_WRITE:DWORD=0;
   MP_READ:DWORD=1;


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;
  TFrmMain = class(TForm)
    btKetnoi: TBitBtn;
    btLed1: TBitBtn;
    btLed2: TBitBtn;
    btLed3: TBitBtn;
    lbKetnoi: TLabel;
    btNhan: TBitBtn;
    txtReDll: TEdit;
    XPManifest1: TXPManifest;
    procedure FormCreate(Sender: TObject);
    procedure btKetnoiClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btLed1Click(Sender: TObject);
    procedure btLed2Click(Sender: TObject);
    procedure btLed3Click(Sender: TObject);
    procedure btNhanClick(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 _MPUSBClose(handle:THANDLE):DWORD; 
             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';

var
  vid_pid:PCHAR8='vid_04d8&pid_0011';
  out_pipe:PCHAR8='\MCHP_EP1';
  in_pipe:PCHAR8='\MCHP_EP1';
  myOutPipe:THANDLE;
  myInPipe:THANDLE;  
  isConnected:boolean;

  FrmMain: TFrmMain;
implementation

{$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);
    if myOutPipe <> INVALID_HANDLE_VALUE then
    begin
        _MPUSBWrite(myOutPipe,Data,Len,SentDataLength,100)
    end;
   _MPUSBClose(myOutPipe);
    myOutPipe:=INVALID_HANDLE_VALUE;
End;

procedure ReceiveData(var ReceiveData:PBYTE;var ReceiveLength:DWORD);
var     ExpectedReceiveLength:DWORD;
        selection:DWORD;
begin
    selection:=0;
    ExpectedReceiveLength:=ReceiveLength;
    myInPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_READ,0);
    if myInPipe <> INVALID_HANDLE_VALUE then
    begin
        _MPUSBRead(myInPipe,ReceiveData,ExpectedReceiveLength,ReceiveLength,100);
        if ExpectedReceiveLength<>ReceiveLength then
        begin
            Application.MessageBox('D

⌨️ 快捷键说明

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