Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 738 → Rev 739

/MissionCockpit/tags/V0.4.1/libmouse.pl
0,0 → 1,133
#!/usr/bin/perl
#!/usr/bin/perl -d:ptkdb
 
###############################################################################
#
# libmouse.pl - 3D Mouse Space Navigator
#
# Copyright (C) 2009 Rainer Walther (rainerwalther-mail@web.de)
#
# Creative Commons Lizenz mit den Zusaetzen (by, nc, sa)
#
# Es ist Ihnen gestattet:
# * das Werk vervielfältigen, verbreiten und öffentlich zugänglich machen
# * Abwandlungen bzw. Bearbeitungen des Inhaltes anfertigen
#
# Zu den folgenden Bedingungen:
# * Namensnennung.
# Sie müssen den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
# * Keine kommerzielle Nutzung.
# Dieses Werk darf nicht für kommerzielle Zwecke verwendet werden.
# * Weitergabe unter gleichen Bedingungen.
# Wenn Sie den lizenzierten Inhalt bearbeiten oder in anderer Weise umgestalten,
# verändern oder als Grundlage für einen anderen Inhalt verwenden,
# dürfen Sie den neu entstandenen Inhalt nur unter Verwendung von Lizenzbedingungen
# weitergeben, die mit denen dieses Lizenzvertrages identisch oder vergleichbar sind.
#
# Im Falle einer Verbreitung müssen Sie anderen die Lizenzbedingungen, unter welche dieses
# Werk fällt, mitteilen. Am Einfachsten ist es, einen Link auf diese Seite einzubinden.
#
# Jede der vorgenannten Bedingungen kann aufgehoben werden, sofern Sie die Einwilligung
# des Rechteinhabers dazu erhalten.
#
# Diese Lizenz lässt die Urheberpersönlichkeitsrechte unberührt.
#
# Weitere Details zur Lizenzbestimmung gibt es hier:
# Kurzform: http://creativecommons.org/licenses/by-nc-sa/3.0/de/
# Komplett: http://creativecommons.org/licenses/by-nc-sa/3.0/de/legalcode
#
###############################################################################
#
# 2009-12-09 0.0.1 rw created
#
###############################################################################
 
$Version{'libmouse.pl'} = "0.0.1 - 2009-12-09";
 
# Packages
use threads; # http://search.cpan.org/~jdhedden/threads-1.72/threads.pm
# http://perldoc.perl.org/threads.html
use threads::shared; # http://search.cpan.org/~jdhedden/threads-shared-1.28/shared.pm
 
# Hashes exported to other threads and main-program
share (%Stick);
 
my $StickRange = 1024; # global stick range
my $Bias = $StickRange/2;
my $ResMouse = 1000; # +-500
my $MousePrg = "bin/3DMouse.exe";
 
sub Mouse3D()
{
if ( ! -f $MousePrg )
{
return;
}
 
$Stick{'StickRange'} = $StickRange;
$Stick{'MouseRotX'} = $Bias;
$Stick{'MouseRotY'} = $Bias;
$Stick{'MouseRotZ'} = $Bias;
$Stick{'MouseTranX'} = $Bias;
$Stick{'MouseTranY'} = $Bias;
$Stick{'MouseTranZ'} = $Bias;
$Stick{'MouseButton'} = 0;
$Stick{'_MouseTimestamp'} = time;
 
$Stick{'_MousePid'} = open (my $fh, "$MousePrg |");
 
while (my $Line = <$fh> )
{
if ( $Line =~ /Device 0: DOF: T: (\S*)\s*(\S*)\s*(\S*) R: (\S*)\s*(\S*)\s*(\S*)/g )
{
$TranslateX= $1;
$TranslateY= $2;
$TranslateZ= $3;
$RotateX= $4;
$RotateY= $5;
$RotateZ= $6;
 
lock (%Stick); # until end of block
 
$Stick{'MouseRotX'} = $Bias - int ($RotateY / $ResMouse * $StickRange);
$Stick{'MouseRotY'} = $Bias - int ($RotateX / $ResMouse * $StickRange);
$Stick{'MouseRotZ'} = $Bias + int ($RotateZ / $ResMouse * $StickRange);
$Stick{'MouseTranX'} = $Bias + int ($TranslateX / $ResMouse * $StickRange);
$Stick{'MouseTranY'} = $Bias - int ($TranslateY / $ResMouse * $StickRange);
$Stick{'MouseTranZ'} = $Bias + int ($TranslateZ / $ResMouse * $StickRange);
$Stick{'_MouseTimestamp'} = time;
}
elsif ( $Line =~ /Device 0: Button mask: (\S*)/g )
{
$Button = $1;
 
lock (%Stick); # until end of block
$Stick{'MouseButton'} = sprintf ("%d", $Button);
$Stick{'_MouseTimestamp'} = time;
}
}
}
 
 
# Kill Mouse3D Proceess
sub Mouse3DStop()
{
my $MousePid = $Stick{'_MousePid'};
if ( $MousePid ne "" )
{
kill -9, $MousePid;
}
}
 
 
# check, if button "Num" pressed, Num = 0 .. n
sub MouseButton()
{
my ($Num) = @_;
 
return (($Stick{'MouseButton'} >> $Num) & 1) == 1;
}
 
1;
 
__END__