Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

397 řádky
10 KiB

  1. #include "define.h"
  2. #include "AudioConsole.h"
  3. #include "timer.h"
  4. #include "ProtocolDefs.h"
  5. #include "NetworkProtocol.h"
  6. #include "VUMeter.h"
  7. #include "PushBtnMgr.h"
  8. #include "AudioConsoleLedMgr.h"
  9. AVReceiverStatus_t mMainZoneStatus, mZone2Status;
  10. bool mMasterInterfaceConnected;
  11. int mAudioConsoleState;
  12. int mAudioConsoleStatusRetryCount;
  13. int AudioConsoleInit()
  14. {
  15. ProtocolInit(NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF);
  16. mMasterInterfaceConnected = false;
  17. mAudioConsoleState = AUDIO_CONSOLE_INIT_STATE;
  18. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
  19. mAudioConsoleStatusRetryCount = 0;
  20. mZone2Status.MainVolume = 0;
  21. mMainZoneStatus.MainVolume = 0;
  22. }
  23. int AudioConsoleSetReceiverStatus(AVReceiverStatus_t *MainZone, AVReceiverStatus_t *Zone2)
  24. {
  25. mAudioConsoleStatusRetryCount = 0;
  26. mMainZoneStatus.MainPwrStatus = MainZone ->MainPwrStatus;
  27. mMainZoneStatus.MainSleepStatus = MainZone->MainSleepStatus;
  28. mMainZoneStatus.IsMute = MainZone->IsMute;
  29. mMainZoneStatus.DataValid = MainZone->DataValid;
  30. mMainZoneStatus.ReceiverOnline = MainZone->ReceiverOnline;
  31. mMainZoneStatus.SyncZones = MainZone->SyncZones;
  32. mMainZoneStatus.MainVolume = MainZone->MainVolume;
  33. mZone2Status.MainPwrStatus = Zone2 ->MainPwrStatus;
  34. mZone2Status.MainSleepStatus = Zone2->MainSleepStatus;
  35. mZone2Status.IsMute = Zone2->IsMute;
  36. mZone2Status.DataValid = Zone2->DataValid;
  37. mZone2Status.ReceiverOnline = Zone2->ReceiverOnline;
  38. mZone2Status.SyncZones = Zone2->SyncZones;
  39. mZone2Status.MainVolume = Zone2->MainVolume;
  40. VUMeterSetVolume(mMainZoneStatus.MainVolume,mZone2Status.MainVolume);
  41. UpdatePushButtonLEDs(&mMainZoneStatus,&mZone2Status);
  42. return RET_OK;
  43. }
  44. int AudioConsoleSM(int Event)
  45. {
  46. switch(mAudioConsoleState)
  47. {
  48. case AUDIO_CONSOLE_INIT_STATE:
  49. {
  50. //At boot, we wait for wifi to connect first...
  51. if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  52. {
  53. if(IsWiFiConnected() == true)
  54. {
  55. ConnectAudioInterface();
  56. mAudioConsoleState = AUDIO_CONSOLE_CONNECTING_STATE;
  57. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_CONNECT_TIMEOUT);
  58. }
  59. else
  60. {
  61. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
  62. LedMgrShowOfflineMode(true);
  63. }
  64. }
  65. break;
  66. }
  67. case AUDIO_CONSOLE_DISCONNECTED_STATE:
  68. {
  69. switch(Event)
  70. {
  71. case AUDIO_CONSOLE_SM_TICK_EVENT:
  72. {
  73. if(IsWiFiConnected() == true)
  74. {
  75. if(ConnectAudioInterface() == RET_ERROR)
  76. {
  77. //Socket don't work anymore... not shure what to do.
  78. int toto = 1;
  79. toto ++;
  80. }
  81. mAudioConsoleState = AUDIO_CONSOLE_CONNECTING_STATE;
  82. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_CONNECT_TIMEOUT);
  83. }
  84. else
  85. {
  86. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
  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. break;
  100. }
  101. }
  102. break;
  103. }
  104. case AUDIO_CONSOLE_CONNECTING_STATE:
  105. {
  106. switch(Event)
  107. {
  108. case AUDIO_CONSOLE_SM_TICK_EVENT:
  109. {
  110. if(IsWiFiConnected() == false)
  111. {
  112. AudioConsoleDisconnected();
  113. }
  114. else if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  115. {
  116. AudioConsoleDisconnected(); //Retry to connect...
  117. }
  118. break;
  119. }
  120. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  121. {
  122. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  123. RequestStatus();
  124. mAudioConsoleState = AUDIO_CONSOLE_RUN_STATE;
  125. LedMgrShowOfflineMode(false);
  126. break;
  127. }
  128. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  129. {
  130. AudioConsoleDisconnected();
  131. break;
  132. }
  133. }
  134. break;
  135. }
  136. case AUDIO_CONSOLE_RUN_STATE:
  137. {
  138. switch(Event)
  139. {
  140. case AUDIO_CONSOLE_SM_TICK_EVENT:
  141. {
  142. if(IsAudioInterfaceConnected() == false || IsWiFiConnected() == false)
  143. {
  144. AudioConsoleDisconnected();
  145. }
  146. else if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  147. {
  148. if(RequestStatus() == RET_OK)
  149. {
  150. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  151. }
  152. else
  153. {
  154. AudioConsoleDisconnected();
  155. }
  156. }
  157. break;
  158. }
  159. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  160. {
  161. //Should not happen....
  162. break;
  163. }
  164. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  165. {
  166. AudioConsoleDisconnected();
  167. break;
  168. }
  169. }
  170. break;
  171. }
  172. }
  173. }
  174. void AudioConsoleTick()
  175. {
  176. AudioConsoleSM(AUDIO_CONSOLE_SM_TICK_EVENT);
  177. }
  178. int AudioConsoleSetIFConnectionStatus(bool Connected)
  179. {
  180. if(Connected == true)
  181. {
  182. ONBOARD_LED1_PIN = LED_ON;
  183. AudioConsoleSM(AUDIO_CONSOLE_SM_CONNECTED_EVENT);
  184. }
  185. else
  186. {
  187. ONBOARD_LED1_PIN = LED_OFF;
  188. AudioConsoleSM(AUDIO_CONSOLE_SM_DISCONNECTED_EVENT);
  189. }
  190. }
  191. int RequestStatus()
  192. {
  193. if(mAudioConsoleStatusRetryCount >= AUDIO_CONSOLE_MAX_STATUS_RETRY)
  194. {
  195. return RET_ERROR;
  196. }
  197. mAudioConsoleStatusRetryCount++;
  198. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_GENERAL_STATUS_REQUEST,0,0);
  199. return RET_OK;
  200. }
  201. int SendMainVolumeToMaster()
  202. {
  203. char Volume = mMainZoneStatus.MainVolume;
  204. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST,&Volume,1);
  205. return RET_OK;
  206. }
  207. int SendZone2VolumeToMaster()
  208. {
  209. char Volume = mZone2Status.MainVolume;
  210. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST,&Volume,1);
  211. return RET_OK;
  212. }
  213. int SendIncrementMainVolume(bool Increment)
  214. {
  215. char data;
  216. if(Increment == true)
  217. {
  218. data = 1;
  219. }
  220. else
  221. {
  222. data = 0;
  223. }
  224. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_INCREMENT_MAIN_VOLUME_REQUEST,&data,1);
  225. return RET_OK;
  226. }
  227. int SendIncrementZ2Volume(bool Increment)
  228. {
  229. char data;
  230. if(Increment == true)
  231. {
  232. data = 1;
  233. }
  234. else
  235. {
  236. data = 0;
  237. }
  238. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_INCREMENT_Z2_VOLUME_REQUEST,&data,1);
  239. return RET_OK;
  240. }
  241. int AudioConsoleDisconnected()
  242. {
  243. //TODO reset console display
  244. ONBOARD_LED1_PIN = LED_OFF;
  245. mAudioConsoleStatusRetryCount = 0;
  246. DisconnectAudioInterface();
  247. mAudioConsoleState = AUDIO_CONSOLE_DISCONNECTED_STATE;
  248. TimerStop(CONSOLE_IF_CONNECT_TIMER);
  249. LedMgrShowOfflineMode(true);
  250. }
  251. int AudioConsoleVolumeUp(int Zone)
  252. {
  253. switch(Zone)
  254. {
  255. case AUDIO_CONSOLE_SALON_ZONE:
  256. {
  257. SendIncrementMainVolume(true);
  258. break;
  259. }
  260. case AUDIO_CONSOLE_CUISINE_ZONE:
  261. {
  262. SendIncrementZ2Volume(true);
  263. break;
  264. }
  265. }
  266. RequestStatus();
  267. return RET_OK;
  268. }
  269. int AudioConsoleVolumeDown(int Zone)
  270. {
  271. switch(Zone)
  272. {
  273. case AUDIO_CONSOLE_SALON_ZONE:
  274. {
  275. SendIncrementMainVolume(false);
  276. break;
  277. }
  278. case AUDIO_CONSOLE_CUISINE_ZONE:
  279. {
  280. SendIncrementZ2Volume(false);
  281. break;
  282. }
  283. }
  284. RequestStatus();
  285. return RET_OK;
  286. }
  287. int LinkZ2BtnPressed()
  288. {
  289. if(mMainZoneStatus.SyncZones == true)
  290. {
  291. SendLinkZ2VolumeToMaster(false);
  292. }
  293. else
  294. {
  295. SendLinkZ2VolumeToMaster(true);
  296. }
  297. RequestStatus();
  298. return RET_OK;
  299. }
  300. int MainZonePwrBtnPressed()
  301. {
  302. if(mMainZoneStatus.MainPwrStatus == true)
  303. {
  304. SendMainZonePwrToMaster(false);
  305. }
  306. else
  307. {
  308. SendMainZonePwrToMaster(true);
  309. }
  310. RequestStatus();
  311. return RET_OK;
  312. }
  313. int Zone2PwrBtnPressed()
  314. {
  315. if(mZone2Status.MainPwrStatus == true)
  316. {
  317. SendZone2PwrToMaster(false);
  318. }
  319. else
  320. {
  321. SendZone2PwrToMaster(true);
  322. }
  323. RequestStatus();
  324. return RET_OK;
  325. }
  326. int SendLinkZ2VolumeToMaster(bool link)
  327. {
  328. char data;
  329. if(link == true)
  330. {
  331. data = 1;
  332. }
  333. else
  334. {
  335. data = 0;
  336. }
  337. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_REQUEST,&data,1);
  338. return RET_OK;
  339. }
  340. int SendMainZonePwrToMaster(bool ON)
  341. {
  342. char data;
  343. if(ON == true)
  344. {
  345. data = 1;
  346. }
  347. else
  348. {
  349. data = 0;
  350. }
  351. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_MAIN_POWER_REQUEST,&data,1);
  352. return RET_OK;
  353. }
  354. int SendZone2PwrToMaster(bool ON)
  355. {
  356. char data;
  357. if(ON == true)
  358. {
  359. data = 1;
  360. }
  361. else
  362. {
  363. data = 0;
  364. }
  365. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_REQUEST,&data,1);
  366. return RET_OK;
  367. }