25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

444 satır
12 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. }
  63. }
  64. break;
  65. }
  66. case AUDIO_CONSOLE_DISCONNECTED_STATE:
  67. {
  68. switch(Event)
  69. {
  70. case AUDIO_CONSOLE_SM_TICK_EVENT:
  71. {
  72. if(IsWiFiConnected() == true)
  73. {
  74. if(ConnectAudioInterface() == RET_ERROR)
  75. {
  76. //Socket don't work anymore... not shure what to do.
  77. int toto = 1;
  78. toto ++;
  79. }
  80. mAudioConsoleState = AUDIO_CONSOLE_CONNECTING_STATE;
  81. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_CONNECT_TIMEOUT);
  82. }
  83. else
  84. {
  85. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_WAIT_FOR_WIFI_TIMEOUT);
  86. }
  87. break;
  88. }
  89. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  90. {
  91. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  92. RequestStatus();
  93. mAudioConsoleState = AUDIO_CONSOLE_RUN_STATE;
  94. break;
  95. }
  96. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  97. {
  98. break;
  99. }
  100. }
  101. break;
  102. }
  103. case AUDIO_CONSOLE_CONNECTING_STATE:
  104. {
  105. switch(Event)
  106. {
  107. case AUDIO_CONSOLE_SM_TICK_EVENT:
  108. {
  109. if(IsWiFiConnected() == false)
  110. {
  111. AudioConsoleDisconnected();
  112. }
  113. else if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  114. {
  115. AudioConsoleDisconnected(); //Retry to connect...
  116. }
  117. break;
  118. }
  119. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  120. {
  121. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  122. RequestStatus();
  123. mAudioConsoleState = AUDIO_CONSOLE_RUN_STATE;
  124. LedMgrShowOfflineMode(false);
  125. break;
  126. }
  127. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  128. {
  129. AudioConsoleDisconnected();
  130. break;
  131. }
  132. }
  133. break;
  134. }
  135. case AUDIO_CONSOLE_RUN_STATE:
  136. {
  137. switch(Event)
  138. {
  139. case AUDIO_CONSOLE_SM_TICK_EVENT:
  140. {
  141. if(IsAudioInterfaceConnected() == false || IsWiFiConnected() == false)
  142. {
  143. AudioConsoleDisconnected();
  144. }
  145. else if(IsTimerExpired(CONSOLE_IF_CONNECT_TIMER))
  146. {
  147. if(RequestStatus() == RET_OK)
  148. {
  149. TimerStart(CONSOLE_IF_CONNECT_TIMER,AUDIO_CONSOLE_STATUS_REQUEST_TIMEOUT);
  150. }
  151. else
  152. {
  153. AudioConsoleDisconnected();
  154. }
  155. }
  156. break;
  157. }
  158. case AUDIO_CONSOLE_SM_CONNECTED_EVENT:
  159. {
  160. //Should not happen....
  161. break;
  162. }
  163. case AUDIO_CONSOLE_SM_DISCONNECTED_EVENT:
  164. {
  165. AudioConsoleDisconnected();
  166. break;
  167. }
  168. }
  169. break;
  170. }
  171. }
  172. }
  173. void AudioConsoleTick()
  174. {
  175. AudioConsoleSM(AUDIO_CONSOLE_SM_TICK_EVENT);
  176. }
  177. int AudioConsoleSetIFConnectionStatus(bool Connected)
  178. {
  179. if(Connected == true)
  180. {
  181. ONBOARD_LED1_PIN = LED_ON;
  182. AudioConsoleSM(AUDIO_CONSOLE_SM_CONNECTED_EVENT);
  183. }
  184. else
  185. {
  186. ONBOARD_LED1_PIN = LED_OFF;
  187. AudioConsoleSM(AUDIO_CONSOLE_SM_DISCONNECTED_EVENT);
  188. }
  189. }
  190. int RequestStatus()
  191. {
  192. if(mAudioConsoleStatusRetryCount >= AUDIO_CONSOLE_MAX_STATUS_RETRY)
  193. {
  194. return RET_ERROR;
  195. }
  196. mAudioConsoleStatusRetryCount++;
  197. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_GENERAL_STATUS_REQUEST,0,0);
  198. return RET_OK;
  199. }
  200. int SendMainVolumeToMaster()
  201. {
  202. char Volume = mMainZoneStatus.MainVolume;
  203. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST,&Volume,1);
  204. return RET_OK;
  205. }
  206. int SendZone2VolumeToMaster()
  207. {
  208. char Volume = mZone2Status.MainVolume;
  209. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST,&Volume,1);
  210. return RET_OK;
  211. }
  212. int SendIncrementMainVolume(bool Increment)
  213. {
  214. char data;
  215. if(Increment == true)
  216. {
  217. data = 1;
  218. }
  219. else
  220. {
  221. data = 0;
  222. }
  223. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_INCREMENT_MAIN_VOLUME_REQUEST,&data,1);
  224. return RET_OK;
  225. }
  226. int SendIncrementZ2Volume(bool Increment)
  227. {
  228. char data;
  229. if(Increment == true)
  230. {
  231. data = 1;
  232. }
  233. else
  234. {
  235. data = 0;
  236. }
  237. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_INCREMENT_Z2_VOLUME_REQUEST,&data,1);
  238. return RET_OK;
  239. }
  240. int AudioConsoleDisconnected()
  241. {
  242. //TODO reset console display
  243. ONBOARD_LED1_PIN = LED_OFF;
  244. mAudioConsoleStatusRetryCount = 0;
  245. DisconnectAudioInterface();
  246. mAudioConsoleState = AUDIO_CONSOLE_DISCONNECTED_STATE;
  247. TimerStop(CONSOLE_IF_CONNECT_TIMER);
  248. LedMgrShowOfflineMode(true);
  249. }
  250. int AudioConsoleVolumeUp(int Zone)
  251. {
  252. switch(Zone)
  253. {
  254. case AUDIO_CONSOLE_SALON_ZONE:
  255. {
  256. // if(mMainZoneStatus.MainVolume == AUDIO_CONSOLE_MAX_VOLUME)
  257. // return RET_OK;
  258. //
  259. // mMainZoneStatus.MainVolume += AUDIO_CONSOLE_VOLUME_INCREMENT;
  260. // if(mMainZoneStatus.MainVolume > AUDIO_CONSOLE_MAX_VOLUME)
  261. // {
  262. // mMainZoneStatus.MainVolume =AUDIO_CONSOLE_MAX_VOLUME;
  263. // }
  264. // SendMainVolumeToMaster();
  265. SendIncrementMainVolume(true);
  266. break;
  267. }
  268. case AUDIO_CONSOLE_CUISINE_ZONE:
  269. {
  270. // if(mZone2Status.MainVolume == AUDIO_CONSOLE_MAX_VOLUME)
  271. // {
  272. // return RET_OK;
  273. // }
  274. //
  275. // mZone2Status.MainVolume += AUDIO_CONSOLE_VOLUME_INCREMENT;
  276. // if(mZone2Status.MainVolume > AUDIO_CONSOLE_MAX_VOLUME)
  277. // {
  278. // mZone2Status.MainVolume = AUDIO_CONSOLE_MAX_VOLUME;
  279. // }
  280. // SendZone2VolumeToMaster();
  281. SendIncrementZ2Volume(true);
  282. break;
  283. }
  284. }
  285. RequestStatus();
  286. return RET_OK;
  287. }
  288. int AudioConsoleVolumeDown(int Zone)
  289. {
  290. switch(Zone)
  291. {
  292. case AUDIO_CONSOLE_SALON_ZONE:
  293. {
  294. // if(mMainZoneStatus.MainVolume == 0)
  295. // {
  296. // return RET_OK;
  297. // }
  298. //
  299. // if(mMainZoneStatus.MainVolume <= AUDIO_CONSOLE_VOLUME_INCREMENT)
  300. // {
  301. // mMainZoneStatus.MainVolume = 0;
  302. // }
  303. // else
  304. // {
  305. // mMainZoneStatus.MainVolume -= AUDIO_CONSOLE_VOLUME_INCREMENT;
  306. // }
  307. // SendMainVolumeToMaster();
  308. SendIncrementMainVolume(false);
  309. break;
  310. }
  311. case AUDIO_CONSOLE_CUISINE_ZONE:
  312. {
  313. // if(mZone2Status.MainVolume == 0)
  314. // {
  315. // return RET_OK;
  316. // }
  317. //
  318. // if(mZone2Status.MainVolume <= AUDIO_CONSOLE_VOLUME_INCREMENT)
  319. // {
  320. // mZone2Status.MainVolume = 0;
  321. // }
  322. // else
  323. // {
  324. // mZone2Status.MainVolume -= AUDIO_CONSOLE_VOLUME_INCREMENT;
  325. // }
  326. //// SendZone2VolumeToMaster();
  327. SendIncrementZ2Volume(false);
  328. break;
  329. }
  330. }
  331. RequestStatus();
  332. return RET_OK;
  333. }
  334. int LinkZ2BtnPressed()
  335. {
  336. if(mMainZoneStatus.SyncZones == true)
  337. {
  338. SendLinkZ2VolumeToMaster(false);
  339. }
  340. else
  341. {
  342. SendLinkZ2VolumeToMaster(true);
  343. }
  344. RequestStatus();
  345. return RET_OK;
  346. }
  347. int MainZonePwrBtnPressed()
  348. {
  349. if(mMainZoneStatus.MainPwrStatus == true)
  350. {
  351. SendMainZonePwrToMaster(false);
  352. }
  353. else
  354. {
  355. SendMainZonePwrToMaster(true);
  356. }
  357. RequestStatus();
  358. return RET_OK;
  359. }
  360. int Zone2PwrBtnPressed()
  361. {
  362. if(mZone2Status.MainPwrStatus == true)
  363. {
  364. SendZone2PwrToMaster(false);
  365. }
  366. else
  367. {
  368. SendZone2PwrToMaster(true);
  369. }
  370. RequestStatus();
  371. return RET_OK;
  372. }
  373. int SendLinkZ2VolumeToMaster(bool link)
  374. {
  375. char data;
  376. if(link == true)
  377. {
  378. data = 1;
  379. }
  380. else
  381. {
  382. data = 0;
  383. }
  384. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_REQUEST,&data,1);
  385. return RET_OK;
  386. }
  387. int SendMainZonePwrToMaster(bool ON)
  388. {
  389. char data;
  390. if(ON == true)
  391. {
  392. data = 1;
  393. }
  394. else
  395. {
  396. data = 0;
  397. }
  398. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_MAIN_POWER_REQUEST,&data,1);
  399. return RET_OK;
  400. }
  401. int SendZone2PwrToMaster(bool ON)
  402. {
  403. char data;
  404. if(ON == true)
  405. {
  406. data = 1;
  407. }
  408. else
  409. {
  410. data = 0;
  411. }
  412. AudioConsoleSendCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_REQUEST,&data,1);
  413. return RET_OK;
  414. }