Hallo zusammen,
ich habe ein paar Änderungen ins CVS eingescheckt, um die
Lauffähigkeit unter Windows zu ermöglichen(FHZ, EM und WS300):
1. Ersetzen des statische "use Device::SerialPort; new ..." durch if
($^O=~/Win/) {
eval ("use Win32::SerialPort;");
my $po = new Win32::SerialPort ($DeviceName);
}else{
eval ("use Device::SerialPort;");
my $po = new Device::SerialPort ($DeviceName);
}
2. Da das Select unter Windows offensichtlich nur für Sockets wie
erwartet funktioniert, habe ich eine neue Funktion "ReadyFn"
eingeführt, welche selbst überprüft, ob Daten da sind und true/false
zurückgeben soll. Ich habe das in meinem WS200-Modul genutzt, in dem
ich dort eine Abfrage auf $PortObj->status eingebaut habe und der read
dann auch klappt
3. Wenn HandleTimeout() undef zurückgibt, wartet das select ewig. Ich
habe jetzt mal ein ||0.2 rangehangen. Viel größer sollte es nicht
sein, da sonst die Puffer überlaufen können. Was macht HandleTimeout()
überhaupt für das select? 15min Warten in der loop ist nicht ganz
logisch für mich. Aber vielleicht gibt es noch andere Gründe.
4.FileLog: $fh->sync gibt es nicht unter windows, habe ich deshalb mit
einem if !($^O eq 'MSWin32') versehen.
Ich hoffe, mit meinen Änderungen nicht gegen eine wichtige
Programmlogik vestossen zu haben.
Viele Grüße
Tommi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Hi,
tommi:
> eval ("use Device::SerialPort;");
Wie wäre es stattdessen mit einem simplen
require Device::SerialPort;
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: Das Zitat wurde zufällig ausgewählt. | http://smurf.noris.de
- -
Mit einer Quitscheente ist man nie allein.
-- frei nach Douglas Adams "Per Anhalter durch die Galaxis"
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
> > eval ("use Device::SerialPort;");
>
> Wie wäre es stattdessen mit einem simplen
>
> require Device::SerialPort;
Jo, geht bestimmt auch. Hat diese Methode Vorteile gegenüber eval (das
ist ja auch nur ein Einzeiler :-))))? Ziel ist ja, einen compile error
zu vermeiden, wenn wan das falsche Modul anzieht.
Tommi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
Ein kleiner Fehler war noch drin. Das "my $po" im if war im falschem
scope.
Es muss heissen:
my $po;
if ($^O=~/Win/) {
eval ("use Win32::SerialPort;"); # oder require
Win32::SerialPort;
$po = new Win32::SerialPort ($DeviceName);
}else{
eval ("use Device::SerialPort;");
$po = new Device::SerialPort ($DeviceName);
}
Tommi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Hi,
tommi:
> Jo, geht bestimmt auch. Hat diese Methode Vorteile gegenüber eval (das
> ist ja auch nur ein Einzeiler :-))))? Ziel ist ja, einen compile error
> zu vermeiden, wenn wan das falsche Modul anzieht.
>
Den Error bekommst du in der Zeile drauf sowieso um die Nase geknallt.
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: Das Zitat wurde zufällig ausgewählt. | http://smurf.noris.de
- -
Aus einer Kleinanzeige: Verkaufe vollelektronischen Fensterheber für
Windows95.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
Das M232-Modul habe ich jetzt auch "bearbeitet", so das es auch unter
windows sauber arbeitet. Nach dem Senden des Kommandos war jedoch ein
sleep(1); notwendig, weil das gute Stück wohl nicht so schnell
antworten kann.
Tommi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-