2025-02-23 18:02:35 -05:00

444 lines
12 KiB
C

#include "define.h"
#include "AudioConsole.h"
#include "timer.h"
#include "ProtocolDefs.h"
#include "NetworkProtocol.h"
#include "VUMeter.h"
#include "PushBtnMgr.h"
#include "AudioConsoleLedMgr.h"
AVReceiverStatus_t mMainZoneStatus, mZone2Status;
bool mMasterInterfaceConnected;
int mAudioConsoleState;
int mAudioConsoleStatusRetryCount;
int AudioConsoleInit()
{
ProtocolInit(NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF);
mMasterInterfaceConnected = false;
mAudioConsoleState = AUDIO_CONSOLE_INIT_STATE;
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
mAudioConsoleStatusRetryCount = 0;
mZone2Status.MainVolume = 0;
mMainZoneStatus.MainVolume = 0;
}
int AudioConsoleSetReceiverStatus(AVReceiverStatus_t *MainZone, AVReceiverStatus_t *Zone2)
{
mAudioConsoleStatusRetryCount = 0;
mMainZoneStatus.MainPwrStatus = MainZone ->MainPwrStatus;
mMainZoneStatus.MainSleepStatus = MainZone->MainSleepStatus;
mMainZoneStatus.IsMute = MainZone->IsMute;
mMainZoneStatus.DataValid = MainZone->DataValid;
mMainZoneStatus.ReceiverOnline = MainZone->ReceiverOnline;
mMainZoneStatus.SyncZones = MainZone->SyncZones;
mMainZoneStatus.MainVolume = MainZone->MainVolume;
mZone2Status.MainPwrStatus = Zone2 ->MainPwrStatus;
mZone2Status.MainSleepStatus = Zone2->MainSleepStatus;
mZone2Status.IsMute = Zone2->IsMute;
mZone2Status.DataValid = Zone2->DataValid;
mZone2Status.ReceiverOnline = Zone2->ReceiverOnline;
mZone2Status.SyncZones = Zone2->SyncZones;
mZone2Status.MainVolume = Zone2->MainVolume;
VUMeterSetVolume(mMainZoneStatus.MainVolume,mZone2Status.MainVolume);
UpdatePushButtonLEDs(&mMainZoneStatus,&mZone2Status);
return RET_OK;
}
int AudioConsoleSM(int Event)
{
switch(mAudioConsoleState)
{
case AUDIO_CONSOLE_INIT_STATE:
{
//At boot, we wait for wifi to connect first...
if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
{
if(IsWiFiConnected() == true)
{
ConnectAudioInterface();
mAudioConsoleState = AUDIO_CONSOLE_CONNECTING_STATE;
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_CONNECT_TIMEOUT);
}
else
{
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
}
}
break;
}
case AUDIO_CONSOLE_DISCONNECTED_STATE:
{
switch(Event)
{
case AUDIO_CONSOLE_SM_TICK_EVENT:
{
if(IsWiFiConnected() == true)
{
if(ConnectAudioInterface() == RET_ERROR)
{
//Socket don't work anymore... not shure what to do.
int toto = 1;
toto ++;
}
mAudioConsoleState = AUDIO_CONSOLE_CONNECTING_STATE;
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_CONNECT_TIMEOUT);
}
else
{
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
}
break;
}
case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
{
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
RequestStatus();
mAudioConsoleState = AUDIO_CONSOLE_RUN_STATE;
break;
}
case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
{
break;
}
}
break;
}
case AUDIO_CONSOLE_CONNECTING_STATE:
{
switch(Event)
{
case AUDIO_CONSOLE_SM_TICK_EVENT:
{
if(IsWiFiConnected() == false)
{
AudioConsoleDisconnected();
}
else if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
{
AudioConsoleDisconnected(); //Retry to connect...
}
break;
}
case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
{
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
RequestStatus();
mAudioConsoleState = AUDIO_CONSOLE_RUN_STATE;
LedMgrShowOfflineMode(false);
break;
}
case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
{
AudioConsoleDisconnected();
break;
}
}
break;
}
case AUDIO_CONSOLE_RUN_STATE:
{
switch(Event)
{
case AUDIO_CONSOLE_SM_TICK_EVENT:
{
if(IsAudioInterfaceConnected() == false || IsWiFiConnected() == false)
{
AudioConsoleDisconnected();
}
else if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
{
if(RequestStatus() == RET_OK)
{
TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
}
else
{
AudioConsoleDisconnected();
}
}
break;
}
case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
{
//Should not happen....
break;
}
case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
{
AudioConsoleDisconnected();
break;
}
}
break;
}
}
}
void AudioConsoleTick()
{
AudioConsoleSM(AUDIO_CONSOLE_SM_TICK_EVENT);
}
int AudioConsoleSetIFConnectionStatus(bool Connected)
{
if(Connected == true)
{
ONBOARD_LED1_PIN = LED_ON;
AudioConsoleSM(AUDIO_CONSOLE_SM_CONNECTED_EVENT);
}
else
{
ONBOARD_LED1_PIN = LED_OFF;
AudioConsoleSM(AUDIO_CONSOLE_SM_DISCONNECTED_EVENT);
}
}
int RequestStatus()
{
if(mAudioConsoleStatusRetryCount >= AUDIO_CONSOLE_MAX_STATUS_RETRY)
{
return RET_ERROR;
}
mAudioConsoleStatusRetryCount++;
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_GENERAL_STATUS_REQUEST,0,0);
return RET_OK;
}
int SendMainVolumeToMaster()
{
char Volume = mMainZoneStatus.MainVolume;
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST,&Volume,1);
return RET_OK;
}
int SendZone2VolumeToMaster()
{
char Volume = mZone2Status.MainVolume;
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST,&Volume,1);
return RET_OK;
}
int SendIncrementMainVolume(bool Increment)
{
char data;
if(Increment == true)
{
data = 1;
}
else
{
data = 0;
}
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_INCREMENT_MAIN_VOLUME_REQUEST,&data,1);
return RET_OK;
}
int SendIncrementZ2Volume(bool Increment)
{
char data;
if(Increment == true)
{
data = 1;
}
else
{
data = 0;
}
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_INCREMENT_Z2_VOLUME_REQUEST,&data,1);
return RET_OK;
}
int AudioConsoleDisconnected()
{
//TODO reset console display
ONBOARD_LED1_PIN = LED_OFF;
mAudioConsoleStatusRetryCount = 0;
DisconnectAudioInterface();
mAudioConsoleState = AUDIO_CONSOLE_DISCONNECTED_STATE;
TimerStop(CONSOLE_IF_CONNECT_TIMER);
LedMgrShowOfflineMode(true);
}
int AudioConsoleVolumeUp(int Zone)
{
switch(Zone)
{
case AUDIO_CONSOLE_SALON_ZONE:
{
// if(mMainZoneStatus.MainVolume == AUDIO_CONSOLE_MAX_VOLUME)
// return RET_OK;
//
// mMainZoneStatus.MainVolume += AUDIO_CONSOLE_VOLUME_INCREMENT;
// if(mMainZoneStatus.MainVolume > AUDIO_CONSOLE_MAX_VOLUME)
// {
// mMainZoneStatus.MainVolume =AUDIO_CONSOLE_MAX_VOLUME;
// }
// SendMainVolumeToMaster();
SendIncrementMainVolume(true);
break;
}
case AUDIO_CONSOLE_CUISINE_ZONE:
{
// if(mZone2Status.MainVolume == AUDIO_CONSOLE_MAX_VOLUME)
// {
// return RET_OK;
// }
//
// mZone2Status.MainVolume += AUDIO_CONSOLE_VOLUME_INCREMENT;
// if(mZone2Status.MainVolume > AUDIO_CONSOLE_MAX_VOLUME)
// {
// mZone2Status.MainVolume = AUDIO_CONSOLE_MAX_VOLUME;
// }
// SendZone2VolumeToMaster();
SendIncrementZ2Volume(true);
break;
}
}
RequestStatus();
return RET_OK;
}
int AudioConsoleVolumeDown(int Zone)
{
switch(Zone)
{
case AUDIO_CONSOLE_SALON_ZONE:
{
// if(mMainZoneStatus.MainVolume == 0)
// {
// return RET_OK;
// }
//
// if(mMainZoneStatus.MainVolume <= AUDIO_CONSOLE_VOLUME_INCREMENT)
// {
// mMainZoneStatus.MainVolume = 0;
// }
// else
// {
// mMainZoneStatus.MainVolume -= AUDIO_CONSOLE_VOLUME_INCREMENT;
// }
// SendMainVolumeToMaster();
SendIncrementMainVolume(false);
break;
}
case AUDIO_CONSOLE_CUISINE_ZONE:
{
// if(mZone2Status.MainVolume == 0)
// {
// return RET_OK;
// }
//
// if(mZone2Status.MainVolume <= AUDIO_CONSOLE_VOLUME_INCREMENT)
// {
// mZone2Status.MainVolume = 0;
// }
// else
// {
// mZone2Status.MainVolume -= AUDIO_CONSOLE_VOLUME_INCREMENT;
// }
//// SendZone2VolumeToMaster();
SendIncrementZ2Volume(false);
break;
}
}
RequestStatus();
return RET_OK;
}
int LinkZ2BtnPressed()
{
if(mMainZoneStatus.SyncZones == true)
{
SendLinkZ2VolumeToMaster(false);
}
else
{
SendLinkZ2VolumeToMaster(true);
}
RequestStatus();
return RET_OK;
}
int MainZonePwrBtnPressed()
{
if(mMainZoneStatus.MainPwrStatus == true)
{
SendMainZonePwrToMaster(false);
}
else
{
SendMainZonePwrToMaster(true);
}
RequestStatus();
return RET_OK;
}
int Zone2PwrBtnPressed()
{
if(mZone2Status.MainPwrStatus == true)
{
SendZone2PwrToMaster(false);
}
else
{
SendZone2PwrToMaster(true);
}
RequestStatus();
return RET_OK;
}
int SendLinkZ2VolumeToMaster(bool link)
{
char data;
if(link == true)
{
data = 1;
}
else
{
data = 0;
}
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_REQUEST,&data,1);
return RET_OK;
}
int SendMainZonePwrToMaster(bool ON)
{
char data;
if(ON == true)
{
data = 1;
}
else
{
data = 0;
}
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_MAIN_POWER_REQUEST,&data,1);
return RET_OK;
}
int SendZone2PwrToMaster(bool ON)
{
char data;
if(ON == true)
{
data = 1;
}
else
{
data = 0;
}
AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_REQUEST,&data,1);
return RET_OK;
}