consider kodi playing the same as a sound trigger, so that the off command is not executed when kodi is paused for longer than the timeout

This commit is contained in:
Bob 2023-05-21 21:00:17 +02:00
parent 0a5932d7cd
commit b5ecdf7060
3 changed files with 13 additions and 15 deletions

View file

@ -52,7 +52,7 @@ CAmpSwitch::CAmpSwitch(int argc, char *argv[])
m_switchedon = false; m_switchedon = false;
m_samplecounter = 0; m_samplecounter = 0;
m_usekodi = false; m_usekodi = false;
m_playstart = false; m_playing = false;
struct option longoptions[] = struct option longoptions[] =
{ {
@ -323,12 +323,9 @@ int CAmpSwitch::PJackProcessCallback(jack_nframes_t nframes)
//if the absolute sample value is higher than the trigger level, set the switch state to on and reset the sample counter //if the absolute sample value is higher than the trigger level, set the switch state to on and reset the sample counter
bool trigger = fabsf(*(in++)) > m_triggerlevel; bool trigger = fabsf(*(in++)) > m_triggerlevel;
//Consider a playback start as a trigger. //Consider kodi playing as a trigger
if (m_playstart) if (m_playing)
{
trigger = true; trigger = true;
m_playstart = false;
}
if (trigger) if (trigger)
{ {
@ -390,8 +387,8 @@ void CAmpSwitch::SignalHandler(int signum)
g_stop = true; g_stop = true;
} }
void CAmpSwitch::SignalPlayStart() void CAmpSwitch::SetPlayingState(bool playing)
{ {
//Signal the jack client thread that playback has started. //Inform the switch thread about the play state of kodi
m_playstart = true; m_playing = playing;
} }

View file

@ -32,7 +32,7 @@ class CAmpSwitch
void Process(); void Process();
void Cleanup(); void Cleanup();
void SignalPlayStart(); void SetPlayingState(bool playing);
private: private:
void PrintHelpMessage(); void PrintHelpMessage();
@ -70,7 +70,7 @@ class CAmpSwitch
bool m_usekodi; bool m_usekodi;
CKodiClient m_kodiclient; CKodiClient m_kodiclient;
bool m_playstart; bool m_playing;
}; };
#endif //AMPSWITCH_H #endif //AMPSWITCH_H

View file

@ -76,6 +76,7 @@ void CKodiClient::Process()
} }
catch(boost::system::system_error& error) catch(boost::system::system_error& error)
{ {
m_ampswitch->SetPlayingState(false);
printf("ERROR: unable to connect to Kodi JSONRPC: %s\n", error.what()); printf("ERROR: unable to connect to Kodi JSONRPC: %s\n", error.what());
printf("Retrying in 10 seconds\n"); printf("Retrying in 10 seconds\n");
sleep(10); sleep(10);
@ -155,12 +156,12 @@ void CKodiClient::Parse(const std::string& jsonstr)
if (method == "Player.OnPlay") if (method == "Player.OnPlay")
{ {
printf("Player started\n"); printf("Player started\n");
m_ampswitch->SignalPlayStart(); m_ampswitch->SetPlayingState(true);
} }
else if (method == "Player.OnResume") else if (method == "Player.OnStop")
{ {
printf("Player unpaused\n"); printf("Player stopped\n");
m_ampswitch->SignalPlayStart(); m_ampswitch->SetPlayingState(false);
} }
} }
} }