#!c:\cygwin\bin\perl.exe use IO::Socket; use IO::Select; use Net::hostent; use CGI; use strict; use Data::Dumper; $| = 1; my $server = IO::Socket::INET->new(Proto => 'tcp', LocalPort => 5001, Listen => SOMAXCONN, Reuse => 1); die "can't setup server" unless $server; my $read_set = new IO::Select(); $read_set->add($server); # MAIN LOOP while (1) { my ($rh_set) = IO::Select->select($read_set, undef, undef); foreach my $rh (@$rh_set) { if ($rh == $server) { my $ns = $rh->accept(); $ns->autoflush(1); $read_set->add($ns); } else { my $buff = <$rh>; if ($buff =~ m/(data=......)/) { parse($1); } $read_set->remove($rh); close($rh); } } } sub parse { my ($buff) = shift; my $cgi = new CGI($buff); my $data = $cgi->param('data'); my ($r,$g,$b) = (0,0,0); if ($data =~ m/(..)(..)(..)/) { $r=hex($1); $g=hex($2); $b=hex($3); } $r =~ s/[^0-9]//g; $g =~ s/[^0-9]//g; $b =~ s/[^0-9]//g; $r = int($r*(1023.0/255.0)); $g = int($g*(1023.0/255.0)); $b = int($b*(1023.0/255.0)); system("hidtool.exe -r $r -g $g -b $b"); }