var.h~RF93124a.TMP 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. #ifndef __VAR_H
  2. #define __VAR_H
  3. #include "stm32f1xx_hal.h"
  4. #include "cadence_sensor.h"
  5. #include "torque_sensor.h"
  6. #include "stdlib.h"
  7. #include "string.h"
  8. /******************************类型定义Begin*************************/
  9. typedef enum
  10. {
  11. MC_LightSwitch_OFF = 0xF0,
  12. MC_LightSwitch_ON = 0xF1
  13. }MC_LightSwitch_Struct_t;
  14. //电机运行信息,占用空间32bytes
  15. typedef struct
  16. {
  17. uint16_t BikeSpeed; //车速 0.1km/h,地址偏移0
  18. int16_t MotorSpeed; //输出转速 1rpm,地址偏移2
  19. uint16_t Power; //电功率 1W,地址偏移4
  20. uint16_t BusVoltage; //母线电压 1mV,地址偏移6
  21. uint16_t BusCurrent; //母线电流 1mA,地址偏移8
  22. uint8_t Cadence; //踏频 1rpm,地址偏移10
  23. uint8_t Torque; //踩踏力矩 1Nm,地址偏移11
  24. MC_CadenceDir_Struct_t CadenceDir; //踩踏方向 0-正,1-反,2-停止,地址偏移12
  25. uint8_t GearSt; //助力档位,地址偏移13
  26. MC_LightSwitch_Struct_t LightSwitch; //灯开关 0xF0-关,0xF1-开,地址偏移14
  27. uint8_t SOC; //剩余电量 1%,地址偏移15
  28. uint16_t RemainDistance; //续航里程 1km,地址偏移16
  29. uint16_t ODO_Km; //总里程 1km,地址偏移18
  30. uint8_t PowerPerKm; //平均功耗 0.01Ah/km ,地址偏移20
  31. uint8_t T_PCB; //PCB温度 +40℃,地址偏移21
  32. uint8_t T_Coil; //绕组温度 +40℃,地址偏移22
  33. uint8_t T_MCU; //MCU温度 +40℃,地址偏移23
  34. uint16_t Ride_Km; //开机后骑行里程 0.1km, 地址偏移24
  35. uint16_t Ride_Time; //开机后骑行时间 1s,地址偏移26
  36. uint8_t TorqueSensorData1; //力矩传感器1原始值
  37. uint8_t TorqueSensorData2; //力矩传感器2原始值
  38. uint8_t TorqueSensorData3; //力矩传感器3原始值
  39. uint8_t RS ; //预留 1byte
  40. }MC_RunInfo_Struct_t;
  41. //电机故障码,占用空间4bytes
  42. typedef union MC_ERRORCODE
  43. {
  44. struct
  45. {
  46. uint32_t Protect_OverCurrent :1;//过流保护
  47. uint32_t Protect_UnderVoltage :1;//低压保护
  48. uint32_t Protect_OverVoltage :1;//过压保护
  49. uint32_t Protect_LockRotor :1;//堵转保护
  50. uint32_t Protect_OverTemp :1;//过热保护
  51. uint32_t Fault_SpeedSensor :1;//速度传感器故障
  52. uint32_t Fault_TorqueSensor :1;//力矩传感器故障
  53. uint32_t Fault_HallSensor :1;//霍尔传感器故障
  54. uint32_t Fault_PhaseLine :1;//相线故障
  55. uint32_t Fault_NtcSensor :1;//温度传感器故障
  56. uint32_t Fault_BMS_Check :1;//BMS校验失败
  57. uint32_t Fault_HMI_Check :1;//HMI校验失败
  58. uint32_t Fault_PBU_Check :1;//PBU校验失败
  59. uint32_t Fault_MCU :1;//MCU故障
  60. uint32_t Fault_CadenceSensor :1;//踏频传感器故障
  61. uint32_t Fault_GasSensor :1;//指拨故障
  62. uint32_t Fault_MOS :1;//MOS短路
  63. uint32_t Protect_VoltageChange :1;//电压波动异常
  64. uint32_t Fault_Circuit :1;//电路故障
  65. uint32_t Fault_TE_MCU :1;//TE MCU故障
  66. uint32_t Fault_TE_Circuit :1;//TE 电路故障
  67. uint32_t Fault_MC_Check :1;//MC校验失败
  68. uint32_t RS1 :1;
  69. uint32_t RS2 :1;
  70. uint32_t RS3 :1;
  71. uint32_t RS4 :1;
  72. uint32_t RS5 :1;
  73. uint32_t RS6 :1;
  74. uint32_t RS7 :1;
  75. uint32_t RS8 :1;
  76. uint32_t RS9 :1;
  77. uint32_t RS10 :1;
  78. }ERROR_Bit;
  79. uint32_t Code;
  80. }MC_ErrorCode_Struct_t;
  81. //在线检测结果,占用空间1byte
  82. typedef union ONLINE_STATUS
  83. {
  84. struct
  85. {
  86. uint8_t BMS_OffLine :1;//BMS离线
  87. uint8_t PBU_OffLine :1;//PBU离线
  88. uint8_t HMI_OffLine :1;//HMI离线
  89. uint8_t RS1 :1;
  90. uint8_t RS2 :1;
  91. uint8_t RS3 :1;
  92. uint8_t RS4 :1;
  93. uint8_t RS5 :1;
  94. }Status_Bit;
  95. uint8_t Status;
  96. }OnLine_Status_Struct_t;
  97. //授权校验,占用空间24bytes
  98. typedef struct
  99. {
  100. uint8_t MAC_ID[12]; //物理ID
  101. uint8_t CheckCode[12]; //校验码
  102. }Device_CheckInfo_Struct_t;
  103. //BMS设计信息,占用空间16bytes
  104. typedef struct
  105. {
  106. uint16_t Capacity; //电池设计容量,地址偏移0
  107. uint8_t Voltage; //电池设计电压,地址偏移2
  108. uint8_t CellMode[8]; //电芯型号,地址偏移3
  109. uint8_t RS[5];
  110. }BMS_DesignInfo_Struct_t;
  111. typedef enum STARMODE
  112. {
  113. NC = 0U,
  114. MC_StarMode_SOFT,
  115. MC_StarMode_NORM,
  116. MC_StarMode_DYNAMIC,
  117. }MC_StarMode_Struct_t;
  118. typedef struct
  119. {
  120. uint8_t Assist_K_GAIN; //0.01 50-150
  121. uint8_t StarModel_GAIN; //0.01 50-150
  122. }UserAdjParam_Struct_t;
  123. typedef enum MC_SUPPORTFLAG
  124. {
  125. MC_SUPPORT_ENABLE = (uint8_t)0xAA, //支持
  126. MC_SUPPORT_DISABLE = (uint8_t)0x55 //不支持
  127. }MC_SupportFlag_Struct_t;
  128. //用户配置参数1,占用空间32bytes
  129. typedef struct
  130. {
  131. MC_SupportFlag_Struct_t GasCtrlMode_Flag; //指拨模式支持标志,地址偏移0
  132. MC_StarMode_Struct_t StarModel; //启动模式,地址偏移1
  133. uint16_t StopTime; //停机时间 ms,地址偏移2
  134. uint8_t SpeedLimit; //限速 km/h,地址偏移4
  135. uint8_t Deceleration; //下降速度,地址偏移5
  136. uint8_t TeethNum_F; //前齿数 T,地址偏移6
  137. uint8_t TeethNum_B; //后齿数 T,地址偏移7
  138. uint8_t CurrentLimit; //限流 A,地址偏移8
  139. uint8_t TempTH_Alarm; //高温预警值 +40℃,地址偏移9
  140. uint8_t TempTH_Protect; //高温保护值 +40℃,地址偏移10
  141. MC_SupportFlag_Struct_t NoPBU_Flag; //0x55-不支持,0x-AA支持,地址偏移11
  142. uint8_t WheelSize; //轮胎周长 cm,地址偏移12
  143. uint8_t SerialNum; //系列号,地址偏移13
  144. UserAdjParam_Struct_t UserAdjParam_ECO; //用户微调助力比增益和加速度增益,地址偏移14
  145. UserAdjParam_Struct_t UserAdjParam_NORM; //用户微调助力比增益和加速度增益,地址偏移16
  146. UserAdjParam_Struct_t UserAdjParam_SPORT; //用户微调助力比增益和加速度增益,地址偏移18
  147. UserAdjParam_Struct_t UserAdjParam_TURBO; //用户微调助力比增益和加速度增益,地址偏移20
  148. UserAdjParam_Struct_t UserAdjParam_SMART; //用户微调助力比增益和加速度增益,地址偏移22
  149. uint8_t SpeedSensorPoles; //速度传感器极数,地址偏移24
  150. uint8_t CadenceStarNum; //踏频启动信号个数,地址偏移25
  151. MC_SupportFlag_Struct_t No_SpeedSensor_Flag; //0x55-不支持,0x-AA支持,地址偏移26
  152. int8_t WheelSizeAdj; //周长微调值,地址偏移27
  153. uint8_t RS[4];//地址偏移28
  154. }MC_ConfigParam1_Struct_t;
  155. //用户配置参数2,占用空间32bytes
  156. typedef struct
  157. {
  158. int16_t ZeroAngle_Pitch; //俯仰角零度偏移,地址偏移0
  159. int16_t ZeroAngle_Roll; //横滚角零度偏移,地址偏移2
  160. MC_SupportFlag_Struct_t UseAttitudeAngle_Flag; //支持姿态角度传感器标志,地址偏移4
  161. uint8_t RS2[27];//地址偏移5
  162. }MC_ConfigParam2_Struct_t;
  163. //姿态传感器数值
  164. typedef struct
  165. {
  166. int16_t Angle_Pitch_Absolute; //俯仰角绝对角度
  167. int16_t Angle_Roll_Absolute; //横滚角绝对角度
  168. int16_t Angle_Pitch_Relative; //俯仰角相对角度
  169. int16_t Angle_Roll_Relative; //横滚角相对角度
  170. }MC_AttitudeAngle_Struct_t;
  171. //马达配置参数,占用空间16bytes
  172. typedef struct
  173. {
  174. uint16_t Rate_Power; //W,地址偏移0
  175. uint16_t Rate_Speed; //rpm,地址偏移2
  176. uint16_t Coil_R; //mohm,地址偏移4
  177. uint16_t Coil_Lq; //mH,地址偏移6
  178. uint16_t Coil_Ld; //mH,地址偏移8
  179. uint16_t Back_EMF; //mV,地址偏移10
  180. uint8_t Rate_Voltage; //V,地址偏移12
  181. uint8_t RS[3];
  182. }MC_MotorParam_Struct_t;
  183. //MC运行历史,占用空间48bytes
  184. typedef struct
  185. {
  186. uint32_t PowerOnCnt; //开机次数,地址偏移0
  187. uint32_t RunTime; //运行总时间 min,地址偏移4
  188. uint16_t OC_ProtectCnt; //过流保次数 ,地址偏移8
  189. uint16_t UV_ProtectCnt; //低压保护次数,地址偏移10
  190. uint16_t OV_ProtectCnt; //高压保护次数,地址偏移12
  191. uint16_t LockRotor_ProtectCnt; //堵转保护次数 ,地址偏移14
  192. uint16_t OT_ProtectCnt; //温度保护次数,地址偏移16
  193. uint16_t SPS_FaultCnt; //速度传感器错误次数,地址偏移18
  194. uint16_t TQS_FaultCnt; //力矩传感器错误次数 ,地址偏移20
  195. uint16_t Hall_FaultCnt; //霍尔传感器错误次数 ,地址偏移22
  196. uint16_t PhaseLine_FaultCnt; //马达相线错误次数,地址偏移24
  197. uint16_t NTC_FaultCnt; //NTC错误次数,地址偏移26
  198. uint16_t BMS_Check_FaultCnt; //BMS校验错误次数,地址偏移28
  199. uint16_t HMI_Check_FaultCnt; //HMI校验错误次数,地址偏移30
  200. uint16_t PBU_Check_FaultCnt; //PBU校验错误次数 ,地址偏移32
  201. uint8_t T_PCB_Max; //PCB历史最高温,地址偏移34
  202. uint8_t T_PCB_Min; //PCB历史最低温,地址偏移35
  203. uint8_t RS1[4]; //预留,地址偏移36
  204. uint8_t T_Coil_Max; //绕组历史最高温,地址偏移40
  205. uint8_t T_Coil_Min; //绕组历史最低温,地址偏移41
  206. uint8_t T_MCU_Max; //MCU历史最高温,地址偏移42
  207. uint8_t T_MCU_Min; //MCU历史最低温,地址偏移43
  208. uint8_t RS2[4];
  209. }MC_RunLog1_Struct_t;
  210. //MC运行历史,占用空间24bytes
  211. typedef struct
  212. {
  213. uint16_t MCU_FaultCnt;
  214. uint16_t CadenceSensor_FaultCnt;
  215. uint16_t GasSensor_FaultCnt;
  216. uint16_t MOS_ShortCircuit_FaultCnt;
  217. uint16_t VoltageChange_FaultCnt;
  218. uint16_t Circuit_FaultCnt;
  219. uint16_t TE_MCU_FaultCnt;
  220. uint16_t TE_Circuit_FaultCnt;
  221. }MC_RunLog2_Struct_t;
  222. //MC骑行历史信息,占用空间16bytes
  223. typedef struct
  224. {
  225. uint32_t ODO_Km; //ODO里程,地址偏移0
  226. uint32_t ODO_Time; //ODO时间,地址偏移4
  227. uint32_t TRIP_Km; //TRIP里程,地址偏移8
  228. uint32_t TRIP_Time; //TRIP时间,地址偏移12
  229. }MC_RideLog_Struct_t;
  230. //MC版本信息,占用空间64bytes
  231. typedef struct
  232. {
  233. char Mode[16]; //型号 ASCII,0x2E结束,无效填充0x20
  234. char SN_Num[16]; //序列号 ASCII,0x2E结束,无效填充0x20
  235. char HW_Version[16]; //硬件版本 ASCII,0x2E结束,无效填充0x20
  236. char FW_Version[16]; //软件版本 ASCII,0x2E结束,无效填充0x20
  237. }MC_VerInfo_Struct_t;
  238. //MC生产信息,占用空间32bytes
  239. typedef struct
  240. {
  241. char Manufacturer[8]; //生产厂商 ASCII,0x2E结束,无效填充0x20
  242. char MacAddr[8]; //生产地 ASCII,0x2E结束,无效填充0x20
  243. char MacDate[8]; //生产日期 ASCII,0x2E结束,无效填充0x20
  244. char RS[8];
  245. }MC_MacInfo_Struct_t;
  246. //MC掉电临时保存数据,占用40bytes
  247. typedef struct
  248. {
  249. uint32_t ODO_Km;
  250. uint32_t ODO_Time;
  251. uint32_t Trip_Km;
  252. uint32_t Trip_Time;
  253. uint32_t Run_Time;
  254. uint32_t RS[5];
  255. }MC_PowerOffBkp_Struct_t;
  256. //电池运行状态,占用空间1bytes
  257. typedef union BMS_STATUS
  258. {
  259. struct
  260. {
  261. uint8_t Charge :1;//充电
  262. uint8_t Discharge :1;//放电
  263. uint8_t RS1 :1;
  264. uint8_t RS2 :1;
  265. uint8_t RS3 :1;
  266. uint8_t RS4 :1;
  267. uint8_t RS5 :1;
  268. uint8_t RS6 :1;
  269. }Status_Bit;
  270. uint8_t Status;
  271. }BMS_STATUS_Struct_t;
  272. //电池运行信息,占用空间16bytes
  273. typedef struct
  274. {
  275. uint16_t Voltage; //电压 1mV,地址偏移0
  276. uint16_t Current; //电流 1mA,地址偏移2
  277. uint16_t RC; //剩余容量 1mAh,地址偏移4
  278. uint16_t FCC; //满充容量 1mAh,地址偏移6
  279. uint8_t Cell_NTC; //电芯温度 +40℃,地址偏移8
  280. uint8_t SOC; //剩余电量 1%,地址偏移9
  281. BMS_STATUS_Struct_t Status; //运行状态,地址偏移10
  282. uint8_t RS[5];
  283. }BMS_RunInfo_Struct_t;
  284. //PBU配置的参数,占用空间8bytes
  285. typedef struct
  286. {
  287. uint8_t GearsNum; //助力档位数量
  288. MC_SupportFlag_Struct_t NoHMI_Flag; //支持无HMI标识,0x55-不支持,0x-AA支持
  289. uint8_t RS[6];
  290. }PBU_ConfigParam_Struct_t;
  291. typedef union TE_ERROR_CODE
  292. {
  293. struct
  294. {
  295. uint16_t BikeSpeed :1;//速度传感器, 电路故障
  296. uint16_t TorqueSensor :1;//力矩传感器, 电路故障
  297. uint16_t Current :1;//母线电流, 电路故障
  298. uint16_t T_Coil :1;//绕组温度, 电路故障
  299. uint16_t HallSensor_A :1;//霍尔传感器A, 电路故障
  300. uint16_t HallSensor_B :1;//霍尔传感器A, 电路故障
  301. uint16_t CadenseSensor_1 :1;//踏频传感器1, 电路故障
  302. uint16_t CadenseSensor_2 :1;//踏频传感器2, 电路故障
  303. uint16_t StopBreak :1;//刹车信号, 电路故障
  304. uint16_t VCC :1;//3.3V异常, 电路故障
  305. uint16_t ClockFreq :1;//系统时钟异常, 主控MCU故障
  306. uint16_t ComFault :1;//串口通讯RX故障,主控MCU故障
  307. uint16_t MCUFault :1;//MCU异常, TE MCU故障
  308. uint16_t RS1 :1;
  309. uint16_t RS2 :1;
  310. uint16_t RS3 :1;
  311. }Status_Bit;
  312. uint16_t Code;
  313. }TE_ErrorCode_Struct_t;
  314. //TE传回传感器状态
  315. typedef struct
  316. {
  317. TE_ErrorCode_Struct_t TE_ErrorCode;
  318. uint16_t MCU_Voltage;
  319. uint16_t SyncClockFreq;
  320. uint16_t RS;
  321. }MC_TE_SensorStatus_Struct_t;
  322. //发给TE传感器结果
  323. typedef struct
  324. {
  325. uint16_t AD_Torque; //力矩传感器AD值,地址偏移0
  326. uint16_t AD_BusCurrent; //母线电流AD值,地址偏移2
  327. uint16_t AD_CoilTemp; //绕组温度AD值,地址偏移4
  328. uint16_t AD_TE_Voltage; //TE电压AD值,地址偏移6
  329. uint16_t CadenceHall_1_Cnt; //踏频霍尔1计数,地址偏移8
  330. uint16_t CadenceHall_2_Cnt; //踏频霍尔2计数,地址偏移10
  331. uint16_t MotorHall_A_Cnt; //马达霍尔1计数,地址偏移12
  332. uint16_t MotorHall_B_Cnt; //马达霍尔2计数,地址偏移14
  333. uint8_t BreakTrgiCnt; //刹车计数,地址偏移16
  334. uint8_t SpeedSensorTrigCnt; //速度传感器计数,地址偏移17
  335. uint16_t SynC_Clock_Freq; //地址偏移18
  336. }MC_TE_SensorData_Struct_t;
  337. typedef enum _TO_TE_SENDSTEP
  338. {
  339. HANDSHAKE = 0U,
  340. SENDSENSOR,
  341. SENDUPDATA,
  342. }To_Te_SendStep;
  343. //助力计算参数
  344. typedef struct
  345. {
  346. uint16_t Gain_K; //助力比系数,放大100倍,偏移地址 0
  347. uint16_t i_Sport_TH; //i-Sport档位力矩阈值,偏移地址 2
  348. uint16_t Lower_Iq; //助力输出下限值,偏移地址 4
  349. uint16_t Upper_Iq; //助力输出上限值,偏移地址 6
  350. uint8_t AccCnt; //力矩控制ref加速斜率, 偏移地址 8
  351. uint8_t DecCnt; //力矩控制ref减速斜率, 偏移地址 9
  352. uint16_t CurrentMax_K; //最大电流 / 限流值百分比, 偏移地址 10
  353. }nGearParam_Struct_t; //n档位控制参数结构体定义
  354. typedef struct
  355. {
  356. nGearParam_Struct_t Gear_ECO; //ECO档控制参数,偏移地址 0
  357. nGearParam_Struct_t Gear_NORM; //NORM档控制参数,偏移地址 12
  358. nGearParam_Struct_t Gear_SPORT; //SPORT档控制参数,偏移地址 24
  359. nGearParam_Struct_t Gear_TURBO; //TURBO档控制参数,偏移地址 36
  360. nGearParam_Struct_t Gear_SMART; //SMART档控制参数,偏移地址 48
  361. }MC_AssistParam_Struct_t;
  362. typedef struct
  363. {
  364. TrueOrFalse_Flag_Struct_t IsOK_Flag;
  365. uint32_t OK_TrigTime;
  366. }ComOK_Check_Struct_t;
  367. /******************************类型定义End***************************/
  368. /**************************全局变量声明Begin*************************/
  369. extern MC_RunInfo_Struct_t MC_RunInfo;
  370. extern MC_ErrorCode_Struct_t MC_ErrorCode;
  371. extern MC_VerInfo_Struct_t MC_VerInfo;
  372. extern OnLine_Status_Struct_t DeviceOnLine_Status;
  373. extern BMS_RunInfo_Struct_t BMS_RunInfo;
  374. extern Device_CheckInfo_Struct_t BMS_CheckInfo;
  375. extern BMS_DesignInfo_Struct_t BMS_DesignInfo;
  376. extern Device_CheckInfo_Struct_t PBU_CheckInfo;
  377. extern PBU_ConfigParam_Struct_t PBU_ConfigParam;
  378. extern Device_CheckInfo_Struct_t HMI_CheckInfo;
  379. extern MC_ConfigParam1_Struct_t MC_ConfigParam1;
  380. extern MC_ConfigParam2_Struct_t MC_ConfigParam2;
  381. extern MC_MotorParam_Struct_t MC_MotorParam;
  382. extern MC_RunLog1_Struct_t MC_RunLog1;
  383. extern MC_RunLog2_Struct_t MC_RunLog2;
  384. extern uint8_t Secret_Key[8];
  385. extern MC_MacInfo_Struct_t MC_MacInfo;
  386. extern uint8_t UserString1[16];
  387. extern uint8_t UserString2[16];
  388. extern uint8_t UserString3[16];
  389. extern MC_PowerOffBkp_Struct_t MC_PowerOffBkp;
  390. extern Device_CheckInfo_Struct_t MC_CheckInfo;
  391. extern MC_TE_SensorStatus_Struct_t MC_TE_SensorStatus;
  392. extern MC_TE_SensorData_Struct_t MC_TE_SensorData;
  393. extern uint16_t MC_TE_SyncClockFreqScan;
  394. extern TrueOrFalse_Flag_Struct_t TE_MCU_DataRefreshFlag;
  395. extern FlagStatus TE_CheckFlag;
  396. extern MC_AssistParam_Struct_t MC_AssisParam;
  397. extern uint8_t MC_WalkMode_Persent;
  398. extern ComOK_Check_Struct_t IsComOK_TE;
  399. extern ComOK_Check_Struct_t IsComOK_PBU;
  400. extern ComOK_Check_Struct_t IsComOK_HMI;
  401. extern ComOK_Check_Struct_t IsComOK_BMS;
  402. extern MC_AttitudeAngle_Struct_t MC_AttitudeAngle;
  403. extern MC_RideLog_Struct_t MC_RideLog;
  404. /**************************全局变量声明End***************************/
  405. /**************************全局函数声明Begin*************************/
  406. extern void Var_Init(void);
  407. extern void UpdateGearParam(uint8_t SerialNum);
  408. extern void Var_SetToDefaultParam(void);
  409. extern void Var_SetToDefaultLog(void);
  410. /**************************全局函数声明End***************************/
  411. #endif