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__ |