Delphi - IOW Übergibt zu viele Ereignisse

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
dsn
Posts: 3
Joined: Tue Oct 30, 2007 11:22 pm

Delphi - IOW Übergibt zu viele Ereignisse

Post by dsn »

Hallo

Ich nutze den IOW als Plugin für mein Media Cetner.
Mittels DLL Callback wird der Befehl an das Main Programm übergeben.
Drücke ich einmal zu lange auf die Fernbedienung so wird das Callback mehrmals aufgerufen.
Am schlimmsten ist das Problem wenn ich versuche per Fernbedienung das Media Center zu beenden, er ruft vor dem Close immernoch mindestens einmal die Procedure auf. Dies macht das Beenden pratisch unmöglich.
Schalte ich allerdings alle Plugins vorher ab, so hängt immernoch mindestens einmal der Procedureaufruf im Speicher und hängt sich dann dort mit einer AV weg.

Übergabe der DLL
FSendData ist vom Typ: TPluginReceiveData = function(MCP_Index: Integer; Command: Integer): Boolean; stdcall;

Code: Select all

procedure ReadData(Address, Command: Byte);
  var
    I: Integer;
begin
  if Assigned(FSendData) then begin
    for I := Low(IRCommandList) to High(IRCommandList) do begin
      if IRCommandList[I].IRCommand = InttoStr(Command) then begin

        IOW_Controller.DataReceived := nil; // Übergabe nil setzen
        if FSendData(Self_Index, IRCommandList[I].Command) then; // Befehl übergeben
          IOW_Controller.DataReceived := ReadData; // Übergabe wieder aktivieren

        end;
      end;
    end;
end;
Main

Code: Select all

function ReceiveData_(MCP_Index: Integer; Command: Integer): Boolean; stdcall;
begin
  Main_Frm.ReceiveData(MCP_Index, Command);
  Result := False;
end;

begin
  case Command of
    CMD_MENU:         ;
    CMD_MUTE:         ;
    CMD_VOLUP:        ;
    CMD_VOLDOWN:      ;

    CMD_UP:           Self.FMC_Menu.ButtonActive := Self.FMC_Menu.ButtonActive -1;
    CMD_DOWN:         Self.FMC_Menu.ButtonActive := Self.FMC_Menu.ButtonActive +1;
    CMD_LEFT:         ;
    CMD_RIGHT:        ;

    CMD_PLAY:         ;
    CMD_STOP:         ;
    CMD_NEXT:         ;
    CMD_PREV:         ;

    CMD_0:            ;
    CMD_1:            ;
    CMD_2:            ;
    CMD_3:            ;
    CMD_4:            ;
    CMD_5:            ;
    CMD_6:            ;
    CMD_7:            ;
    CMD_8:            ;
    CMD_9:            ;

    CMD_TOGLESCREEN:  ;
    CMD_MODE_AUDIO:   ;
    CMD_MODE_VIDEO:   ;
    CMD_SELECT:       Self.SelectPressed;
  end;
end;
Ist es möglich irgendwie die einfach während der Befehl abgearbeitet wird es zu unterbrechen das Daten gesammelt werden bzw. sie einfach irgnorieren?

Gruß

dsn
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Eine IR Fernbedienung wiederholt das Datenpaket so lange die Taste gedrückt bleibt. Ich nehme an das ist das Problem.

Man kann natürlich die Funktion für den RC5 Empfang deaktivieren, dann ändert sich aber immer noch der Status des Pins an dem der Empfänger hängt.
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Re: Delphi - IOW Übergibt zu viele Ereignisse

Post by wayoda »

Hallo,
dsn wrote: Drücke ich einmal zu lange auf die Fernbedienung so wird das Callback mehrmals aufgerufen.
Das Verhalten ist normal für Fernbedinungen. Wenn man eine Taste länger hält wird der gleiche Befehl nochmal gesendet. Der RC5 code der Fernbedienung enthält hierzu ein spezielles Bit das anzeigt ob die Taste erstmalig gedrückt wurde, oder festgehalten wird. Im Datenblatt des Iow24 finden sich Hinweise dazu (siehe RC5 mode "Toggle Bit").

Eberhard
dsn
Posts: 3
Joined: Tue Oct 30, 2007 11:22 pm

Post by dsn »

Sorry das ich mich jetzt erst wieder zu Wort melde aber hatte viel um die Ohren.

Ich betätige die Taste nur einmal kurz und die CallBack wird mindestens 2 oder 3 mal aufgerufen.
Ich dachte das TogleBit ändert sich generell von Befehl zu Befehl, wenn ich das hier aber richtig verstehe müsste bei jedem neuen Befehl das TogleBit immer ein und den selben Wert annehmen.
Wäre in dem fall ja eigentlich sau gut wenn ich nur diesen Mode nutzen würde aber gerade was Lautstärkeregelung angeht wäre es von Vorteil auch das Ereignis des durchgehenden drückens zu haben.
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Die Sender wiederholen das Datenpaket relativ schnell hintereinander, bei einem kurzen Tastendruck bekommt man im Normalfall so 2-5 Datenpakete.

Das Toggle Bit ändert sich wenn man die Taste loslässt und wieder drückt.

Ein längeres Drücken der Taste kann man entsprechend daran erkennen, dass etliche male hintereinander genau das gleiche Datenpaket ankommt.
dsn
Posts: 3
Joined: Tue Oct 30, 2007 11:22 pm

Post by dsn »

Das wäre in dem Fall ka dann doch recht einfach ich prüfe ob das TogleBit 1 ist und der selbe Command und sende es dann. Bei Paket 3 und 5 hätte ich aber wieder das Selbe Signal und es würde raus gehen.
Was gäbe es denn sonst noch für Möglichkeiten?
Post Reply