AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)
Thema durchsuchen
Ansicht
Themen-Optionen

bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

Ein Thema von Snoop007 · begonnen am 25. Jun 2004 · letzter Beitrag vom 13. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Snoop007

Registriert seit: 14. Jan 2003
331 Beiträge
 
Delphi 6 Personal
 
#1

bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 25. Jun 2004, 13:04
Hi,
ich habe eine PCTV von Pinnacle, das mitgelierte Steuerungsprogramm der Fernbedienung erfüllt nicht meine Wünsche, so wollte ich kurzer Hand eine eigene Software schreiben, leider geht das nicht so einfach, ich habe schon diverse ComPort Komponenten benutzt auch mich auch schon selber dran versucht, alles ohne Erfolg, ich erhalte keine Daten vom Comport ausser, wenn ich das Programm starte erhalte ich eine 1

Vielleicht wiss Ihr Rat ?

ich neheme langsam an, das die software an die Hardware gedongelt ist
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#2

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 25. Jun 2004, 13:45
Wie schauts aus mit Baudrate, Parity und Stopp-Bits?
Evtl. is da was falsch eingestellt..?

Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Snoop007

Registriert seit: 14. Jan 2003
331 Beiträge
 
Delphi 6 Personal
 
#3

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 25. Jun 2004, 15:14
gute Frage, ich hab keinen blassen Schimmer welche Werte ich da eintragen muss, kann, soll, darf
ich wüsste auch nicht, wo ich das rausbekommen kann
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#4

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 29. Jun 2004, 09:59
Ich kann dir nur den Tipp geben, das Programm winLIRC zu verwenden.

Dies kannst du dann auf deine Fernbedienung programmieren und die Tasten benennen. Wenn das Programm läuft öffnet es einen TCP-Port, auf diesen connectest du dich einfach, empfängst die Befehle und führst die Aktionen aus.

Hat auch den Vorteil, dass sich beliebig viele Programme connecten können.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#5

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 29. Jun 2004, 11:34
Wenn du ein eigenes Prog machen willst, kannst du auch z.B. mit portmon von Sysinternals "abhören", was das Original-Programm an den COM-Port sendet und empfängt. Evtl. ist ja nur eine kleine Init-Sequenz oder so erforderlich, die dem Gerät sagt, das die Software gestartet wurde.
  Mit Zitat antworten Zitat
Snoop007

Registriert seit: 14. Jan 2003
331 Beiträge
 
Delphi 6 Personal
 
#6

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 30. Jun 2004, 07:04
danke für den hinweis
  Mit Zitat antworten Zitat
ddcool

Registriert seit: 8. Jun 2003
146 Beiträge
 
Delphi XE2 Architect
 
#7

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 14. Nov 2004, 13:14
Also ich hab e soweit alles schon herausgefunden:

Baudrate: 1200
Stop Bits: 1
Daten Bits: 8

mehr konnte ich leider nicht feststellen. Hat es jemand schon geschafft? Er könnte es mir ja mal schicken.



THX ddcool
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#8

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 14. Nov 2004, 18:49
Zitat von ddcool:
Hat es jemand schon geschafft?
Allerdings ... ich ... ^^ ... ich müsste exakt die gleiche fernbedienung haben. Ich hatte mal das gleiche problem, und hab mir daher das programm selber programmiert.
Pinnacle selber gibt über diese Fernbedienung überhauptkeine info raus, das hab ich bereits versucht. Daher hab ich das original Programm mittels Disassembler auseinandergenommen, und bestimmte funktionen per Hook abgefangen, um an die Parameter zu kommen. Ein recht aufwendiges Verfahren, aber es hat geklappt, mit den folgenden Ergebnissen:

Zuerst musst du den Com-Port z.B. per CreateFile 'öffnen':
CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0); Das daraus resultierende Handle speicherst du dir möglichst in eine Variable.

Diese Struktur mit den Daten, musst du an SetCommState übergeben, zum konfigurieren des Com-Ports.
Delphi-Quellcode:
var
  dcb : TDCB;

...

  with dcb do
  begin
    DCBlength := sizeof(dcb);
    BaudRate := 1200;
    Flags := 4481;
    wReserved := 0;
    XonLim := 2048;
    XoffLim := 512;
    ByteSize := 8;
    Parity := 0;
    StopBits := 0;
    XonLim := 17;
    XoffChar := #19;
    ErrorChar := #0;
    EofChar := #0;
    EvtChar := #0;
    wReserved1 := 0;
  end;
