AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzung von C nach Delphi (IOCTL)

Ein Thema von Rads · begonnen am 22. Dez 2015 · letzter Beitrag vom 22. Dez 2015
 
Rads

Registriert seit: 31. Aug 2015
5 Beiträge
 
Delphi XE8 Professional
 
#1

Übersetzung von C nach Delphi (IOCTL)

  Alt 22. Dez 2015, 09:17
Morgen zusammen,

Ich musste den folgenden C-Code nach Delphi portieren, um den GPIO-Baustein anzusprechen.

C-Headerdatei:

Code:

/* Device type
#define GPIO_IOCTL_TYPE 0x9000

#define IOCTL_GPIO_WRITE \
    CTL_CODE( GPIO_IOCTL_TYPE, 0x901, METHOD_OUT_DIRECT , FILE_ANY_ACCESS)

#define IOCTL_GPIO_DIRECTION \
    CTL_CODE( GPIO_IOCTL_TYPE, 0x902, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

#define ...


Typedef Enum
{
    CONNECT_MODE_INVALID = 0,
    CONNECT_MODE_INPUT,
    CONNECT_MODE_OUTPUT,
    CONNECT_MODE_MAXIMUM = CONNECT_MODE_OUTPUT
} GPIO_CONNECT_IO_PINS_MODE;


typedef struct
{
    ULONG pin;
    union
    {
        ULONG data_B;
        GPIO_CONNECT_IO_PINS_MODE ConnectMode;
    } ABC;
} GPIO_PIN_PARAMS, *PGPIO_PIN_PARAMS;
Ich habe das so übersetzt:
Daraus ergibt sich dann in Delphi folgendes ?
Delphi-Quellcode:

const
  GPIO_IOCTL_TYPE = $9000;
  GPIO_Device ='\\.\DEVICE';//Name
  IOCTL_GPIO_WRITE = DWORD((GPIO_IOCTL_TYPE shl 16) or (2 shl 14) or ($901 shl 2) or 0);
  IOCTL_GPIO_DIRECTION = DWORD((GPIO_IOCTL_TYPE shl 16) or (2 shl 14) or ($902 shl 2) or 0);
  //...

(* ----------------------------------------------------------- *)
Type // Typedef Enum
  _GPIO_Connect_IO_PINS_MODE = (
    CONNECT_MODE_INVALID = 0,
    CONNECT_MODE_INPUT,
    CONNECT_MODE_OUTPUT,
    CONNECT_MODE_MAXIMUM = CONNECT_MODE_OUTPUT
  );
  GPIO_Connect_IO_PINS_MODE = _GPIO_Connect_IO_PINS_MODE;
(* ----------------------------------------------------------- *)
Type
  C_Enum =(Var_Cardinal, Var_GPIO);
(* ----------------------------------------------------------- *)
Type
  PABC = ^TABC;
  TABC = Record
    case _Pin : C_Enum of
      Var_Cardinal :(data_B: Cardinal);
      Var_GPIO :(Var_ConnectMode: _GPIO_Connect_IO_PINS_MODE);
    end;
(* ----------------------------------------------------------- *)
Type // TypeDef struct
  PPGIO_PARAMS = ^TPGIO_PARAMS;
  TPGIO_PARAMS = record
    Pin : Cardinal;
    ABC : TABC;
  end;
Da der Zugriff (auf die GPIO-Schnittstelle) nicht funktioniert, wollte ich erstmal fragen ob meine Übersetzung stimmt??

Ich möchte einen Pin (z.B: 1) als Ausgang konfigurieren und ihn dann setzen:

Die Procedure sieht dann so aus:
Delphi-Quellcode:
var
  frmMain : TfrmMain;
  DeviceHandle : THandle;
  Params : TPGIO_PARAMS;
  nReturn : DWORD;


procedure TfrmMain.Button1Click(Sender: TObject);
begin
  DeviceHandle := CreateFile(Pchar(GPIO_Device), GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ OR
                  FILE_SHARE_WRITE, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL OR
                  FILE_FLAG_NO_BUFFERING, 0);

  if DeviceHandle <> INVALID_HANDLE_VALUE then
  begin
    //Konfiguration (Direction): Output
    Params.Pin := 1; //Pin 1
    Params.ABC.Var_ConnectMode := Connect_Mode_OutPut; //Pin Direction is set to Output
    DeviceIoControl(DeviceHandle, IOCTL_GPIO_DIRECTION, @Params, SizeOf(Params), Nil, 0, nReturn, nil);
    //Zugriff :Write
    Params.ABC.Data_B := 0;//255 // Hier bin ich mir nicht sicher, was ich hier eingeben muss ???
    Params.Pin := 1;
    DeviceIoControl(DeviceHandle, IOCTL_GPIO_Write, @Params, SizeOf(Params), Nil, 0, nReturn, nil);
    CloseHandle(DriveHandle);
  end
  else
  begin
    MessageDlg('Error!', mtWarning, [mbOK], 0);
  end;
end;
Der Compiler bringt keine Fehlermeldung, aber es funktioniert nicht..

Danke schonmal im Voraus für die Hilfe

Geändert von Rads (22. Dez 2015 um 09:24 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz