Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

174 рядки
5.3 KiB

  1. #include "define.h"
  2. #include "AudioConsole.h"
  3. #include "timer.h"
  4. #include "BoardCfg.h"
  5. #include "ProtocolDefs.h"
  6. #include "NetworkProtocol.h"
  7. AVReceiverStatus_t mMAinZoneStatus, mZone2Status;
  8. bool mMasterInterfaceConnected;
  9. int mAudioConsoleState;
  10. int AudioConsoleInit()
  11. {
  12. ProtocolInit(NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF);
  13. mMasterInterfaceConnected = false;
  14. mAudioConsoleState = AUDIO_CONSOLE_INIT_STATE;
  15. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
  16. }
  17. int AudioConsoleSetReceiverStatus(AVReceiverStatus_t *MainZone, AVReceiverStatus_t *Zone2)
  18. {
  19. mMAinZoneStatus.MainPwrStatus = MainZone ->MainPwrStatus;
  20. mMAinZoneStatus.MainSleepStatus = MainZone->MainSleepStatus;
  21. mMAinZoneStatus.IsMute = MainZone->IsMute;
  22. mMAinZoneStatus.DataValid = MainZone->DataValid;
  23. mMAinZoneStatus.ReceiverOnline = MainZone->ReceiverOnline;
  24. mMAinZoneStatus.SyncZones = MainZone->SyncZones;
  25. mMAinZoneStatus.MainVolume = MainZone->MainVolume;
  26. mZone2Status.MainPwrStatus = Zone2 ->MainPwrStatus;
  27. mZone2Status.MainSleepStatus = Zone2->MainSleepStatus;
  28. mZone2Status.IsMute = Zone2->IsMute;
  29. mZone2Status.DataValid = Zone2->DataValid;
  30. mZone2Status.ReceiverOnline = Zone2->ReceiverOnline;
  31. mZone2Status.SyncZones = Zone2->SyncZones;
  32. mZone2Status.MainVolume = Zone2->MainVolume;
  33. return RET_OK;
  34. }
  35. int AudioConsoleSM(int Event)
  36. {
  37. switch(mAudioConsoleState)
  38. {
  39. case AUDIO_CONSOLE_INIT_STATE:
  40. {
  41. //At boot, we wait for wifi to connect first...
  42. if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  43. {
  44. if(IsWiFiConnected() == true)
  45. {
  46. ConnectAudioInterface();
  47. mAudioConsoleState = AUDIO_CONSOLE_CONNECTING_STATE;
  48. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_CONNECT_TIMEOUT);
  49. }
  50. else
  51. {
  52. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
  53. }
  54. }
  55. break;
  56. }
  57. case AUDIO_CONSOLE_DISCONNECTED_STATE:
  58. {
  59. switch(Event)
  60. {
  61. case AUDIO_CONSOLE_SM_TICK_EVENT:
  62. {
  63. break;
  64. }
  65. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  66. {
  67. break;
  68. }
  69. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  70. {
  71. break;
  72. }
  73. }
  74. break;
  75. }
  76. case AUDIO_CONSOLE_CONNECTING_STATE:
  77. {
  78. switch(Event)
  79. {
  80. case AUDIO_CONSOLE_SM_TICK_EVENT:
  81. {
  82. if(IsAudioInterfaceConnected() == false)
  83. {
  84. //TODO reset console display
  85. mAudioConsoleState = AUDIO_CONSOLE_INIT_STATE;
  86. TimerStop(CONSOLE_IF_CONNECT_TIMER);
  87. }
  88. break;
  89. }
  90. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  91. {
  92. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  93. RequestStatus();
  94. mAudioConsoleState = AUDIO_CONSOLE_RUN_STATE;
  95. break;
  96. }
  97. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  98. {
  99. //Connection timed out.... trying again.
  100. ConnectAudioInterface();
  101. break;
  102. }
  103. }
  104. break;
  105. }
  106. case AUDIO_CONSOLE_RUN_STATE:
  107. {
  108. switch(Event)
  109. {
  110. case AUDIO_CONSOLE_SM_TICK_EVENT:
  111. {
  112. if(IsAudioInterfaceConnected() == false)
  113. {
  114. //TODO reset console display
  115. mAudioConsoleState = AUDIO_CONSOLE_INIT_STATE;
  116. TimerStop(CONSOLE_IF_CONNECT_TIMER);
  117. }
  118. if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  119. {
  120. RequestStatus();
  121. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  122. }
  123. break;
  124. }
  125. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  126. {
  127. //Should not happen....
  128. break;
  129. }
  130. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  131. {
  132. mAudioConsoleState = AUDIO_CONSOLE_INIT_STATE;
  133. TimerStop(CONSOLE_IF_CONNECT_TIMER);
  134. break;
  135. }
  136. }
  137. break;
  138. }
  139. }
  140. }
  141. void AudioConsoleTick()
  142. {
  143. AudioConsoleSM(AUDIO_CONSOLE_SM_TICK_EVENT);
  144. }
  145. int AudioConsoleSetIFConnectionStatus(bool Connected)
  146. {
  147. if(Connected == true)
  148. {
  149. ONBOARD_LED1_PIN = LED_ON;
  150. AudioConsoleSM(AUDIO_CONSOLE_SM_CONNECTED_EVENT);
  151. }
  152. else
  153. {
  154. ONBOARD_LED1_PIN = LED_OFF;
  155. AudioConsoleSM(AUDIO_CONSOLE_SM_DISCONNECTED_EVENT);
  156. }
  157. }
  158. void RequestStatus()
  159. {
  160. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_GENERAL_STATUS_REQUEST,0,0);
  161. }