summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/Makefile2
-rw-r--r--perl-install/detect_devices.pm19
-rw-r--r--perl-install/mouse.pm27
3 files changed, 41 insertions, 7 deletions
diff --git a/perl-install/Makefile b/perl-install/Makefile
index 87df7183b..af5c289a3 100644
--- a/perl-install/Makefile
+++ b/perl-install/Makefile
@@ -9,7 +9,7 @@ STAGE2 = $(ROOTDEST)/Mandrake/base/mdkinst_stage2
BASE = $(ROOTDEST)/Mandrake/base
DESTREP4PMS = $(DEST)$(REP4PMS)
PERL = perl
-LOCALFILES = pnp_serial mouseconfig
+LOCALFILES = pnp_serial
LOCALFILES2 = extract_archive
DIRS = c Newt po pci_probing resize_fat
EXCLUDE = $(LOCALFILES) boot.img keymaps consolefonts install
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm
index a7fe2ed86..a6ce0575b 100644
--- a/perl-install/detect_devices.pm
+++ b/perl-install/detect_devices.pm
@@ -206,12 +206,23 @@ sub whatPrinterPort() {
grep { tryWrite($_)} qw(/dev/lp0 /dev/lp1 /dev/lp2);
}
-sub hasModem($) {
- my ($device) = @_;
+sub probe_device($) {
+ my $device = devices::make($_[0]);
my %probe;
- local *F; open F, "pnp_serial $device |";
+
+ #- TODO cache hash result of probe according to device.
+ local *F;
+ open F, "pnp_serial $device 2>/dev/null |" if $device =~ /ttyS/;
+
foreach (<F>) { $probe{$1} = $2 if /^\s+(.*?)\s*:\s*\"(.*)\"\s*$/ }
- $probe{CLASS} =~ /Modem/i && $probe{DESCRIPTION};
+ log::l("probing $device find class: $probe{CLASS}");
+
+ \%probe;
+}
+
+sub hasModem($) {
+ my $probe = probe_device($_[0]);
+ $probe->{CLASS} =~ /MODEM/i && $probe->{DESCRIPTION};
}
sub hasMousePS2() {
diff --git a/perl-install/mouse.pm b/perl-install/mouse.pm
index 9dd539623..92d6683b5 100644
--- a/perl-install/mouse.pm
+++ b/perl-install/mouse.pm
@@ -86,13 +86,36 @@ sub write($;$) {
symlinkf $mouse->{device}, "$prefix/dev/mouse" or log::l("creating $prefix/dev/mouse symlink failed");
}
+sub mouseconfig {
+ my ($t, $mouse);
+
+ foreach (0..1) { #- probe only ttyS0 and ttyS1.
+ $t = detect_devices::probe_device(devices::make("/dev/ttyS$_"));
+ if ($t->{CLASS} =~ /MOUSE/i) {
+ $t->{MFG} ||= $t->{MANUFACTURER};
+
+ $mouse = name2mouse("Microsoft IntelliMouse (serial)") if $t->{MFG} eq 'MSH' && $t->{MODEL} eq '0001';
+ $mouse = name2mouse("Logitech MouseMan/FirstMouse (serial)") if $t->{MFG} eq 'LGI' && $t->{MODEL} =~ /^80/;
+ $mouse = name2mouse("Genius NetMouse (serial)") if $t->{MFG} eq 'KYE' && $t->{MODEL} eq '0003';
+
+ $mouse ||= name2mouse("Generic Mouse (serial)"); #- generic by default.
+ $mouse->{device} = "ttyS$_";
+ last;
+ }
+ }
+ $mouse;
+}
+
sub detect() {
detect_devices::hasMousePS2 and return name2mouse("Generic Mouse (PS/2)");
- my %l;
eval { commands::modprobe("serial") };
- @l{qw(FULLNAME nbuttons MOUSETYPE XMOUSETYPE device)} = split("\n", `mouseconfig --nointeractive 2>/dev/null`) and return \%l;
+ my $r; $r = mouseconfig(); return $r if $r;
modules::unload("serial");
+ #- my %l;
+ #- eval { commands::modprobe("serial") };
+ #- @l{qw(FULLNAME nbuttons MOUSETYPE XMOUSETYPE device)} = split("\n", `mouseconfig --nointeractive 2>/dev/null`) and return \%l;
+ #- modules::unload("serial");
if (my ($c) = pci_probing::main::probe("SERIAL_USB")) {
eval { modules::load($c->[1], 'usbmouse') };