|
@@ -13,16 +13,32 @@ my $TIMEOUT = 900;
|
|
|
my $COUNTDOWN = 119;
|
|
my $COUNTDOWN = 119;
|
|
|
my $OFF_DELAY = 15;
|
|
my $OFF_DELAY = 15;
|
|
|
my $CMD_DELAY = 20;
|
|
my $CMD_DELAY = 20;
|
|
|
-my $COLOR_HIGH = 'NATURAL';
|
|
|
|
|
-my $COLOR_PLAY = 'THEATER';
|
|
|
|
|
-my $COLOR_LOW = 'THEATER_BLACK_1';
|
|
|
|
|
-my $LAMP_LIFE = 2000;
|
|
|
|
|
|
|
|
|
|
# Available color modes, bright to dark:
|
|
# Available color modes, bright to dark:
|
|
|
-# DYNAMIC
|
|
|
|
|
-# NATURAL
|
|
|
|
|
-# THEATER
|
|
|
|
|
-# THEATER_BLACK_1
|
|
|
|
|
|
|
+# DYNAMIC
|
|
|
|
|
+# NATURAL
|
|
|
|
|
+# THEATER
|
|
|
|
|
+# THEATER_BLACK_1
|
|
|
|
|
+#
|
|
|
|
|
+# Color modes by proportion of lamp life
|
|
|
|
|
+my $LAMP_LIFE = 2000;
|
|
|
|
|
+my %COLORS = (
|
|
|
|
|
+ '0.425' => {
|
|
|
|
|
+ 'high' => 'THEATER',
|
|
|
|
|
+ 'play' => 'THEATER_BLACK_1',
|
|
|
|
|
+ 'low' => 'THEATER_BLACK_1',
|
|
|
|
|
+ },
|
|
|
|
|
+ '0.675' => {
|
|
|
|
|
+ 'high' => 'NATURAL',
|
|
|
|
|
+ 'play' => 'THEATER',
|
|
|
|
|
+ 'low' => 'THEATER_BLACK_1',
|
|
|
|
|
+ },
|
|
|
|
|
+ '0.875' => {
|
|
|
|
|
+ 'high' => 'DYNAMIC',
|
|
|
|
|
+ 'play' => 'THEATER',
|
|
|
|
|
+ 'low' => 'THEATER_BLACK_1',
|
|
|
|
|
+ },
|
|
|
|
|
+);
|
|
|
|
|
|
|
|
# App config
|
|
# App config
|
|
|
my $DATA_DIR = DMX::dataDir();
|
|
my $DATA_DIR = DMX::dataDir();
|
|
@@ -58,7 +74,10 @@ my $update = 0;
|
|
|
my $lastAnnounce = 0;
|
|
my $lastAnnounce = 0;
|
|
|
my $lastUser = time();
|
|
my $lastUser = time();
|
|
|
my $shutdown = 0;
|
|
my $shutdown = 0;
|
|
|
-my $color = $COLOR_LOW;
|
|
|
|
|
|
|
+my $life = 0;
|
|
|
|
|
+my @color_sets = sort {$a <=> $b} keys(%COLORS);
|
|
|
|
|
+my $color_set = $color_sets[0];
|
|
|
|
|
+my $color = $COLORS{$color_set}{'low'};
|
|
|
|
|
|
|
|
# Loop forever
|
|
# Loop forever
|
|
|
while (1) {
|
|
while (1) {
|
|
@@ -141,6 +160,25 @@ while (1) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ # Select a color set based on the lamp life
|
|
|
|
|
+ if (exists($exists{'PROJECTOR_LAMP'})) {
|
|
|
|
|
+ $life = $exists{'PROJECTOR_LAMP'} / $LAMP_LIFE;
|
|
|
|
|
+ if ($DEBUG) {
|
|
|
|
|
+ print STDERR 'Lamp life: ' . $life . "%\n";
|
|
|
|
|
+ }
|
|
|
|
|
+ my $max_set_num = scalar(@color_sets) - 1;
|
|
|
|
|
+ $color_set = $max_set_num;
|
|
|
|
|
+ for (my $i = 0; $i < $max_set_num; $i++) {
|
|
|
|
|
+ if ($life < $color_sets[$i]) {
|
|
|
|
|
+ $color_set = $color_sets[$i];
|
|
|
|
|
+ last;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($DEBUG) {
|
|
|
|
|
+ print STDERR 'Color set: ' . $color_set . "%\n";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
# Calculate the color mode
|
|
# Calculate the color mode
|
|
|
# PLAY for normal playback
|
|
# PLAY for normal playback
|
|
|
# HIGH when playing and LIGHTS || BRIGHT
|
|
# HIGH when playing and LIGHTS || BRIGHT
|
|
@@ -151,21 +189,24 @@ while (1) {
|
|
|
if ($newState eq 'PLAY') {
|
|
if ($newState eq 'PLAY') {
|
|
|
$playLights = 1;
|
|
$playLights = 1;
|
|
|
} elsif ($exists{'PLAYING_TYPE'} eq 'Audio') {
|
|
} elsif ($exists{'PLAYING_TYPE'} eq 'Audio') {
|
|
|
- $color = $COLOR_LOW;
|
|
|
|
|
|
|
+ $color = $COLORS{$color_set}{'low'};
|
|
|
} elsif ($elapsed > $TIMEOUT / 2) {
|
|
} elsif ($elapsed > $TIMEOUT / 2) {
|
|
|
- $color = $COLOR_LOW;
|
|
|
|
|
|
|
+ $color = $COLORS{$color_set}{'low'};
|
|
|
} elsif ($exists{'GUI'}) {
|
|
} elsif ($exists{'GUI'}) {
|
|
|
- $color = $COLOR_HIGH;
|
|
|
|
|
|
|
+ $color = $COLORS{$color_set}{'high'};
|
|
|
} else {
|
|
} else {
|
|
|
$playLights = 1;
|
|
$playLights = 1;
|
|
|
}
|
|
}
|
|
|
# If playLights was set, choose the color mode based on the LIGHTS setting
|
|
# If playLights was set, choose the color mode based on the LIGHTS setting
|
|
|
if ($playLights) {
|
|
if ($playLights) {
|
|
|
- $color = $COLOR_PLAY;
|
|
|
|
|
|
|
+ $color = $COLORS{$color_set}{'play'};
|
|
|
if ($exists{'LIGHTS'} || $exists{'BRIGHT'}) {
|
|
if ($exists{'LIGHTS'} || $exists{'BRIGHT'}) {
|
|
|
- $color = $COLOR_HIGH;
|
|
|
|
|
|
|
+ $color = $COLORS{$color_set}{'high'};
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ if ($DEBUG) {
|
|
|
|
|
+ print STDERR 'Selected color: ' . $color . "\n";
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
# Force updates on a periodic basis
|
|
# Force updates on a periodic basis
|
|
|
if (!$update && time() - $pushLast > $PUSH_TIMEOUT) {
|
|
if (!$update && time() - $pushLast > $PUSH_TIMEOUT) {
|
|
@@ -248,11 +289,6 @@ while (1) {
|
|
|
|
|
|
|
|
# Announce lamp life status, if near/past $LAMP_LIFE
|
|
# Announce lamp life status, if near/past $LAMP_LIFE
|
|
|
if (exists($exists{'PROJECTOR_LAMP'})) {
|
|
if (exists($exists{'PROJECTOR_LAMP'})) {
|
|
|
- my $life = $exists{'PROJECTOR_LAMP'} / $LAMP_LIFE;
|
|
|
|
|
- if ($DEBUG) {
|
|
|
|
|
- print STDERR 'Lamp life: ' . $life . "%\n";
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
if ($life > 0.9) {
|
|
if ($life > 0.9) {
|
|
|
my $chance = ($life - 0.9) * 10;
|
|
my $chance = ($life - 0.9) * 10;
|
|
|
if (rand(1) <= $chance) {
|
|
if (rand(1) <= $chance) {
|