Primary.c 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. //------------------------------------------------------------------------------
  17. void ChangeLCM(uint8_t page)
  18. {
  19. pSysInfo->SystemPage = page;
  20. }
  21. // ***********************************
  22. // Enter LCM Page
  23. // ***********************************
  24. void CheckLeftButton()
  25. {
  26. pSysInfo->CurGunSelected = LEFT_GUN_NUM;
  27. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  28. if(pSysInfo->SystemPage == _PAGE_SELECT_GUN) {
  29. pSysInfo->SystemPage = _PAGE_BILL;
  30. return;
  31. }
  32. if(pDcChargingInfo->SystemStatus == S_IDLE) {
  33. pSysInfo->SystemPage = _PAGE_SELECT_GUN;
  34. }
  35. }
  36. void CheckRightButton()
  37. {
  38. pSysInfo->CurGunSelected = RIGHT_GUN_NUM;
  39. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  40. if(pSysInfo->SystemPage == _PAGE_SELECT_GUN) {
  41. pSysInfo->SystemPage = _PAGE_BILL;
  42. return;
  43. }
  44. if(pDcChargingInfo->SystemStatus == S_IDLE) {
  45. pSysInfo->SystemPage = _PAGE_SELECT_GUN;
  46. }
  47. }
  48. void CheckPrimaryWarm(void)
  49. {
  50. uint8_t i = 0;
  51. uint8_t Rtn = 0;
  52. struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
  53. struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  54. struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData();
  55. DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
  56. if (pSysWarning->WarningCount > 0) {
  57. Rtn = 0;
  58. for (i = 0; i < pSysWarning->WarningCount; i++) {
  59. if (memcmp(&pSysWarning->WarningCode[i][0], "042251", 6) == 0) {
  60. EmcOccureByString("042251");
  61. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = YES;
  62. Rtn = 1;
  63. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042252", 6) == 0) {
  64. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = YES;
  65. EmcOccureByString("042252");
  66. Rtn = 1;
  67. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042327", 6) == 0) {
  68. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = YES;
  69. EmcOccureByString("042327");
  70. Rtn = 1;
  71. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042328", 6) == 0) {
  72. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = YES;
  73. EmcOccureByString("042328");
  74. Rtn = 1;
  75. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042200", 6) == 0) {
  76. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = YES;
  77. EmcOccureByString("042200");
  78. Rtn = 1;
  79. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042201", 6) == 0) {
  80. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = YES;
  81. EmcOccureByString("042201");
  82. Rtn = 1;
  83. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042202", 6) == 0) {
  84. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = YES;
  85. EmcOccureByString("042202");
  86. Rtn = 1;
  87. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042267", 6) == 0) {
  88. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = YES;
  89. EmcOccureByString("042267");
  90. Rtn = 1;
  91. } else if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) {
  92. EmcOccureByString("012304");
  93. Rtn = 1;
  94. }
  95. }
  96. if (Rtn == 0) {
  97. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO;
  98. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO;
  99. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO;
  100. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = NO;
  101. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO;
  102. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO;
  103. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO;
  104. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO;
  105. ReleaseEmsOccureByString(0, "042251");
  106. ReleaseEmsOccureByString(0, "042252");
  107. ReleaseEmsOccureByString(0, "042200");
  108. ReleaseEmsOccureByString(0, "042327");
  109. ReleaseEmsOccureByString(0, "042328");
  110. ReleaseEmsOccureByString(0, "042201");
  111. ReleaseEmsOccureByString(0, "042202");
  112. ReleaseEmsOccureByString(0, "042267");
  113. ReleaseEmsOccureByString(0, "012304");
  114. }
  115. } else {
  116. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO;
  117. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO;
  118. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO;
  119. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = NO;
  120. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO;
  121. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO;
  122. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO;
  123. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO;
  124. ReleaseEmsOccureByString(0, "042251");
  125. ReleaseEmsOccureByString(0, "042252");
  126. ReleaseEmsOccureByString(0, "042200");
  127. ReleaseEmsOccureByString(0, "042327");
  128. ReleaseEmsOccureByString(0, "042328");
  129. ReleaseEmsOccureByString(0, "042201");
  130. ReleaseEmsOccureByString(0, "042202");
  131. ReleaseEmsOccureByString(0, "042267");
  132. ReleaseEmsOccureByString(0, "012304");
  133. }
  134. if (ShmPrimaryMcuData->InputDet.bits.EmergencyButton == ABNORMAL) {
  135. pAlarmCode->AlarmEvents.bits.EmergencyStopTrip = YES;
  136. EmcOccureByString("012251");
  137. } else {
  138. ReleaseEmsOccureByString(0, "012251");
  139. }
  140. if (ShmPrimaryMcuData->InputDet.bits.AcMainBreakerDetec == ABNORMAL) {
  141. pAlarmCode->AlarmEvents.bits.MainPowerBreakerTrip = YES;
  142. EmcOccureByString("012238");
  143. } else {
  144. ReleaseEmsOccureByString(0, "012238");
  145. }
  146. if (ShmPrimaryMcuData->InputDet.bits.SpdDetec == ABNORMAL) {
  147. pAlarmCode->AlarmEvents.bits.SpdTrip = YES;
  148. } else {
  149. pAlarmCode->AlarmEvents.bits.SpdTrip = NO;
  150. }
  151. if (ShmPrimaryMcuData->InputDet.bits.DoorOpen == ABNORMAL) {
  152. pAlarmCode->AlarmEvents.bits.DoorOpen = YES;
  153. EmcOccureByString("012252");
  154. } else {
  155. ReleaseEmsOccureByString(0, "012252");
  156. }
  157. }
  158. void ChkPrimaryStatus(void)
  159. {
  160. static bool leftBtnPush = false;
  161. static bool rightBtnPush = false;
  162. pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  163. struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  164. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  165. pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  166. // Check Primary Board status
  167. CheckPrimaryWarm();
  168. if ((pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION)
  169. && pSysConfig->OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING) {
  170. log_info("Offline policy no charge");
  171. return;;
  172. }
  173. // Show Version
  174. if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS &&
  175. ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS )
  176. pSysConfig->ShowInformation = YES;
  177. else
  178. pSysConfig->ShowInformation = NO;
  179. if (pSysConfig->ShowInformation)
  180. return;
  181. return;
  182. // Press Left Button
  183. if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS && !leftBtnPush ) {
  184. if (pSysInfo->SystemPage >= _PAGE_ADD_FRIEND && pSysInfo->SystemPage <= _PAGE_PLUGIN) {
  185. log_info("Authorize Process can't select gun");
  186. return;
  187. }
  188. leftBtnPush = true;
  189. CheckLeftButton();
  190. log_info("left btn down...............................%x %x %x",
  191. pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus,pSysInfo->SystemPage);
  192. } else if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_RELEASE && leftBtnPush) {
  193. leftBtnPush = false;
  194. }
  195. // Press Right Button
  196. if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS && !rightBtnPush ) {
  197. rightBtnPush = true;
  198. CheckRightButton();
  199. log_info("right btn down...............................%x %x %x",
  200. pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus, pSysInfo->SystemPage);
  201. } else if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_RELEASE && rightBtnPush) {
  202. rightBtnPush = false;
  203. }
  204. }