From 39228511292647dfc0c42d49f385a69594c0aff9 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sat, 15 Aug 2020 19:07:47 -0700 Subject: [PATCH] update plugin! --- plugin/SqueezeESP32.zip | Bin 10327 -> 11502 bytes plugin/SqueezeESP32/Player.pm | 149 ++++++++++++++++++++++++++++++-- plugin/SqueezeESP32/install.xml | 2 +- plugin/repo.xml | 2 +- 4 files changed, 145 insertions(+), 8 deletions(-) diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index 1d8b8c75c2a623b291aa0cb813f54b63fb7e3c63..230d23a8061437a16c97068191a58265972c683c 100644 GIT binary patch delta 3397 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 I!wvxd0uE#Z5C8xG delta 2242 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 0, + 'bass' => 0, + 'treble' => 0, + 'lineInAlwaysOn' => 0, + 'lineInLevel' => 50, + 'menuItem' => [qw( + NOW_PLAYING + BROWSE_MUSIC + RADIO + PLUGIN_MY_APPS_MODULE_NAME + PLUGIN_APP_GALLERY_MODULE_NAME + FAVORITES + GLOBAL_SEARCH + PLUGIN_LINE_IN + PLUGINS + SETTINGS + SQUEEZENETWORK_CONNECT + )], +}; + +my $handlersAdded; + sub model { 'squeezeesp32' } sub modelName { 'SqueezeESP32' } -sub hasIR { 0 } + +sub hasScrolling { 1 } +sub hasIR { 1 } +# TODO: add in settings when ready +sub hasLineIn { 0 } +sub hasHeadSubOut { 1 } +# TODO: LMS sliders are hard-coded in html file from -23 to +23 +sub maxTreble { 20 } +sub minTreble { -13 } +sub maxBass { 20 } +sub minBass { -13 } sub init { my $client = shift; + + if (!$handlersAdded) { + + # Add a handler for line-in/out status changes + Slim::Networking::Slimproto::addHandler( LIOS => \&lineInOutStatus ); + + # Create a new event for sending LIOS updates + Slim::Control::Request::addDispatch( + ['lios', '_state'], + [1, 0, 0, undef], + ); + + Slim::Control::Request::addDispatch( + ['lios', 'linein', '_state'], + [1, 0, 0, undef], + ); + + Slim::Control::Request::addDispatch( + ['lios', 'lineout', '_state'], + [1, 0, 0, undef], + ); + + $handlersAdded = 1; + + } + $client->SUPER::init(@_); - $client->config_artwork(); + $client->config_artwork; +} + +sub initPrefs { + my $client = shift; + $sprefs->client($client)->init($defaultPrefs); + $client->SUPER::initPrefs; } # Allow the player to define it's display width (and probably more) @@ -50,12 +116,26 @@ sub playerSettingsFrame { $client->SUPER::playerSettingsFrame($data_ref); } -sub hasScrolling { - return 1; +sub bass { + return tone(2, @_); +} + +sub treble { + return tone(8, @_); } -sub hasIR { - return 1; +sub tone { + my ($center, $client, $value) = @_; + my $equalizer = $prefs->get('equalizer'); + + if (defined($value)) { + $equalizer->[$center-1] = int($value * 0.2 + 0.5); + $equalizer->[$center] = int($value * 0.7 + 0.5); + $equalizer->[$center+1] = int($value * 0.1 + 0.5); + $prefs->client($client)->set('equalizer', $equalizer); + } + + return int($equalizer->[$center-1] * 0.2 + $equalizer->[$center] * 0.7 + $equalizer->[$center+1] * 0.1); } sub update_artwork { @@ -131,4 +211,61 @@ sub reconnect { $client->SUPER::reconnect(@_); } +# Change the analog output mode between headphone and sub-woofer +# If no mode is specified, the value of the client's analogOutMode preference is used. +# Otherwise the mode is temporarily changed to the given value without altering the preference. +sub setAnalogOutMode { + my $client = shift; + # 0 = headphone (internal speakers off), 1 = sub out, + # 2 = always on (internal speakers on), 3 = always off + my $mode = shift; + + if (! defined $mode) { + $mode = $sprefs->client($client)->get('analogOutMode'); + } + + my $data = pack('C', $mode); + $client->sendFrame('audo', \$data); +} + +# LINE_IN 0x01 +# LINE_OUT 0x02 +# HEADPHONE 0x04 + +sub lineInConnected { + my $state = Slim::Networking::Slimproto::voltage(shift) || return 0; + return $state & 0x01 || 0; +} + +sub lineOutConnected { + my $state = Slim::Networking::Slimproto::voltage(shift) || return 0; + return $state & 0x02 || 0; +} + +sub lineInOutStatus { + my ( $client, $data_ref ) = @_; + + my $state = unpack 'n', $$data_ref; + + my $oldState = { + in => $client->lineInConnected(), + out => $client->lineOutConnected(), + }; + + Slim::Networking::Slimproto::voltage( $client, $state ); + + Slim::Control::Request::notifyFromArray( $client, [ 'lios', $state ] ); + + if ($oldState->{in} != $client->lineInConnected()) { + Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'linein', $client->lineInConnected() ] ); + if ( Slim::Utils::PluginManager->isEnabled('Slim::Plugin::LineIn::Plugin')) { + Slim::Plugin::LineIn::Plugin::lineInItem($client, 1); + } + } + + if ($oldState->{out} != $client->lineOutConnected()) { + Slim::Control::Request::notifyFromArray( $client, [ 'lios', 'lineout', $client->lineOutConnected() ] ); + } +} + 1; diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml index 7d20081e..d6062cce 100644 --- a/plugin/SqueezeESP32/install.xml +++ b/plugin/SqueezeESP32/install.xml @@ -10,6 +10,6 @@ PLUGIN_SQUEEZEESP32 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.94 + 0.100 Philippe diff --git a/plugin/repo.xml b/plugin/repo.xml index f13e8830..63d1326f 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -4,7 +4,7 @@ https://github.com/sle118/squeezelite-esp32 Philippe - a9bf10b47d13508ba051e4067cdabc2c283f4824 + 4a62651707d963f867451788765e740b7e1a79ac philippe_44@outlook.com SqueezeESP32 additional player id (100) http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip