diff --git a/src/sf-button-monitor b/src/sf-button-monitor index fd08e4e..ffe8c9d 100755 --- a/src/sf-button-monitor +++ b/src/sf-button-monitor @@ -166,12 +166,14 @@ sub main(@){ my @pattern; my $lastButtonMillis = nowMillis(); open $inputDevFH, "< $INPUT_DEV"; + open $kbDevFH, "< $KEYBOARD_DEV"; my $select = IO::Select->new(); $select->add($inputDevFH); + $select->add($kbDevFH); while(1){ - my ($buttonId, $value) = readButtonEvent($inputDevFH); + my ($buttonId, $value) = readButtonEvent($select); my $now = nowMillis(); my $elapsedMillis = $now - $lastButtonMillis; @@ -212,15 +214,18 @@ sub main(@){ #blocks until a valid button press/release event and then returns it sub readButtonEvent($){ - my ($inputDevFH) = @_; + my ($select) = @_; my $byteStr; while(1){ - read $inputDevFH, $byteStr, 16; - my @bytesDec = map {ord $_} split //, $byteStr; - my $buttonId = $bytesDec[10]; - my $value = $bytesDec[12]; - if(defined $OK_BUTTON_IDS{$buttonId}){ - return ($buttonId, $value); + my @fhs = $select->can_read(); + if(@fhs > 0){ + read $fhs[0], $byteStr, 16; + my @bytesDec = map {ord $_} split //, $byteStr; + my $buttonId = $bytesDec[10]; + my $value = $bytesDec[12]; + if(defined $OK_BUTTON_IDS{$buttonId}){ + return ($buttonId, $value); + } } } }