Primary.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. #include <stdio.h> /*標準輸入輸出定義*/
  2. #include <stdlib.h> /*標準函數庫定義*/
  3. #include <string.h>
  4. #include <stdint.h>
  5. #include "../Config.h"
  6. #include "../Log/log.h"
  7. #include "../Define/define.h"
  8. #include "../ShareMemory/shmMem.h"
  9. #include "../SelectGun/SelectGun.h"
  10. #include "main.h"
  11. #include "../timeout.h"
  12. struct SysInfoData *pSysInfo = NULL;
  13. struct ChargingInfoData *pDcChargingInfo = NULL;
  14. struct SysConfigData *pSysConfig = NULL;
  15. //------------------------------------------------------------------------------
  16. typedef struct StLedConfig {
  17. //OutputDrvValue[0]
  18. uint8_t LeftButtonLed: 1; //bit 0, H: ON, L:OFF
  19. uint8_t RightButtonLed: 1; //bit 1, H: ON, L:OFF
  20. uint8_t GreenLED: 1; //bit 2, H: ON, L:OFF
  21. uint8_t YellowLED: 1; //bit 3, H: ON, L:OFF
  22. uint8_t RedLED: 1; //bit 4, H: ON, L:OFF
  23. uint8_t SystemLed4: 1; //bit 5, H: ON, L:OFF
  24. uint8_t AcContactor: 1; //bit 6, H: ON, L:OFF
  25. uint8_t Reserved: 1; //bit 7 reserved
  26. } LedConfig;
  27. //------------------------------------------------------------------------------
  28. void ChangeLCM(uint8_t page)
  29. {
  30. pSysInfo->SystemPage = page;
  31. }
  32. // ***********************************
  33. // Enter LCM Page
  34. // ***********************************
  35. void EnterViewPage()
  36. {
  37. ChangeLCM(_LCM_VIEW);
  38. StopSystemTimeoutDet();
  39. }
  40. void EnterAuthorizePage(uint8_t gunIndex)
  41. {
  42. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
  43. log_info("Select Gun(%d) in Authorizing",gunIndex);
  44. ClearDetectPluginFlag();
  45. ChangeGunSelectByIndex(gunIndex);
  46. confirmSelGun(gunIndex);
  47. ChangeLCM(_LCM_START_SCAN);
  48. strcpy((char *)pSysConfig->UserId, "");
  49. setChargerMode(gunIndex,MODE_AUTHORIZING);
  50. StartSystemTimeoutDet(Timeout_ReturnViewPage);
  51. }
  52. void EnterLinkErrorPage()
  53. {
  54. StopSystemTimeoutDet();
  55. //StopGunInfoTimeoutDet(pSysInfo->CurGunSelected);
  56. ChangeLCM(_LCM_LINK_ERROR);
  57. StartSystemTimeoutDet(Timeout_ReturnViewPage);
  58. //StartGunInfoTimeoutDet(pSysInfo->CurGunSelected,Timeout_LinkError);
  59. }
  60. void EnterDetailViewPage(uint8_t gunIndex)
  61. {
  62. log_info("Show Gun(%d) Detail View",gunIndex);
  63. ChangeGunSelectByIndex(gunIndex);
  64. ChangeLCM(_LCM_DETAIL_VIEW);
  65. StopGunInfoTimeoutDet(gunIndex);
  66. StartGunInfoTimeoutDet(gunIndex,Timeout_DetailView);
  67. }
  68. void EnterAuthorizeStopPage()
  69. {
  70. log_info("Select Gun(%d) in Stopping",pSysInfo->CurGunSelected);
  71. StopGunInfoTimeoutDet(pSysInfo->CurGunSelected);
  72. StopSystemTimeoutDet();
  73. strcpy((char *)pSysConfig->UserId, "");
  74. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  75. if (pDcChargingInfo->isRemoteStart) {
  76. pSysInfo->SystemPage = _LCM_STOP_APP;
  77. } else {
  78. pSysInfo->SystemPage = _LCM_STOP_RFID;
  79. }
  80. StartSystemTimeoutDet(Timeout_ReturnViewPage);
  81. }
  82. void EnterSummaryPage()
  83. {
  84. StopSystemTimeoutDet();
  85. log_info("Showing Summary Page");
  86. pSysInfo->SystemPage = _LCM_SUMMARY;
  87. StartSystemTimeoutDet(Timeout_ReturnViewPage);
  88. }
  89. // *****************************
  90. // Enter System status
  91. // *****************************
  92. void ReturnIDLE(uint8_t gunIndex)
  93. {
  94. log_info("Gun(%d) return to IDLE",gunIndex);
  95. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
  96. EnterViewPage();
  97. StopSystemTimeoutDet();
  98. StopGunInfoTimeoutDet(gunIndex);
  99. setChargerMode(gunIndex,MODE_IDLE);
  100. destroySelGun(gunIndex);
  101. }
  102. void ReturnAuthorize()
  103. {
  104. StopSystemTimeoutDet();
  105. EnterAuthorizePage(pSysInfo->CurGunSelected);
  106. }
  107. void CheckLeftButton()
  108. {
  109. uint8_t gunIndex = 0;
  110. switch (pSysInfo->SystemPage) {
  111. case _LCM_VIEW:
  112. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(LEFT_GUN_NUM);
  113. if(pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION) {
  114. EnterAuthorizePage(LEFT_GUN_NUM);
  115. } else if (pDcChargingInfo->SystemStatus == S_CHARGING) {
  116. EnterDetailViewPage(LEFT_GUN_NUM);
  117. }
  118. break;
  119. case _LCM_START_SCAN:
  120. case _LCM_START_AUTHORIZE_FAIL:
  121. case _LCM_LINK_ERROR:
  122. ReturnIDLE(pSysInfo->CurGunSelected);
  123. break;
  124. case _LCM_DETAIL_VIEW:
  125. case _LCM_STOP_RFID:
  126. case _LCM_STOP_APP:
  127. case _LCM_STOP_RFID_FAIL:
  128. EnterViewPage();
  129. break;
  130. case _LCM_SUMMARY:
  131. log_info("Return View Page");
  132. ReturnIDLE(pSysInfo->CurGunSelected);
  133. break;
  134. case _LCM_ERROR:
  135. ReturnIDLE(pSysInfo->CurGunSelected);
  136. break;
  137. }
  138. }
  139. void CheckRightButton()
  140. {
  141. uint8_t gunIndex = 0;
  142. switch (pSysInfo->SystemPage) {
  143. case _LCM_VIEW:
  144. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(RIGHT_GUN_NUM);
  145. if(pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION) {
  146. EnterAuthorizePage(RIGHT_GUN_NUM);
  147. } else if (pDcChargingInfo->SystemStatus == S_CHARGING) {
  148. EnterDetailViewPage(RIGHT_GUN_NUM);
  149. }
  150. break;
  151. case _LCM_START_AUTHORIZE_FAIL:
  152. ReturnAuthorize();
  153. break;
  154. case _LCM_WAIT_PLUGIN:
  155. EnterLinkErrorPage();
  156. break;
  157. case _LCM_LINK_ERROR:
  158. ReturnAuthorize();
  159. break;
  160. case _LCM_DETAIL_VIEW:
  161. EnterAuthorizeStopPage();
  162. break;
  163. case _LCM_STOP_RFID_FAIL:
  164. EnterAuthorizeStopPage();
  165. break;
  166. case _LCM_WAIT_PLUGOUT:
  167. EnterSummaryPage();
  168. break;
  169. case _LCM_ERROR:
  170. ReturnIDLE(pSysInfo->CurGunSelected);
  171. break;
  172. }
  173. }
  174. void CheckPrimaryWarm(void)
  175. {
  176. uint8_t i = 0;
  177. uint8_t Rtn = 0;
  178. struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
  179. struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  180. struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData();
  181. DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
  182. if (pSysWarning->WarningCount > 0) {
  183. Rtn = 0;
  184. for (i = 0; i < pSysWarning->WarningCount; i++) {
  185. if (memcmp(&pSysWarning->WarningCode[i][0], "042251", 6) == 0) {
  186. EmcOccureByString("042251");
  187. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = YES;
  188. Rtn = 1;
  189. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042252", 6) == 0) {
  190. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = YES;
  191. EmcOccureByString("042252");
  192. Rtn = 1;
  193. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042327", 6) == 0) {
  194. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = YES;
  195. EmcOccureByString("042200");
  196. Rtn = 1;
  197. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042200", 6) == 0) {
  198. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = YES;
  199. EmcOccureByString("042200");
  200. Rtn = 1;
  201. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042201", 6) == 0) {
  202. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = YES;
  203. EmcOccureByString("042201");
  204. Rtn = 1;
  205. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042202", 6) == 0) {
  206. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = YES;
  207. EmcOccureByString("042202");
  208. Rtn = 1;
  209. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042267", 6) == 0) {
  210. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = YES;
  211. EmcOccureByString("042267");
  212. Rtn = 1;
  213. } else if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) {
  214. EmcOccureByString("012304");
  215. Rtn = 1;
  216. }
  217. }
  218. if (Rtn == 0) {
  219. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO;
  220. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO;
  221. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO;
  222. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO;
  223. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO;
  224. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO;
  225. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO;
  226. ReleaseEmsOccureByString(0, "042251");
  227. ReleaseEmsOccureByString(0, "042252");
  228. ReleaseEmsOccureByString(0, "042200");
  229. ReleaseEmsOccureByString(0, "042201");
  230. ReleaseEmsOccureByString(0, "042202");
  231. ReleaseEmsOccureByString(0, "042267");
  232. ReleaseEmsOccureByString(0, "012304");
  233. }
  234. } else {
  235. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO;
  236. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO;
  237. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO;
  238. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO;
  239. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO;
  240. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO;
  241. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO;
  242. ReleaseEmsOccureByString(0, "042251");
  243. ReleaseEmsOccureByString(0, "042252");
  244. ReleaseEmsOccureByString(0, "042200");
  245. ReleaseEmsOccureByString(0, "042201");
  246. ReleaseEmsOccureByString(0, "042202");
  247. ReleaseEmsOccureByString(0, "042267");
  248. ReleaseEmsOccureByString(0, "012304");
  249. }
  250. if (ShmPrimaryMcuData->InputDet.bits.EmergencyButton == ABNORMAL) {
  251. pAlarmCode->AlarmEvents.bits.EmergencyStopTrip = YES;
  252. EmcOccureByString("012251");
  253. } else {
  254. ReleaseEmsOccureByString(0, "012251");
  255. }
  256. if (ShmPrimaryMcuData->InputDet.bits.AcMainBreakerDetec == ABNORMAL) {
  257. pAlarmCode->AlarmEvents.bits.MainPowerBreakerTrip = YES;
  258. EmcOccureByString("012238");
  259. } else {
  260. ReleaseEmsOccureByString(0, "012238");
  261. }
  262. if (ShmPrimaryMcuData->InputDet.bits.SpdDetec == ABNORMAL) {
  263. pAlarmCode->AlarmEvents.bits.SpdTrip = YES;
  264. } else {
  265. pAlarmCode->AlarmEvents.bits.SpdTrip = NO;
  266. }
  267. if (ShmPrimaryMcuData->InputDet.bits.DoorOpen == ABNORMAL) {
  268. pAlarmCode->AlarmEvents.bits.DoorOpen = YES;
  269. EmcOccureByString("012252");
  270. } else {
  271. ReleaseEmsOccureByString(0, "012252");
  272. }
  273. }
  274. void ChkPrimaryStatus(void)
  275. {
  276. static bool leftBtnPush = false;
  277. static bool rightBtnPush = false;
  278. pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  279. struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  280. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  281. pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  282. // Check Primary Board status
  283. CheckPrimaryWarm();
  284. if ((pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION)
  285. && pSysConfig->OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING) {
  286. log_info("Offline policy no charge");
  287. return;;
  288. }
  289. // Show Version
  290. if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS &&
  291. ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS )
  292. pSysConfig->ShowInformation = YES;
  293. else
  294. pSysConfig->ShowInformation = NO;
  295. if (pSysConfig->ShowInformation)
  296. return;
  297. // Press Left Button
  298. if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS && !leftBtnPush ) {
  299. leftBtnPush = true;
  300. CheckLeftButton();
  301. log_info("left btn down...............................%x %x %x",
  302. pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus,pSysInfo->SystemPage);
  303. } else if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_RELEASE && leftBtnPush) {
  304. leftBtnPush = false;
  305. }
  306. // Press Right Button
  307. if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS && !rightBtnPush ) {
  308. rightBtnPush = true;
  309. CheckRightButton();
  310. log_info("right btn down...............................%x %x %x",
  311. pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus, pSysInfo->SystemPage);
  312. } else if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_RELEASE && rightBtnPush) {
  313. rightBtnPush = false;
  314. }
  315. }