#!/usr/local/bin/perl -w use lib qw(lib); use strict; use Device::Ericsson::AccessoryMenu; use Device::SerialPort; use X11::GUITest qw(SendKeys GetMousePos MoveMouseAbs PressMouseButton ReleaseMouseButton); my %mousestate; my $port = shift || '/dev/rfcomm0'; my $remote = Device::Ericsson::AccessoryMenu->new( debug => 1, port => Device::SerialPort->new( $port ) || die, menu => [ 'Remote' => [ 'X11' => sub { my $r = shift; %mousestate = (); $r->mouse_mode( callback => sub { my ($key, $updown) = @_; if ($key =~ /^[v<>^]$/) { $mousestate{$key} = $updown; } elsif ($key eq 's' and $updown eq 1) { PressMouseButton(1); } elsif ($key eq 's' and $updown eq 0) { ReleaseMouseButton(1); } elsif ($key eq 'c' and $updown eq 1) { PressMouseButton(2); } elsif ($key eq 'c' and $updown eq 0) { ReleaseMouseButton(2); } elsif ($key eq 'f' and $updown eq 1) { SendKeys("{ENT}"); } elsif ($key eq '2' and $updown eq 1) { SendKeys("{PGU}"); } elsif ($key eq '0' and $updown eq 1) { SendKeys("{PGD}"); } elsif ($key eq '1' and $updown eq 1) { SendKeys("+({TAB})"); } elsif ($key eq '3' and $updown eq 1) { SendKeys("{TAB}"); } else { print "### key $key event $updown\n"; } }); }, ], ], ); $remote->register_menu; print "Ready to rock.\n"; my $sleep = undef; my $inc = undef; while (1) { $remote->control($sleep); if (grep { $_ eq '1' } values %mousestate) { $inc ||= 5; my ($x, $y) = GetMousePos(); $y -= $inc if $mousestate{'^'}; $y += $inc if $mousestate{'v'}; $x -= $inc if $mousestate{'<'}; $x += $inc if $mousestate{'>'}; MoveMouseAbs($x, $y); $inc *= 1.2; $inc = 10 if $inc > 10; if ($sleep) { $sleep = 20; } else { $sleep = 100; } } else { $inc = undef; $sleep = undef; } }