-
Notifications
You must be signed in to change notification settings - Fork 0
/
Unicorn.pm
60 lines (51 loc) · 1.13 KB
/
Unicorn.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package Unicorn;
use strict;
use warnings;
use IO::Socket::UNIX;
my $UNICORND_SOCKET_PATH = "/var/run/unicornd.socket";
my $UNICORND_CMD_SET_BRIGHTNESS = 0;
my $UNICORND_CMD_SET_PIXEL = 1;
my $UNICORND_CMD_SET_ALL_PIXELS = 2;
my $UNICORND_CMD_SHOW = 3;
sub set_all_pixels
{
my $self = shift;
my $command = pack "C*", $UNICORND_CMD_SET_ALL_PIXELS, @_;
$self->{socket}->send($command);
}
sub clear
{
my $self = shift;
$self->set_all_pixels((0,0,0) x 64);
}
sub set_pixel
{
my $self = shift;
my $command = pack "CCCCCC", $UNICORND_CMD_SET_PIXEL, @_;
$self->{socket}->send($command);
}
sub show
{
my $self = shift;
my $command = pack "C", $UNICORND_CMD_SHOW;
$self->{socket}->send($command);
}
sub set_brightness
{
my $self = shift;
my $brightness = shift;
my $command = pack "Cd", $UNICORND_CMD_SET_BRIGHTNESS, $brightness;
$self->{socket}->send($command);
}
sub new
{
my ($class) = @_;
my $socket = IO::Socket::UNIX->new(
Peer => $UNICORND_SOCKET_PATH,
Type => SOCK_STREAM(),
);
return bless {
socket => $socket,
}, $class;
}
1;