SetCommMask aufgerufen mit dem Parameter EV_RXCHAR setzt einen speziellen Event (ich weis nimmer so genau wozu).

Per SetCommTimeouts solltest du noch Timeouts für die Lese/Schreib-Operationen (schreib-timeouts auch zu setzen sollte nicht schaden ^^) setzen.

Dann kannst du z.B. in einer Schleife ReadFile aufrufen (3 bytes einlesen versuchen), wobei du, nachdem diese Funktion einen Wert zurückgibt checken musst, ob auch 3 bytes gelesen wurden. Sollte dies nicht der fall sein, war es warscheinlich ein Timeout.
Das Original-Programm liest eigentlich 3x jeweils 1 byte ein. In meinem Programm sind daher diese Bytes dann genau umgekehrt in dem buffer, aber ob die bytes verdreht sind, oder nicht, spielt meist keine große rolle, außer du willst den code entschlüsseln, aber dann kannst du die einzelnen bytes ja immernoch umdrehen
Der einfachste Weg die empfangenen Signale auszuwerten, ist warscheinlich ne case-anweisung, die das eingelesene mit hardgecodeten werten vergleicht, die du vorher natürlich herausfinden musst. Bei mir ist z.B. der KeyCode für Mute $3CB5FE . "Richtigherum" geschrieben wäre das dann $FEB53C .
ReadFile sollte man in einem eigenen Thread ausführen, da ansonsten das ganze Programm nichtmehr reagiert.
Bei längerem drücken einer Taste auf der Fernbedienung ändern sich die wiederholungs-tastencodes, damit du erkennen kannst, ob länger draufgedrückt wird/wurde.

Willst du die einzelnen teile des codes "entschlüsseln", musst du die Bytes "richtig" anordnen, dann in binärzahlen umwandeln, und schliesslich die Bits nach einem speziellen Raster anordnen. Ich hab es nicht ganz geschafft draufzukommen was all das genau bedeutet, ich hab nur herausgefunden, dass der code dem RC5 bzw. dem RC5x "Protokoll" ähnelt. Das sollte dann so gehen:
Code:
TastenCode für Taste 1 (richtig angeordnet):
FE 9F 31

in Binärschreibweise:
11111110 10011111 00110001

Angeordnet in der Code-"Maske" (die sollte es zumindest sein ...):
11 1 11110 1001 111100 110001
ss T SSSSS dddd CCCCCC DDDDDD
ss is meineswissens nach eine "code erkennung". T sollte eigentlich bei jedem Tastendruck zwischen 1 und 0 wechseln (was es aber komischerweise nicht tut), was dddd ist ist mir schleierhaft, CCCCCC sollte eine art "system command" sein, und DDDDDD sollte der eigentliche Tastencode sein. Aber das sind nur vermutungen ... wenn du da weiterkommst, wäre ich dir dankbar, wenn du es hier veröffentlichst.

Ich denke, mit diesen Tipps solltest du dir problemlos ein Programm schreiben können, dass deinen Anforderungen gerecht wird.

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 13. Mär 2005, 13:59
Hallo Philipp,

ich habe deinen Code versucht, scheitere aber schon am CreateFile. Mein Laptop hat eine eingebaute IR-Schnittstelle, die laut Bios am COM4 haengt. Jedoch gibt der Aufruf mit COM4 als Name immer -1 zurueck, bei COM1 bzw. COM3 immer 1888. Das macht mich dann doch etwas stutzig. Hat jemand eine Ahnung warum es nicht geht?
PS: OS ist WinXP Pro SP2, nur falls das was ausmacht....

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#10

Re: bekomme keine Daten vom ComPort (Pinnacle Fernbedienung)

  Alt 13. Mär 2005, 14:48
hmm ... das kann nun natürlich mehrere gründe haben ...
Vielleicht läuft ein programm, das bereits auf Com4 zugreift, oder der Com-Port ist nicht installiert (siehe im gerätemanager). Es kann alles mögliche sein ... vielleicht mag er auch einfach den namen "Com4" nicht ... du könntest es daher mal mit "\\.\COM4\" probieren. Oder lass einfach mal GENERIC_WRITE weg ... einfach nen bissl rumtesten ...

Interessant könnte vielleicht auch noch GetLastError sein ... im Falle eines schon geöffneten Com ports krieg ich da nämlich 5 als fehlercode zurück ... was auch immer das bedeutet ...

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:26 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