Module_CCS.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /*
  2. * Module_CCS.h
  3. *
  4. * Created on: 2020¦~3¤ë16¤é
  5. * Author: foluswen
  6. */
  7. #ifndef MODULE_CCS_H_
  8. #define MODULE_CCS_H_
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11. #include <sys/time.h>
  12. #include <sys/timeb.h>
  13. #include <sys/ipc.h>
  14. #include <sys/shm.h>
  15. #include <sys/mman.h>
  16. #include <sys/socket.h>
  17. #include <netinet/in.h>
  18. #include <net/if.h>
  19. #include <net/ethernet.h>
  20. #include <linux/if_packet.h>
  21. #include <unistd.h>
  22. #include <stdarg.h>
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <unistd.h>
  26. #include <fcntl.h>
  27. #include <errno.h>
  28. #include <errno.h>
  29. #include <string.h>
  30. #include <time.h>
  31. #include <ctype.h>
  32. #include "SystemLogMessage.h"
  33. #include "NidNmk.h"
  34. #include "v2g/api/api.h"
  35. #include "v2g/transport/v2gtp.h"
  36. #define SAVE_SYS_LOG_MSG_EVCOMM_SWITCH ENABLE
  37. #define DEBUG_PRINTF_EVCOMM_SHOW ENABLE
  38. #define DEBUG_PRINTF_EVCOMM_BRIEF_SHOW ENABLE
  39. #define DEBUG_PRINTF_EVCOMM_DETAIL_SHOW ENABLE
  40. #define DEBUG_PRINTF_EVCOMM_SYSTEM_LOG_SHOW ENABLE
  41. #define V2GT_MSG_PROTOCOL_DIN70121 0
  42. #define V2GT_MSG_PROTOCOL_ISO15118_2014 1 //i.e. ISO15118-2 (ISO 1)
  43. #define V2GT_MSG_PROTOCOL_ISO15118_2018 2 //i.e. ISO15118-20 (ISO 2)
  44. #define QcaInterface "eth1"
  45. #define SupportBcbToggle
  46. #define SdpUdpServerPort 15118
  47. #define SdpTcpServerPort 59438 //49152-65535
  48. #define IPV6_LINK_LOCAL_PREFIX 0xFE80
  49. #define V2GTP_MSG_RX_BUFFER_SIZE (64*1024) //65,536 = 65.5KB
  50. #define V2GTP_MSG_TX_BUFFER_SIZE (64*1024) //65,536 = 65.5KB
  51. #define V2GTP_MSG_HEADER_LENGTH 8 //8 Bytes
  52. /***********************************************/
  53. /*********** Ethernet Type ********************/
  54. /**********************************************/
  55. #define EtherType_HomePlug 0x88E1
  56. /***********************************************/
  57. /*** MMTYPE (Management Message Type) **/
  58. /**********************************************/
  59. #define MMTYPE_CM_SET_KEY_REQ 0x6008
  60. #define MMTYPE_CM_SET_KEY_CNF 0x6009
  61. #define MMTYPE_CM_SLAC_PARM_REQ 0x6064
  62. #define MMTYPE_CM_SLAC_PARM_CNF 0x6065
  63. #define MMTYPE_CM_START_ATTEN_CHAR_IND 0x606A
  64. #define MMTYPE_CM_MNBC_SOUND_IND 0x6076
  65. #define MMTYPE_CM_ATTEN_CHAR_IND 0x606E
  66. #define MMTYPE_CM_ATTEN_CHAR_RSP 0x606F
  67. #define MMTYPE_CM_VALIDATE_REQ 0x6078
  68. #define MMTYPE_CM_VALIDATE_CNF 0x6079
  69. #define MMTYPE_CM_SLAC_MATCH_REQ 0x607C
  70. #define MMTYPE_CM_SLAC_MATCH_CNF 0x607D
  71. #define MMTYPE_CM_ATTEN_PROFILE_IND 0x6086
  72. //following are the vendor specific type
  73. #define MMTYPE_VENDOR_VS_HOST_ACTION 0xA062 //Embedded Host Action Requested Indication MME
  74. #define MMTYPE_VENDOR_ATTEN_CHAR 0xA14E //Attenuation Characteristics MME (VS_ATTEN_CHAR)
  75. #define MMTYPE_VENDOR_VS_NW_INFO 0xA038 //Network Info MME
  76. #define MMTYPE_VENDOR_VS_NW_INFO_CNF 0xA039 //Network Info MME
  77. /***********************************************/
  78. /************** V2GTP Payload Type ************/
  79. /**********************************************/
  80. #define V2GTP_PAYLOAD_TYPE_SDP_REQUEST 0x9000 //SDP request message
  81. #define V2GTP_PAYLOAD_TYPE_SDP_RESPONSE 0x9001 //SDP response message
  82. #define V2GTP_PAYLOAD_TYPE_EXI_MSG 0x8001 //EXI encoded V2G Message
  83. //Payload
  84. #define SDP_PAYLOAD_SECURITY_TLS 0x00 //0x00 = secured with TLS
  85. #define SDP_PAYLOAD_SECURITY_NONE 0x10 //0x10 = No transport layer security
  86. #define SDP_PAYLOAD_TRANS_PROTOCOL_TCP 0x00 //0x00= TCP
  87. #define SDP_PAYLOAD_TRANS_PROTOCOL_UDP 0x10 //0x10 = reserved for UDP
  88. /***********************************************/
  89. /****** Timing and constant values **********/
  90. /*********** [2015] ISO 15118_3 ***************/
  91. /**********************************************/
  92. //#define TT_EVSE_match_MNBC 600 //unit: 1ms (default: 600ms)
  93. #define TT_EVSE_match_MNBC (600+400) //unit: 1ms (default: 600ms)
  94. #define C_EV_match_MNBC 0x0A
  95. #define TT_EVSE_SLAC_init 50 //unit: sec.
  96. #define TT_match_sequence 400 //unit: ms
  97. #define TP_match_response 100 //unit: ms, General performance time for a response to a request
  98. #define TT_match_response (200*3) //unit: ms, Time that the EV/EVSE shall wait for a response from the EVSE/EV
  99. #define TP_EV_batch_msg_interval (50*3) //unit: ms
  100. #define TT_EVSE_match_session 10000 //unit: ms
  101. #define TT_match_join (12000*2) //unit: ms
  102. #define V2G_SECC_ReadyToCharge_Performance_Time 148000 //unit: ms (148 sec)
  103. #define V2G_SECC_CommunicationSetup_Performance_Time 18000 //unit: ms (18 sec)
  104. #define V2G_SECC_ChargingParameter_Performance_Time 60000 //unit: ms (60 sec)
  105. //#define V2G_SECC_ChargingParameter_Performance_Time 120000 //unit: ms (120 sec)
  106. #define V2G_SECC_CableCheck_Performance_Time 38000 //unit: ms (38 sec)
  107. //#define V2G_SECC_CableCheck_Performance_Time 60000 //unit: ms (extend to 60 sec)
  108. //#define V2G_SECC_PreCharge_Performance_Time 5000 //unit: ms (5 sec)
  109. #define V2G_SECC_PreCharge_Performance_Time 10000 //unit: ms (extend to 10 sec)
  110. #define V2G_SECC_WeldingDetection_Performance_Time 20000 //unit: ms (20 sec)
  111. #define V2G_SECC_CPState_Detection_Timeout 1500 //unit: ms (1.5 sec)
  112. #define V2G_SECC_CPOscillator_Retain_Timeout 1500 //unit: ms (1.5 sec)
  113. #define V2G_EVCC_Msg_Timeout_SupportedAppProtocolReq 2000 //unit: ms (1.5 sec)
  114. #define V2G_EVCC_Msg_Timeout_SessionSetupReq 2000 //unit: ms (1.5 sec)
  115. #define V2G_EVCC_Msg_Timeout_ServiceDiscoveryReq 2000
  116. #define V2G_EVCC_Msg_Timeout_ServicePaymentSelectionReq 2000
  117. #define V2G_EVCC_Msg_Timeout_ContractAuthenticationReq 2000
  118. #define V2G_EVCC_Msg_Timeout_ChargeParameterDiscoveryReq 2000
  119. #define V2G_EVCC_Msg_Timeout_PowerDeliveryReq 2000
  120. #define V2G_EVCC_Msg_Timeout_CableCheckReq 2000
  121. #define V2G_EVCC_Msg_Timeout_PreChargeReq 2000
  122. #define V2G_EVCC_Msg_Timeout_CurrentDemandReq 25
  123. #define V2G_EVCC_Msg_Timeout_WeldingDetectionReq 2000
  124. #define V2G_EVCC_Msg_Timeout_SessionStopReq 2000
  125. #define V2G_SECC_Sequence_Timeout 60000 //unit: ms (default: 60000, i.e. 60 sec)
  126. #define V2G_SECC_QCA7000_GET_MAC_ADDR_REQ_RETRY_PERIOD 3000 //unit: ms (default: 3000, i.e. 3 sec)
  127. #define V2G_SECC_QCA7000_SEND_SET_KEY_PERIOD 2000 //unit: ms (default: 2000, i.e. 2 sec)
  128. #define V2G_SECC_QCA7000_COMM_TIMEOUT 10000 //unit: ms (default: 10000, i.e. 20 sec)
  129. //[To-Do] to be continued. (DIN 70121, Table 75)
  130. #define V2G_SECC_CP_Timeout_CableCheck 2000 //unit: ms (default: 2 sec)
  131. #define DIN_SPEC_70121_2012_VersionNumberMajor 2
  132. #define DIN_SPEC_70121_2012_VersionNumberMinor 0
  133. #define ISO1_15118_2013_VersionNumberMajor 2
  134. #define ISO1_15118_2013_VersionNumberMinor 0
  135. #define ISO2_15118_2018_VersionNumberMajor 2
  136. #define ISO2_15118_2018_VersionNumberMinor 0
  137. //Protocol format : Message ID
  138. #define CAN_CMD_ADDRESS_REQUEST 0x00000100
  139. #define CAN_CMD_ADDRESS_ASSIGN 0x00000200
  140. #define CAN_CMD_EV_BOARD_STATUS 0x00000300
  141. #define CAN_CMD_GET_FW_VERSION 0x00000400
  142. #define CAN_CMD_GET_HW_VERSION 0x00000500
  143. #define CAN_CMD_CHARGING_PERMISSION 0x00000600
  144. #define CAN_CMD_EVSE_OUTPUT_STATUS_ANNOUNCEMENT 0x00000700
  145. #define CAN_CMD_EVSE_CAPACITY_ANNOUNCEMENT 0x00000800
  146. #define CAN_CMD_GET_EV_TARGET_INFO 0x00000900
  147. #define CAN_CMD_GET_EV_BATTERY_INFO 0x00000A00
  148. #define CAN_CMD_EV_STOP_EVENT 0x00000B00
  149. #define CAN_CMD_EVSE_STOP_EVENT 0x00000C00
  150. #define CAN_CMD_GET_MISC_INFO 0x00000D00
  151. #define CAN_CMD_DOWNLOAD_REQUEST 0x00000E00
  152. #define CAN_CMD_START_BLOCK_TRANSFER 0x00000F00
  153. #define CAN_CMD_DATA_TRANSFER 0x00001000
  154. #define CAN_CMD_DOWNLOAD_FINISH 0x00001100
  155. #define CAN_CMD_ISOLATION_STATUS 0x00001200
  156. #define CAN_CMD_CCS_CONNECTOR_INFO 0x00001300
  157. #define CAN_CMD_RTC_INFO 0x00001400
  158. #define CAN_CMD_EVSE_PRECHARGE_INFO 0x00001500
  159. #define CAN_CMD_EVCCID_REQUEST 0x00001600
  160. #define CAN_CMD_PCBA_TEST 0x0000AA00
  161. /***********************************************/
  162. /*************** Structure *********************/
  163. /**********************************************/
  164. struct MmeHeader
  165. {
  166. unsigned char ODA[6]; //Original Destination Address
  167. unsigned char OSA[6]; //Original source Address
  168. //unsigned int VLAN Tag; //IEEE802.1Q VLAN Tag (optional)
  169. unsigned short MTYPE; //Ethernet Type for HomePlug, should be 0x88E1
  170. unsigned char MMV; //Management Message Version
  171. unsigned short MMTYPE; //Management Message Type
  172. unsigned char FMI[2]; //Fragmentation Management Information, Fragmentation Message Sequence Number
  173. unsigned char MMENTRY[256]; //Management Message Entry Data
  174. } __attribute__((packed));
  175. //Qualcomm Atheros Vendor Specific MME Format
  176. struct QcaVendorMmeHeader
  177. {
  178. unsigned char ODA[6]; //Original Destination Address
  179. unsigned char OSA[6]; //Original source Address
  180. //unsigned int VLAN Tag; //IEEE802.1Q VLAN Tag (optional)
  181. unsigned short MTYPE; //Ethernet Type for HomePlug, should be 0x88E1
  182. unsigned char MMV; //Management Message Version
  183. unsigned short MMTYPE; //Management Message Type
  184. unsigned char OUI[3]; //Fragmentation Management Information, Fragmentation Message Sequence Number
  185. unsigned char MBODY[1024]; //Management Message Entry Data
  186. } __attribute__((packed));
  187. struct V2gtpHeader //8 Bytes (see Figure 25 in DIN 70121)
  188. {
  189. unsigned char ProtocolVersion; //0x01: V2GTP version 1, 0x00, 0x02-0xFF reserved
  190. unsigned char InverseProtocolVersion; //Equals the <Protocol_Version> XOR 0xFF, 0xFE: V2GTP Version 1
  191. unsigned short PayloadType; //0x8001: EXI encoded V2G Message,
  192. //0x9000: SDP request message,
  193. //0x9001: SDP response message,
  194. //0xA000 - 0xFFFF: Manufacturer specific use
  195. unsigned int PayloadLength; //excluding the generic V2GTP header byte
  196. } __attribute__((packed));
  197. typedef struct MODULE_INFO
  198. {
  199. struct timeb startTime[10];
  200. uint8_t QCA7K_SetKey_status;
  201. }Module_Info;
  202. int Proc_din_supportedAppProtocolRes(int AcceptFd);
  203. void SHM_Init_din_ChargeParameterDiscoveryRes(struct CcsData *shm_ccs);
  204. void SHM_Init_din_CableCheckRes(struct CcsData *shm_ccs);
  205. void SHM_Init_din_PreChargeRes(struct CcsData *shm_ccs);
  206. void SHM_Init_din_PowerDeliveryRes(struct CcsData *shm_ccs);
  207. void SHM_Init_din_CurrentDemandRes(struct CcsData *shm_ccs);
  208. void SHM_Init_din_WeldingDetectionRes(struct CcsData *shm_ccs);
  209. void SHM_Init_din_SessionStopRes(struct CcsData *shm_ccs);
  210. int OutputCpPwmDuty(unsigned char Duty);
  211. void Check_EVErrorCode(int code);
  212. unsigned char Check_V2G_Flow_Status_pre();
  213. int End_Process();
  214. int SdpUdpConnected();
  215. int V2gTcpConnected();
  216. #endif /* MODULE_CCS_H_ */