#ifndef PROTOFECBUS_H_
#define PROTOFECBUS_H_

#include "gType.h"
#include "TDateTime.h"

#define FecPublishEventRxBufCount	16
#define FecRecentUsingCount		16

#define dFEC_MSG_RECORD_LEN	17

typedef enum{
	ftRsv = 0,//0  预留
	ftMainCtl = 1,//1 控制器/具有联动控制功能的控制器
	ftMainCtlFireLinkkage,//2 消防联动控制器
	ftGraphShow,//3 消防控制室图形显示装置
	
	ftRsv4, ftRsv5, ftRsv6, ftRsv7, ftRsv8, ftRsv9, // 4 ~ 9	预留
	
	ftDisplayPad,//10 火灾显示盘
	ftDetecteCircuit,		//11 探测回路
	ftCtlCircuit,		//12 控制回路
	ftCircuit,			//13 探测与控制复合回路
	ftMainPower,		//14 主电源
	ftStandbyPower,	//15 备用电源
	ftBatChargeCircuit,	//16 充电电路
	ftAlramVaCircuit,		//17 声光警报回路
	ftDataMemCard,		//18 运行数据存储单元
	
	ftRsv19,			//19 预留
	
	ftFireDetecter,//20 火灾探测
	ftFireSmokeDetecter,//21 感烟火灾探测器
	ftPointIonSmokeDetecter,//22 点型离子感烟火灾探测器
	ftPointLightSmokeDetecter,//23 点型光电感烟火灾探测器
	ftLineLightSmokeDetecter,//24 线型光束感烟火灾探测器
	ftAirBreathingSmokeDetecter,//25 吸气式感烟火灾探测器
	
	ftRsv26, ftRsv27, ftRsv28, ftRsv29, // 26 ~ 29	预留
	
	ftTempDetecter,//30 感温火灾探测器
	ftPointTempDetecter,//31 点型感温火灾探测器
	ftLineTempDetecter,//32 线型感温火灾探测器
	
	ftCableLineFireDetecter,//33 缆式线型火灾探测器
	ftAirTubeLineFireDetecter,//34 空气管式线型火灾探测器
	ftLineOpticalTempDetecter,//35 线型光纤感温火灾探测器
	
	ftRsv36, ftRsv37, ftRsv38, ftRsv39, // 36 ~ 39	预留
	
	ftFlameDetector,//40 火焰探测器
	ftPointIrFlameDetector,//41 点型红外火焰探测器
	ftPointUvFlameDetector,//42 点型紫外火焰探测器
	ftPointCompoundIrUvFlameDetector,//43 点型复合式红外紫外火焰探测器
	
	ftRsv44, ftRsv45, ftRsv46, ftRsv47, ftRsv48, ftRsv49, // 44 ~ 49	预留
	
	ftMultiSensorCompositeDetector,//50 多传感复合探测器
	ftLightSensitiveFireDetecter,//51 感光火灾探测器
	ftPhotoFireDetecter,//52 图像型火灾探测器
	ftPointCoFireDetecter,//53 点型一氧化碳火灾探测器
	
	ftRsv54, ftRsv55, ftRsv56, ftRsv57, ftRsv58, ftRsv59, ftRsv60, //54~60 预留
	
	ftManualFireAlarmButton,//61 手动火灾报警按钮
	ftFireHydrantButton,//62 消火栓按钮
	ftEmergencyStartButton,//63 紧急启动按钮
	ftEmergencyStopButton,//64 紧急停止按钮
	ftRsv65, ftRsv66, ftRsv67, ftRsv68, ftRsv69, ftRsv70, //65~70 预留
	
	ftMoudle,//71 模块
	ftInputMoudle,//72 输入模块
	ftOutputMoudle,//73 输出模块
	ftInOutMoudle,//74 输入/输出模块
	ftRepeaterMoudle,//75 中继模块
	ftShortCircuitIsolator,//76 短路隔离器
	
	ftRsv77, ftRsv78, ftRsv79, ftRsv80, //77~80 预留
	
	ftFireAlarmDevice,//81 火灾警报装置
	ftSoundLightFireAlarm,//82 火灾声光警报器
	ftSoundFireAlarm,//83 火灾声警报器
	ftLightFireAlarm,//84 火灾光警报器
	ftGasReleaseAlarm,//85 气体释放警报器
	ftAlarmBell,//86 警铃
	
	ftRsv87, ftRsv88, ftRsv89, ftRsv90,
	ftRsv91, ftRsv92, ftRsv93, ftRsv94, ftRsv95, ftRsv96, ftRsv97, ftRsv98, ftRsv99, //87~99 预留
	
	ftCombustibleGasAlarmController,//100 可燃气体报警控制器
	ftCombustibleGasDetecter,//101 可燃气体探测器
	ftPointCombustibleGasDetecter,//102 点型可燃气体探测器
	ftLineCombustibleGasDetecter,//103 线型可燃气体探测器

	ftRsv104, ftRsv105, ftRsv106, ftRsv107, ftRsv108, ftRsv109, //104~109 预留

	ftElecFireMonitor,//110 电气火灾监控设备
	ftElecFireMonitoringDetector,//111 电气火灾监控探测器
	ftResidualCurrentElecFireMonitoringDetector,//112 剩余电流式电气火灾监控探测器
	ftTempMeasuringElecFireMonitoringDetector,//113 测温式电气火灾监控探测器
	ftFaultArcDetectionDevice,//114 故障电弧探测装置
	
	ftRsv115, ftRsv116, ftRsv117, ftRsv118, ftRsv119, //115~119 预留
	
	ftEmergencyLightingController,//120 应急照明控制器
	ftFireEmergencySignLamp,//121 消防应急标志灯具
	ftFireEmergencyLightingLamp,//122 消防应急照明灯具
	ftFireEmergencyLampPower,//123 消防应急灯具专用应急电源
	ftEmergencyLightingDistributionDevice,//124 应急照明分配电装置
	
	ftRsv125, ftRsv126, ftRsv127, ftRsv128, ftRsv129, //125~129 预留
	
	ftFireDoorMonitor,//130 防火门监控器
	ftNormalCloseFireDoor,//131 常闭防火门
	ftNormalOpenFireDoor,//132 常开防火门
	ftFireDoorElectricCloser,//133 防火门电动闭门器
	ftFireDoorElectromagneticRelease,//134 防火门电磁释放器
	ftFireDoorMagneticSwitch,//135 防火门门磁开关
	
	ftRsv136, ftRsv137, ftRsv138, ftRsv139, //136~139 预留
	
	ftFireEquipmentPowerMonitor,//140 消防设备电源监控器
	ftFireEquipmentPowerVoltageSensor,//141 消防设备电源电压信号传感器
	ftFireEquipmentPowerCurrentSensor,//142 消防设备电源电流信号传感器
	ftFireEquipmentPowerVoltageCurrentSensor,//143 消防设备电源电压/电流信号传感器
	
	ftRsv144, ftRsv145, ftRsv146, ftRsv147, ftRsv148, ftRsv149, //144~149 预留
	
	ftGasFireControler,//150 气体灭火控制器
	ftFoamExtinguishingSystem,//151 泡沫灭火系统
	ftPowderExtinguishingSystem,//152 干粉灭火系统
	ftSmokePreventionExhaustSystem,//153 防烟排烟系统
	ftFireShutterContorler,//154 防火卷帘控制器
	ftCeilingScreenControler,//155 挡烟垂壁控制装置
	ftFireEmergencyBroadcastSystem,//156 消防应急广播系统
	ftFireTelephoneHost,//157 消防电话主机
	ftFireEmergencyPower,//158 消防设备应急电源
	ftTransmissionDevice,//159 传输设备
	ftHomeFireSystemControlCenterMonitor,//160 家用火灾安全系统控制中心监控设备
	ftFireWaterLevelMonitor,//161 消防水位监视器
	ftFireLift,//162 消防电梯
	ftFireElectricalControler,//163 消防电气控制装置

	ftRsv164, ftRsv165, ftRsv166, ftRsv167, ftRsv168, ftRsv169, ftRsv170, 
	ftRsv171, ftRsv172, ftRsv173, ftRsv174, ftRsv175, ftRsv176, ftRsv177, ftRsv178, //164~178 预留
	
	ftFirePumpController,//179 消防泵控制器
	ftFireHydrantPump,//180 消防栓泵
	ftWaterSprayPump,//181 水喷雾泵
	ftWaterMistPump,//182 细水雾泵
	ftStabilizedPressurePump,//183 稳压泵
	ftSprinklerPump,//184 喷淋泵
	ftDelugePump,//185 雨淋泵
	ftFoamConcentratePump,//186 泡沫液泵
	ftWaterFlowIndicator,//187 水流指示器
	ftAlarmValve,//188 报警阀
	ftPressureSwitch,//189 压力开关
	ftFlowSwitch,//190 流量开关
	ftValveActuator,//191 阀驱动装置
	ftElectricFireValve,//192 电动防火阀
	ftFireDamper70deg,//193 70℃防火阀
	ftFireDamper280deg,//194 280℃防火阀
	ftVentilatingAirConditioning,//195 通风空调
	ftPipeNetworkElectromagneticValve,//196 管网电磁阀
	ftSmokePreventionExhaustFan,//197 防烟排烟风机
	ftElectricExhaustFireDamper,//198 电动排烟防火阀
	ftNormalCloseAirSupplyOutlet,//199 常闭送风口
	ftSmokeOutlet,//200 排烟口
	ftFireWaterMonitor,//201 消防水炮
	ftElectricDoor,//202 电动门
	ftSmokeVentilator,//203 排烟机
	ftForcedDraughtBlower,//204 送风机
	ftElectromagneticValve,//205 电磁阀
	ftLightDistribution,//206 照明配电
	ftPowerDistribution,//207 动力配电
	ftAirCompressor,//208 空压机
	ftValve,//209 阀门
	ftDistributionBox,//210 配电箱
	
	ftRsv211, ftRsv212, ftRsv213, ftRsv214, ftRsv215, ftRsv216, ftRsv217, ftRsv218, ftRsv219, ftRsv220, //211~220 预留
	
	//211~251 User Define
	ftMethaneDetector,           // 221
	ftPropaneDetector,           // 222
	ftMethaneCODetector,        // 223
	ftH2SDetector,               // 224
	ftSmokeHeatDetector,        // 225
	ftSmokeCODetector,          // 226
	ftBuzzerBase,                // 227
	ftSingleDoorInputModule,     // 228
	ftDoubleDoorInputModule,     // 229
	ftActiveIOModule,           // 230
	ftBroadcastModule,           // 231
	ftCodedTelephoneModule,      // 232
	ftTheftDetectorInterface,    // 233
	ftIndustrialModule,          // 234
	ftDoorLight,                 // 235
	ftExplosionProofBox,         // 236
	ftHeatCableProcessor,        // 237
	ftHeatAlarm,                 // 238
	ftHeatLeakageAlarm,         // 239
	ft3PhasePowerMonitor,       // 240
	ft2PhasePowerMonitor,       // 241
	ftPressureController,        // 242
	ftPressureDetector,          // 243
	ftSignalValve,               // 244
	ftLinkagePower,              // 245
	ftManualAutoIndicator,      // 246
	ftEmergencyStartStop,       // 247
	ftDirCtlPanel,           // 248  多线盘
	ftBusCtlPanel,           // 249  总线盘
	ftGasExtinguishPanel,        // 250
	ftCanNetworkComm,        // 251  联网接口卡

	ftRsv252, ftRsv253, ftRsv254, ftRsv255, ftRsv256, //252~256 预留
	//256~65534 User Define
	ftUndefineFecDevType = 300,//300 未知设备类型
	
	ftConnectMutiDevice = 65535,//65535 连接了多种设备
	
}TFecDevTypeCode;

typedef enum {
	evtRsv0 = 0,				//0  预留	预留
	evNormal = 1,			//1  正常	一般事件
	evFirstFireAlarm ,		//2  首火警	紧急事件
	evFireAlarm,			//3  火警	紧急事件
	evFireAlarmElectrical,		//4  电气火灾报警	紧急事件
	evGasLowThreshold,		//5  可燃气体低限报警	紧急事件
	
	evGasHiThreshold,			//6  可燃气体高限报警	紧急事件
	evGasExcess,			//7  可燃气体超量程报警	紧急事件
	evFireAlarmPreWarning,		//8  电气火灾预警	紧急事件
	evFaultOrFireAlarmExactly,	//9  确认故障信息、火灾报警信息	紧急事件
	evFaultOrFireAlarmRevoke,	//10  火警撤销	紧急事件
	evFireAlarmElectricalRevoke,	//11  电气火灾报警撤销	紧急事件
	evGasLowThresholdRevoke, 	//12  1可燃气体低限报警撤销	紧急事件
	evGasHiThresholdRevoke,		//13  可燃气体高限报警撤销	紧急事件
	evGasExcessRevoke,		//14	可燃气体超量程报警撤销	紧急事件
	evFireAlarmPreWarningRevoke,	//15	电气火灾预警撤销	紧急事件
	
	evRsv16, evRsv17, evRsv18,	//16～18	预留	预留
	
	evLaunch,				//19	启动	紧急事件
	evLaunchAutomatic,		//20	自动启动	紧急事件
	evLaunchManual,			//21	手动启动	紧急事件
	evLaunchLiveEmergency,		//22	现场急启	紧急事件
	evLaunchInrerLink,		//23  联动启动	紧急事件
	evGasMisfireDelay,		//24	气体灭火开始延时	紧急事件
	evGasSplash,			//25	气体喷洒	紧急事件
	evFeedBack,				//26	反馈	紧急事件
	evGasSplashFeedBack,		//27	喷洒反馈	紧急事件
	evFeedBackRevoke,			//28	反馈撤销	紧急事件
	evShutoff,				//29	停止	紧急事件
	evShutoffLiveEmergency,		//30	现场急停	紧急事件
	evHydrantLowPressure,		//31	消火栓系统、自动喷淋系统水压低	一般事件
	
	evRsv32, evRsv33, evRsv34,  	//32～39	预留	预留
	evRsv35, evRsv36, evRsv37, 	//32～39	预留	预留
	evRsv38, evRsv39, 		//32～39	预留	预留
	
	evEmergency,			//40	应急	紧急事件
	evMonthlyCheck,			//41	月检	一般事件
	evYearlyCheck,			//42	年检	一般事件
	evSigneLumSigneChanged,		//43	标志灯具改变方向	一般事件
	
	evElevatorLanding,		//44	电梯迫降	紧急事件
	evRollerShutterHalfShut,	//45	卷帘半降	紧急事件
	evRollerShutterShut,		//46	卷帘全降	紧急事件
	evCall,				//47	呼叫	紧急事件
	evTelephoneCommunications,	//48	通话	紧急事件
	evDevPowerLost,			//49	消防设备电源失电	紧急事件
	evDevPowerVoltageLow,		//50	消防设备电源欠压	一般事件
	evDevPowerVoltageHi,		//51	消防设备电源过压	一般事件
	evDevPowerOverLoad,		//52	消防设备电源过载	一般事件
	evDevPowerPhaseLacking,		//53	消防设备电源缺相	紧急事件
	evDevPowerPhaseStagger,		//54	消防设备电源错相	紧急事件
	evCisternWaterLow,		//55	消防水箱（池）水位低	一般事件
	evEmergencyElevator,		//56	消防电梯停用	紧急事件
	
	evRsv57,evRsv58,evRsv59,	//57～69	预留	预留
	evRsv60,evRsv61,evRsv62,	//57～69	预留	预留
	evRsv63,evRsv64,evRsv65,	//57～69	预留	预留
	evRsv66,evRsv67,evRsv68,	//57～69	预留	预留
	evRsv69,				//57～69	预留	预留
	
	evSuperVisory,			//70	监管	紧急事件
	evSuperVisoryRelieve,		//71	监管解除	紧急事件
	evMask,				//72	屏蔽	一般事件
	evMaskRelieve,			//73	屏蔽解除	一般事件
	
	evRsv74, evRsv75, evRsv76, 	//74～79	预留	预留
	evRsv77, evRsv78, evRsv79,	//74～79	预留	预留
	
	evFault,				//80	故障	一般事件
	evFaultCommunications,		//81	通讯故障	一般事件  */
	evFaultMainPower,			//82	主电故障	一般事件
	evFaultSparePower,		//83	备电故障	一般事件
	evFaultCharge,			//84	充电故障	一般事件
	evFaultLoopTank,			//85	回路故障	紧急事件
	evFaultComponent,			//86	部件故障	一般事件	
	evFaultCircuit,			//87	线路故障	一般事件	circuit
	evFaultGrounding,			//88	接地故障	一般事件
	evNormallyCloseDoorOpen,	//89	常闭防火门打开	一般事件
	evNormallyOpenDoorClose,	//90	常开防火门关闭	一般事件
	
	evRsv91, evRsv92, evRsv93, 	//91～99	预留	预留
	evRsv94, evRsv95, evRsv96, 	//91～99	预留	预留
	evRsv97, evRsv98, evRsv99, 	//91～99	预留	预留
	
	evFaultRecover, 			//100	故障恢复	一般事件
	evFaultCommunicationsRecover,	//101	通讯故障恢复	一般事件
	evFaultMainPowerRecover,	//102	主电故障恢复	一般事件
	evFaultSparePowerRecover,	//103	备电故障恢复	一般事件
	evFaultChargeRecover,		//104	充电故障恢复	一般事件
	evFaultLoopTankRecover,		//105	回路故障恢复	一般事件
	evFaultComponentRecover,	//106	部件故障恢复	一般事件
	evFaultCircuitRecover,		//107	线路故障恢复	一般事件
	evFaultGroundingRecover,		//108	接地故障恢复	一般事件
	evNormallyCloseDoorOpenRecover,	//109	常闭防火门恢复关闭状态	一般事件
	evNormallyOpenDoorCloseRecover,	//110	常开防火门恢复开门状态	一般事件
	
	evRsv111, evRsv112, evRsv113, 	//111～119	预留	预留
	evRsv114, evRsv115, evRsv116, 	//111～119	预留	预留
	evRsv117, evRsv118, evRsv119,		//111～119	预留	预留 
	
	evSystemPowerOn,				//120	开机	一般事件
	evSystemPowerOff,				//121	关机	一般事件
	evReset,					//122	复位	紧急事件
	evSelfCheck,				//123	自检	一般事件
	evSelfCheckFailure,			//124	自检失败	一般事件
	evManual,					//125 手动状态	紧急事件
	evAutomatic,				//126	自动状态	紧急事件
	evMuteBell,					//127	消音	一般事件
	evKeyPressMessageConfirm,		//128	信息确认控制按钮动作	一般事件
	evKeyPressFunctionCheck,		//129	检查功能按钮动作	一般事件
	evKeyPressInterLinkTurnOn,		//130	联动启动按钮动作	紧急事件
	evAdjustClock,				//131	调整时钟	一般事件
	
	//132~255  Rsv
	//256~65535	User Define
	evUndefine = 65535, //未知事件
}TFecEventCode;

const u8 GBDeviceCodePrm[256] = {
	//0
	0,                        // 0 国标预留
	1,// 1
	1,                // 2
	1,        // 3
	0,                        // 4 国标预留
	0,                        // 5 未使用
	0,                        // 6 未使用
	0,                        // 7 未使用
	0,                        // 8 未使用
	0,                        // 9 未使用
	1,                    // 10
	1,                      // 11
	1,                      // 12
	1,            // 13
	1,                        // 14
	1,                      // 15
	1,                      // 16
	1,                  // 17
	1,              // 18
	0,                        // 19 国标预留
	1,                    // 20
	1,                // 21
	1,        // 22
	1,        // 23
	1,        // 24
	1,          // 25
	0,                        // 26 国标预留
	0,                        // 27 未使用
	0,                        // 28 未使用
	0,                        // 29 未使用
	1,                // 30
	1,            // 31
	1,            // 32
	1,            // 33
	1,        // 34
	1,        // 35
	0,                        // 36 国标预留
	0,                        // 37 未使用
	0,                        // 38 未使用
	0,                        // 39 未使用
	1,                    // 40
	1,            // 41
	1,            // 42
	1,  // 43
	0,                        // 44 国标预留
	0,                        // 45 未使用
	0,                        // 46 未使用
	0,                        // 47 未使用
	0,                        // 48 未使用
	0,                        // 49 未使用
	1,              // 50
	1,                // 51
	1,              // 52
	1,        // 53
	0,                        // 54 国标预留
	0,                        // 55 未使用
	0,                        // 56 未使用
	0,                        // 57 未使用
	0,                        // 58 未使用
	0,                        // 59 未使用
	0,                        // 60 未使用
	1,              // 61
	1,                    // 62
	1,                  // 63
	1,                  // 64
	0,                        // 65 国标预留
	0,                        // 66 未使用
	0,                        // 67 未使用
	0,                        // 68 未使用
	0,                        // 69 未使用
	0,                        // 70 未使用
	1,                          // 71
	1,                      // 72
	1,                      // 73
	1,                 // 74
	1,                      // 75
	1,                    // 76
	0,                        // 77 国标预留
	0,                        // 78 未使用
	0,                        // 79 未使用
	0,                        // 80 未使用
	1,                  // 81
	1,                // 82
	1,                  // 83
	1,                  // 84
	1,                // 85
	1,                          // 86
	0,                        // 87 国标预留
	0,                        // 88 未使用
	0,                        // 89 未使用
	0,                        // 90 未使用
	0,                        // 91 未使用
	0,                        // 92 未使用
	0,                        // 93 未使用
	0,                        // 94 未使用
	0,                        // 95 未使用
	0,                        // 96 未使用
	0,                        // 97 未使用
	0,                        // 98 未使用
	0,                        // 99 未使用
	1,            // 100
	1,                // 101
	1,            // 102
	1,            // 103
	0,                        // 104 国标预留
	0,                        // 105 未使用
	0,                        // 106 未使用
	0,                        // 107 未使用
	0,                        // 108 未使用
	0,                        // 109 未使用
	1,              // 110
	1,            // 111
	1,  // 112
	1,      // 113
	1,              // 114
	0,                        // 115 国标预留
	0,                        // 116 未使用
	0,                        // 117 未使用
	0,                        // 118 未使用
	0,                        // 119 未使用
	1,                // 120
	1,              // 121
	1,              // 122
	1,      // 123
	1,            // 124
	0,                        // 125 国标预留
	0,                        // 126 未使用
	0,                        // 127 未使用
	0,                        // 128 未使用
	0,                        // 129 未使用
	1,                  // 130
	1,                    // 131
	1,                    // 132
	1,              // 133
	1,              // 134
	1,                // 135
	0,                        // 136 国标预留
	0,                        // 137 未使用
	0,                        // 138 未使用
	0,                        // 139 未使用
	1,            // 140
	1,    // 141
	1,    // 142
	1,// 143
	0,                        // 144 国标预留
	0,                        // 145 未使用
	0,                        // 146 未使用
	0,                        // 147 未使用
	0,                        // 148 未使用
	0,                        // 149 未使用
	1,                // 150
	1,                  // 151
	1,                  // 152
	1,                  // 153
	1,                // 154
	1,              // 155
	1,              // 156
	1,                  // 157
	1,              // 158
	1,                      // 159
	1,// 160
	1,                // 161
	1,                      // 162
	1,              // 163
	0,                        // 164 国标预留
	0,                        // 165 未使用
	0,                        // 166 未使用
	0,                        // 167 未使用
	0,                        // 168 未使用
	0,                        // 169 未使用
	0,                        // 170 未使用
	0,                        // 171 未使用
	0,                        // 172 未使用
	0,                        // 173 未使用
	0,                        // 174 未使用
	0,                        // 175 未使用
	0,                        // 176 未使用
	0,                        // 177 未使用
	0,                        // 178 未使用
	1,                  // 179
	1,                      // 180
	1,                      // 181
	1,                      // 182
	1,                        // 183
	1,                        // 184
	1,                        // 185
	1,                      // 186
	1,                    // 187
	1,                        // 188
	1,                      // 189
	1,                      // 190
	1,                    // 191
	1,                    // 192
	1,                    // 193
	1,                   // 194
	1,                      // 195
	1,                    // 196
	1,                  // 197
	1,                // 198
	1,                    // 199
	1,                        // 200
	1,                      // 201
	1,                        // 202
	1,                        // 203
	1,                        // 204
	1,                        // 205
	1,                      // 206
	1,                      // 207
	1,                        // 208
	1,                          // 209
	1,                        // 210
	0,                        // 211 未使用
	0,                        // 212 未使用
	0,                        // 213 未使用
	0,                        // 214 未使用
	0,                        // 215 未使用
	0,                        // 216 未使用
	0,                        // 217 未使用
	0,                        // 218 未使用
	0,                        // 219 未使用
	0,                        // 220 未使用
	2,                  // 221
	2,                  // 222
	2,                   // 223
	2,                // 224
	2,                      // 225
	2,                     // 226
	2,                    // 227
	2,                  // 228
	2,                  // 229
	2,              // 230
	2,                      // 231
	2,              // 232
	2,            // 233
	2,              // 234
	2,                          // 235
	2,                // 236
	2,            // 237
	2,        // 238
	2,           // 239
	2,            // 240
	2,            // 241
	2,                    // 242
	2,                    // 243
	2,                        // 244
	2,                      // 245
	2,      // 246
	2,                  // 247
	2,                    // 248
	2,                    // 249
	2,                    // 250
	2,                        // 251
	0,                        // 252 未使用
	0,                        // 253 未使用
	0,                        // 254 未使用
	0,                         // 255 未使用
};

const u8 EventCodePrm[256] = {
	0,//evtRsv0 = 0,				//0  预留	预留
	1,//evNormal = 1,			//1  正常	一般事件
	2,//evFirstFireAlarm ,		//2  首火警	紧急事件
	2,//evFireAlarm,			//3  火警	紧急事件
	2,//evFireAlarmElectrical,		//4  电气火灾报警	紧急事件
	2,//evGasLowThreshold,		//5  可燃气体低限报警	紧急事件
	
	2,//evGasHiThreshold,			//6  可燃气体高限报警	紧急事件
	2,//evGasExcess,			//7  可燃气体超量程报警	紧急事件
	2,//evFireAlarmPreWarning,		//8  电气火灾预警	紧急事件
	2,//evFaultOrFireAlarmExactly,	//9  确认故障信息、火灾报警信息	紧急事件
	2,//evFaultOrFireAlarmRevoke,	//10  火警撤销	紧急事件
	2,//evFireAlarmElectricalRevoke,	//11  电气火灾报警撤销	紧急事件
	2,//evGasLowThresholdRevoke, 	//12  1可燃气体低限报警撤销	紧急事件
	2,//evGasHiThresholdRevoke,		//13  可燃气体高限报警撤销	紧急事件
	2,//evGasExcessRevoke,		//14	可燃气体超量程报警撤销	紧急事件
	2,//evFireAlarmPreWarningRevoke,	//15	电气火灾预警撤销	紧急事件
	
	0,0,0,//evRsv16, evRsv17, evRsv18,	//16～18	预留	预留
	
	2,//evLaunch,				//19	启动	紧急事件
	2,//evLaunchAutomatic,		//20	自动启动	紧急事件
	2,//evLaunchManual,			//21	手动启动	紧急事件
	2,//evLaunchLiveEmergency,		//22	现场急启	紧急事件
	2,//evLaunchInrerLink,		//23  联动启动	紧急事件
	2,//evGasMisfireDelay,		//24	气体灭火开始延时	紧急事件
	2,//evGasSplash,			//25	气体喷洒	紧急事件
	2,//evFeedBack,				//26	反馈	紧急事件
	2,//evGasSplashFeedBack,		//27	喷洒反馈	紧急事件
	2,//evFeedBackRevoke,			//28	反馈撤销	紧急事件
	2,//evShutoff,				//29	停止	紧急事件
	2,//evShutoffLiveEmergency,		//30	现场急停	紧急事件
	1,//evHydrantLowPressure,		//31	消火栓系统、自动喷淋系统水压低	一般事件
	
	0,0,0,//evRsv32, evRsv33, evRsv34,  	//32～39	预留	预留
	0,0,0,//evRsv35, evRsv36, evRsv37, 	//32～39	预留	预留
	0,0,//evRsv38, evRsv39, 		//32～39	预留	预留
	
	2,//evEmergency,			//40	应急	紧急事件
	1,//evMonthlyCheck,			//41	月检	一般事件
	1,//evYearlyCheck,			//42	年检	一般事件
	1,//evSigneLumSigneChanged,		//43	标志灯具改变方向	一般事件
	
	2,//evElevatorLanding,		//44	电梯迫降	紧急事件
	2,//evRollerShutterHalfShut,	//45	卷帘半降	紧急事件
	2,//evRollerShutterShut,		//46	卷帘全降	紧急事件
	2,//evCall,				//47	呼叫	紧急事件
	2,//evTelephoneCommunications,	//48	通话	紧急事件
	2,//evDevPowerLost,			//49	消防设备电源失电	紧急事件
	1,//evDevPowerVoltageLow,		//50	消防设备电源欠压	一般事件
	1,//evDevPowerVoltageHi,		//51	消防设备电源过压	一般事件
	1,//evDevPowerOverLoad,		//52	消防设备电源过载	一般事件
	2,//evDevPowerPhaseLacking,		//53	消防设备电源缺相	紧急事件
	2,//evDevPowerPhaseStagger,		//54	消防设备电源错相	紧急事件
	1,//evCisternWaterLow,		//55	消防水箱（池）水位低	一般事件
	2,//evEmergencyElevator,		//56	消防电梯停用	紧急事件
	
	0,0,0,//evRsv57,evRsv58,evRsv59,	//57～69	预留	预留
	0,0,0,//evRsv60,evRsv61,evRsv62,	//57～69	预留	预留
	0,0,0,//evRsv63,evRsv64,evRsv65,	//57～69	预留	预留
	0,0,0,//evRsv66,evRsv67,evRsv68,	//57～69	预留	预留
	0,//evRsv69,				//57～69	预留	预留
	
	2,//evSuperVisory,			//70	监管	紧急事件
	2,//evSuperVisoryRelieve,		//71	监管解除	紧急事件
	1,//evMask,				//72	屏蔽	一般事件
	1,//evMaskRelieve,			//73	屏蔽解除	一般事件
	
	0,0,0,//evRsv74, evRsv75, evRsv76, 	//74～79	预留	预留
	0,0,0,//evRsv77, evRsv78, evRsv79,	//74～79	预留	预留
	
	1,//evFault,				//80	故障	一般事件
	1,//evFaultCommunications,		//81	通讯故障	一般事件  */
	1,//evFaultMainPower,			//82	主电故障	一般事件
	1,//evFaultSparePower,		//83	备电故障	一般事件
	1,//evFaultCharge,			//84	充电故障	一般事件
	2,//evFaultLoopTank,			//85	回路故障	紧急事件
	1,//evFaultComponent,			//86	部件故障	一般事件	
	1,//evFaultCircuit,			//87	线路故障	一般事件	circuit
	1,//evFaultGrounding,			//88	接地故障	一般事件
	1,//evNormallyCloseDoorOpen,	//89	常闭防火门打开	一般事件
	1,//evNormallyOpenDoorClose,	//90	常开防火门关闭	一般事件
	
	0,0,0,//evRsv91, evRsv92, evRsv93, 	//91～99	预留	预留
	0,0,0,//evRsv94, evRsv95, evRsv96, 	//91～99	预留	预留
	0,0,0,//evRsv97, evRsv98, evRsv99, 	//91～99	预留	预留
	
	1,//evFaultRecover, 			//100	故障恢复	一般事件
	1,//evFaultCommunicationsRecover,	//101	通讯故障恢复	一般事件
	1,//evFaultMainPowerRecover,	//102	主电故障恢复	一般事件
	1,//evFaultSparePowerRecover,	//103	备电故障恢复	一般事件
	1,//evFaultChargeRecover,		//104	充电故障恢复	一般事件
	1,//evFaultLoopTankRecover,		//105	回路故障恢复	一般事件
	1,//evFaultComponentRecover,	//106	部件故障恢复	一般事件
	1,//evFaultCircuitRecover,		//107	线路故障恢复	一般事件
	1,//evFaultGroundingRecover,		//108	接地故障恢复	一般事件
	1,//evNormallyCloseDoorOpenRecover,	//109	常闭防火门恢复关闭状态	一般事件
	1,//evNormallyOpenDoorCloseRecover,	//110	常开防火门恢复开门状态	一般事件
	
	0,0,0,//evRsv111, evRsv112, evRsv113, 	//111～119	预留	预留
	0,0,0,//evRsv114, evRsv115, evRsv116, 	//111～119	预留	预留
	0,0,0,//evRsv117, evRsv118, evRsv119,		//111～119	预留	预留 
	
	1,//evSystemPowerOn,				//120	开机	一般事件
	1,//evSystemPowerOff,				//121	关机	一般事件
	2,//evReset,					//122	复位	紧急事件
	1,//evSelfCheck,				//123	自检	一般事件
	1,//evSelfCheckFailure,			//124	自检失败	一般事件
	2,//evManual,					//125 手动状态	紧急事件
	2,//evAutomatic,				//126	自动状态	紧急事件
	1,//evMuteBell,					//127	消音	一般事件
	1,//evKeyPressMessageConfirm,		//128	信息确认控制按钮动作	一般事件
	1,//evKeyPressFunctionCheck,		//129	检查功能按钮动作	一般事件
	2,//evKeyPressInterLinkTurnOn,		//130	联动启动按钮动作	紧急事件
	1,//evAdjustClock,				//131	调整时钟	一般事件
	
	//132~255  Rsv
	//256~65535	User Define
	0,//evUndefine = 65535, //未知事件
};

typedef union{
	u16 D16;
	struct{
		u16 Bit0 :1;
		u16 Bit1 :1;
		u16 Bit2 :1;
		u16 Bit3 :1;
		u16 Bit4 :1;
		u16 Bit5 :1;
		u16 Bit6 :1;
		u16 Bit7 :1;
		
		u16 Bit8 :1;
		u16 Bit9 :1;
		u16 Bit10 :1;
		u16 Bit11 :1;
		u16 Bit12 :1;
		u16 Bit13 :1;
		u16 Bit14 :1;
		u16 Bit15 :1;
	}BitF;
	struct{
		u16 IsAutomatic :1;			//0:Manual; 1:Automatic
		u16 IsUsingStandByPower :1;	//0:Using Main Power; 1:Using Standby Power
		u16 IsPowerError :1;
		u16 IsAlram :1;
		u16 IsAction :1;
		u16 IsFeedBack :1;
		u16 IsSuperVisory :1;
		u16 IsFault :1;
		
		u16 IsMask :1;			
		u16 IsGasSpay :1;			
		u16 IsEmergency :1;
		u16 Rsv0 :1;
		u16 Rsv1 :1;
		u16 Rsv2 :1;
		u16 Rsv3 :1;
		u16 Rsv4 :1;
	}BitFlag;
}TFecStateCode;


typedef struct{
	u8 CtlNum;
	u8 UnitNum;
	u8 DevNum;
	u8 ChannelNum;
}TFecItemPath;

typedef enum{
	UsingUart=	0,
	UsingCan = 1
}TFecBusType;

typedef struct{
	u32 PollIndex;
	struct{
		TDateTime fTime;
		u8 Busy;
		u8 Section;
		u8 SectionCount;
		u8 Rsv0;
	}body[64];
	//the 0 is dump
}TFecMsgReference;

typedef struct{
	u32 PollIndex;	
	struct{
		u32 PollIndex;
		u16 List[FecRecentUsingCount];
	}Recent;
	struct{
		u8 State;
		u8 MsgRefIndex;
		u8 SrcAddr;
		u8 RecTimes;
		TFecItemPath PathMutual; 
		TDateTime Dt;
		u8 Body[20];
	}Items[FecPublishEventRxBufCount];
}TFecPublishMsgRxList;

//C.2
typedef enum{
	FecFunSyncSysTick = 0,//0 同步系统节拍
	FecFunSysReset = 1,//1 系统复位
	FecFunSysMute,//2 系统消音
	FecFunSysSlefCheck,//3 系统自检
	FecFunSyncTime,//4 广播时钟
	FecFunPublishEmergencyEvent,//5 通告紧急事件
	FecFunPublishGeneralEvent,//6 通告一般事件
	FecFunPublishAdjustEvent,//7 通告调试事件
	
	FecFunRsv08,FecFunRsv09,FecFunRsv10,
	FecFunRsv11,FecFunRsv12,FecFunRsv13,
	FecFunRsv14,//8-14 自定义
	
	FecFunStateAck,//15 状态码应答，或结束帧标志
	FecFunRsv16,//16 保留
	
	FecFunInformedEmergencyEvent,//17 通告紧急事件
	FecFunInformedGeneralEvent,//18 通告一般事件
	FecFunInformedAdjustEvent,//19 通告调试事件
	FecFunInformedHeartbeat,//20 通告心跳
	
	FecFunRsv21,FecFunRsv22,FecFunRsv23,FecFunRsv24,FecFunRsv25,
	FecFunRsv26,FecFunRsv27,FecFunRsv28,FecFunRsv29,FecFunRsv30,FecFunRsv31,//21-31 自定义
	FecFunRsv32,//32 保留
	
	FecFunInspectionDevice,//33 设备巡检
	FecFunQueryDeviceState,//34 查设备状态
	FecFunQueryDeviceConfig,//35 查设备配置
	FecFunQueryDeviceIdf,//36 查设备标识
	FecFunQueryDeviceParameter,//37 查设备参量
	FecFunQueryDeviceDescp,//38 查设备注释
	FecFunQueryDeviceProgram,//39 查设备编程
	FecFunQueryDeviceRegisterInfo,//40 查注册登记信息
	FecQueryCurrentEvent,//41 查设备当前事件
	FecQueryHistoryEvent,//42 查设备历史事件
	FecStopQueryDeviceEvent,//43 停止查询设备事件
	FecQueryFECBusVer,//44 查FECBus协议版本号
	FecQueryDeviceList,//45 查设备列表
	
	//--------------- 46-127 自定义 ---------------
	FecFunRsv46,FecFunRsv47,FecFunRsv48,FecFunRsv49,FecFunRsv50,
	FecFunRsv51,FecFunRsv52,FecFunRsv53,FecFunRsv54,FecFunRsv55,
	FecFunRsv56,FecFunRsv57,FecFunRsv58,FecFunRsv59,FecFunRsv60,
}TFecFunctionCode;

//C.4.2.5
typedef enum{
	ackMsgSectionEnd = 0,
	ackCrcError = 1,
	ackInvalidRequst,
	ackUnitFault,
	ackSystemBusy,
	ackUnknownCmd,
	ackAddrNotExist,
	ackParameterError,
	ackInProcess,
	ackEventOver,
	ackRecDataCorrect,
}TFecAckCode;

typedef enum{
	pmRsv0 = 0,//预留
	pmHeightIn10CM = 1,	//高度 0.01m
	pmTempeInTenth,		//温度 0.1℃
	pmPressureInMpk,//压力 0.1MPa
	pmPressureInKpk,//压力 0.1KPa
	pmGasConsistence_ThousandthLEL,//气体浓度 0.1%LEL
	pmGasConsistence_Volumel10N7P,//气体浓度 0.1X10(-6) (体积分数)
	pmGasConsistence_Volume110N3P,//气体浓度 0.1% (体积分数)
	pmGasConsistence_Volume110N3P2,//气体浓度 1000X10(-6) (体积分数)
	pmGasConsistence_Volumel1MgM3P,//气体浓度 1mg/m3
	pmTimeOneSecond,//时间 1s
	pmVoltageN1P,//电压 0.1V
	pmCurrentN1P,//电流 0.1A
	pmN1PLPerSecond,//流量 0.1L/s
	pmVolumeFlow,//风量 0.1m3/min
	pmAirSpeed,//风速 0.1m/s
	pmRemainCurrent,//剩余电流 1mA
	pmSmokePrm,//烟参量
	pmRsv18,//18-127 预留
	pmCustom0 = 128, //128-255 自定义
}TParameterType;

typedef struct{
	u8 Index;
	enum{
		OrionalNone = 0,
		OrionaReset = 1,
		OrionalNotDone,
		OrionalDone
	}State;
}TMsgInInf;

typedef union{
	u32 da32[258];
	u8 da8[1032];
	struct{
		u8 FrmType;
		u8 DestAddr;
		u8 Priority;
		u8 SrcAddr;
		u8 MsgIndex;
		u8 FrmIndex;
		u16 Dlen;//max 128*8
		u8 DPFC[128*8];	//Data PlusIn Function Code
	}body;
}TFecBusData;

typedef union{
	u32 D32[4];
	u8 D8[16];
	struct{
		u8 CtlNum ;//控制器编号（1字节）
		u8 UnitNum ;//单元编号（1字节）
		u8 DeviceNum ; //设备编号（1字节）
		u8 ChannelNum ; //通道编号（1字节）
		
		u16 DeviceCode ; //设备类型代码（2字节）TFecDevTypeCode
		u16 EventCode ; //事件代码（2字节）TFecEventCode
		
		TFecStateCode StateCode ; //状态代码（2字节）
		u8 Year ;//年（1字节）
		u8 Mon;//月（1字节）
		
		u8 Day;//日（1字节）
		u8 Hour;//时（1字节）
		u8 Min;//分（1字节）
		u8 Sec;//秒（1字节）
	}Data;
}TFecEventBufBody;

typedef struct{
	u8 avalibel;
	u8 UsingMsgIndex;
	u8 FrameNum;
	u8 FrameTick;
	union{
		u8 D8[20];
		struct{
			u8 Header;
			u8 FrmType;
			u8 DestAddr;
			u8 Priority;
			u8 SrcAddr;
			u8 MsgIndex;
			u8 FrmIndex;
			u8 Dlen;
			u8 DPFC[8];	//Data PlusIn Function Code
			u8 CrcLoByte;
			u8 CrcHiByte;
			u8 Eop;
			u8 Rsv;
		}body;
	}Section[4];
}TFecBusMsgUartTx;

typedef struct{
	struct{
		u8 avalibel;
		u8 UsingMsgIndex;
		u8 Rsv0;
		u8 Rsv1;
		union{
			u32  D32[4];
			u8 D8[16];
			struct{
				u8 DPFC[8];	//Data PlusIn Function Code
				u32 ExtendedId;
				u32 Dlen;
			}spl;
		}body;
	}Section[4];
}TFecBusMsgCanTx;

typedef struct{
	u8 avalibel;
	u8 UsingMsgIndex;
	u8 FrmCount;
	u8 Rsv;
	union{
		u8 D8[16];
		struct{
			u8 Header;
			u8 FrmType;
			u8 DestAddr;
			u8 Priority;
			u8 SrcAddr;
			u8 MsgIndex;
			u8 FrmIndex;
			u8 Dlen;
			u8 DPFC[8];	//Data PlusIn Function Code
		}spl;
	}body[128];
}TFecBusPkgRxList;

typedef struct{
	u32 PkgCount;
	union{
	//char in UTF-8 
		u8 D32[194];
		u8 D8[776];
		//C.9
		struct{
			u8 Cmd;			//0x26
			u8 CtlNum;
			u8 UnitNum;
			u8 DevNum;
			u8 DescpLen;
			u8 DescpFirstByte;
		}DescpInf;
		//C.10
		struct{
			u8 Cmd;			//0x27
			u8 CtlNum;
			u8 UnitNum;
			u8 DevNum;
			u8 ProgramLen;
			u8 ProgramFirstByte;		
		}ProgramInf;
		//C.11
		struct{
			u8 Cmd;			//0x27
			u8 CtlNum;
			u8 UnitNum;
			u8 DevNum;
			u8 RegisterLen;
			u8 RegisterFirstByte;		
		}RegisterInf;
		//C.14
		struct{
			u8 Cmd;			//0x2D
			u8 CtlCount;
			struct{
				u8 CtlNum;
				u8 DevTypeLoByte;
				u8 DevTypeHiByte;
			}List[256];
		}CtlListInf;
		struct{
			u8 Cmd;			//0x2D
			u8 CtlNum;
			u8 UnitCount;
			struct{
				u8 UnitNum;
				u8 DevTypeLoByte;
				u8 DevTypeHiByte;
			}List[256];
		}UnitListInf;
		struct{
			u8 Cmd;			//0x2D
			u8 CtlNum;
			u8 UnitNum;
			u8 DevCount;
			struct{
				u8 DevNum;
				u8 DevTypeLoByte;
				u8 DevTypeHiByte;
			}List[256];
		}DevListInf;
		struct{
			u8 Cmd;			//0x2D
			u8 CtlNum;
			u8 UnitNum;
			u8 DevNum;
			u8 ChannelCount;
			struct{
				u8 ChlNum;
				u8 DevTypeLoByte;
				u8 DevTypeHiByte;
			}List[256];
		}ChannelListInf;
	}Body;
}TFecBusQueryLongReply;

typedef enum{
	FecNotConnected = 0,//0 没有连接
	FecSetUpComm = 1,//1 建立连接
	FecPolling = 2,//2 巡检
	FecDownEvent,//3 下发事件
	FecDownCmd,//4 设置命令
}TFecCommPhase;

typedef enum{
	FecCommNone = 0,
	FecCommExit = 1,
	FecCommSyncSysTick00,//0 同步系统节拍
	FecCommSyncSysTick00Ack,
	FecCommSysReset01,//1 系统复位
	FecCommSysReset01Ack,
	FecCommSysMute02,//2 系统消音
	FecCommSysMute02Ack,
	FecCommSysSlefCheck03,//3 系统自检
	FecCommSysSlefCheck03Ack,
	FecCommSyncTime04,// 设置时间
	FecCommSyncTime04Ack,
	FecCommDownEvent05,//通讯事件
	FecCommDownEvent05Ack,
	FecCommDownEvent06,
	FecCommDownEvent06Ack,
	FecCommDownEvent07,
	FecCommDownEvent07Ack,
	FecCommPolling33,// 巡检33
	FecCommPolling33Ack,
	FecCommPolling33Up,// 巡检33上传数据用表C.5
	FecCommPolling33UpAck,
	FecCommQueryDeviceState34,//34 查设备状态
	FecCommQueryDeviceState34Ack,
	FecCommQueryDeviceConfig35,//35 查设备配置
	FecCommQueryDeviceConfig35Ack,
	FecCommQueryDeviceIdf36,//36 查设备标识
	FecCommQueryDeviceIdf36Ack,
	FecCommQueryDeviceParameter37,//37 查设备参量
	FecCommQueryDeviceParameter37Ack,
	FecCommQueryDeviceDescp38,//38 查设备注释
	FecCommQueryDeviceDescp38Ack,
	FecCommQueryDeviceProgram39,//39 查设备编程
	FecCommQueryDeviceProgram39Ack,
	FecCommQueryDeviceRegisterInfo40,//40 查注册登记信息
	FecCommQueryDeviceRegisterInfo40Ack,
	FecCommQueryCurrentEvent41,// 查询当前事件
	FecCommQueryCurrentEvent41Ack,
	FecCommQueryCurrentEvent41Ending,
	FecCommQueryHistoryEvent42,//42 查设备历史事件
	FecCommQueryHistoryEvent42Ack,
	FecCommQueryHistoryEvent42Ending,
	FecCommStopQueryDeviceEvent43,//43 停止查询设备事件
	FecCommStopQueryDeviceEvent43Ack,
	FecCommQueryVer44,// 第一次建立连接44，查询版本
	FecCommQueryVer44Ack,
	FecCommQueryDeviceList45,//45 查设备列表
	FecCommQueryDeviceList45Ack,
	FecCommDelay,
}TFecCommState;

typedef struct{
	u8 CtlNum;
	u8 UnitNum;
	u8 DevNum;
	u8 ChannelNum;
	
	u8 Addr;
	u8 SYear;
	u8 SMon;
	u8 SDay;
	
	TFecEventCode Event;//u16
	u16 PathLevel;
}TFecCmdPath;

typedef struct{
	u8 CtlNum;
	u8 UnitNum;
	u8 DevNum;
	u8 Len;
	u8 Value[256];
}TGetCmd38_40Data;

typedef struct{
	u32 type;
	u8 CtlNum;
	u8 UnitNum;
	u8 DevNum;
	u8 Count;
	union{
		u32 d32[192];
		u8 d8[768];
		struct{
			u8 Order;
			u8 DevTypeLoByte;
			u8 DevTypeHiByte;
		}List[256];
	}Body;
}TGetCmd45Data;

typedef struct{
	u8 Register[64];
	
	u8 CuuerntAddr;
	u8 GetAddr;
	u8 MsgIndex;
	u8 AckStatus;
	
	TFecCommPhase Phase;//u8
	TFecCommState State;//u8
	u16 TimeoutTick;

	TFecAckCode AckCode;//u8
	u8 SetDownEventFlag;
	u8 SetDownCmdFlag;
	TFecCommState SetDownCmdState;//u8
	
	TFecCmdPath SetDownPath;
	
	TFecStateCode GetCmd34DeviceState;//u16
	u16 GetCmd35ConfigCode;
	
	u8 GetCmd36DeviceIdf[8];
	u8 NoAckTick;
	TParameterType GetCmd37DevicePrmType;//u8
	u16 GetCmd37DevicePrmValue;
	
	TGetCmd38_40Data GetCmd38To40Data;
	u16 GetCmd44Ver;
	u16 Rsv1;
	TGetCmd45Data GetCmd45Data;
	
	TFecItemPath SetCmd37Path;
	
	u16 DownEventCount;
	u16 DownEventTick;
	u16 UpEventCount[64];
	u16 UpEventSRTick[64];
	
	TFecEventBufBody DownEventData;
	TFecEventBufBody UpEventData;
	
	u16 CurrentEventCount[64];
	u16 CurrentEventSRTick[64];
	u16 HistoryEventCount;
	u16 HistoryEventSRTick;
	
	TFecEventBufBody CurrentEventData;
	TFecEventBufBody HistoryEventData;
}TFecCommPrm;

typedef struct{
	u8 Year ;//年（1字节）
	u8 Mon;//月（1字节）

	u8 Day;//日（1字节）
	u8 Hour;//时（1字节）
	u8 Min;//分（1字节）
	u8 Sec;//秒（1字节）
	
	u8 rsv1;
	u8 rsv2;
}TFecTime;

typedef struct{
	u32 Flag;
	union{
		u8 D8[20];
		struct{
			u8 Head;
			u8 DesAddr;
			u8 Cmd;
			u8 Len;
		
			u8 Data[16];
		}Body;
	}Prm;
}TFecSetTest;

class TFecBus{
	private:
		u8 ThisAddr;
		TFecBusType BusType;
		u8 TmpD8[20];
		
		TDMix16 TxCrc;
		TDMix16 RxCrc;
	
	public:
		TFecTime dateTime;
	
		u8 uMsgOutIndex;
		u8 RxGetFlag;
		u16 RxHandleFlag;
		u16 TxSetFlag;
		TFecAckCode RxMsgState;//u16
	
		TFecBusPkgRxList RxMsg;
	
		TFecBusData uDataRX;
		TFecBusData uDataTX;
	
		struct{
			unsigned char State;
			unsigned char AckOk;
			unsigned char OnGoing;
			unsigned char Order;
			unsigned char RetryTimes;
			unsigned char RetryFLAG;
			unsigned short TimeOutTick;
		}OnTransmite;
	
		//Idf is Uart Or Can
		TFecMsgReference MsgReference;
	
		//Long pkg In
		TFecBusQueryLongReply LongReplyRx;
		//Publish Event Buf In
		TFecPublishMsgRxList PublishMsgRxList ;
	
		//Mid Len Pkg Buf Out
		TFecBusMsgUartTx uMsgOut;
		TFecBusMsgCanTx cMsgOut;
	
		//Long pkg Out
		TFecBusQueryLongReply LongReplyTx;
		
		u8 FireElectricalCtlDevList[64];
		TFecCommPrm CommPrm;
		
		TFecSetTest SetDebug;

	private:
		void MsgOutIndexInc();
		u8 FindIdleMsgIndex(void);
		void LongReplyClearRx(void);
		void LongReplyClearTx(void);
	
	public:
		TFecBus(){};
		TFecBus(u8 aAddr, TFecBusType aBusType){
			Init(aAddr, aBusType);
		}
		void Init();
		void ResetCallBack();
		void Init(u8 aAddr, TFecBusType aBusType);
		
		void SetBusType(TFecBusType bsType);
			
		void ClearInput(void);
		void ClearOutput(void);
		TMsgInInf InputMsg(u8 *p);
		TMsgInInf InputMsg(u32 *p);
		
		void SetDownEventData(u32 Ord);
		void ClearDownEventList();
		void AddDownEventList(TFecEventBufBody * pEvent);
		void ClearUpEventList(u8 aAddr);
		void AddUpEventList(u8 aAddr, TFecEventBufBody * pEvent);
		
		void ClearCurrentEventList(u8 aAddr);
		void AddCurrentEventList(u8 aAddr, TFecEventBufBody * pEvent);
		void ClearHistoryEventList();
		void AddHistoryEventList(TFecEventBufBody * pEvent);
		
		void getSysTime(void);
		
		//Commo	
		void iBufProcess();
		void uDataRXTask();
		
		void uSetTXData();
		void uDataTXTask();//10ms
		void fMsg_ACK_State		(TFecAckCode aStateCode);
		void fMsg_ACK2Reply_State	(TFecAckCode aStateCode);
		
		//表 C.3 设置数据帧
		//________________________________________________________________
		void fMsgTX00_SysSyncTick(u8 aDestAddr);				//00	
		void fMsgTX01_SysReset(u8 aDestAddr, u8 aCtlNum);		//01
		void fMsgTX02_SysMute(u8 aDestAddr, u8 aCtlNum);	//02
		void fMsgTX03_SysSelfCheck(u8 aDestAddr, u8 aCtlNum);	//03
		void fMsgTX04_SyncTime(u8 aDestAddr, u8 aCtlNum, u8 aY, u8 aMon, u8 aDay, u8 aH, u8 aMin, u8 aSec);//04 
		void fMsgTX05_PublishEmergencyEvent(u8 aDestAddr, TFecEventBufBody * pEvent);	//05 通告紧急事件
		void fMsgTX06_PublishGeneralEvent(u8 aDestAddr, TFecEventBufBody * pEvent);	//06 通告一般事件
		void fMsgTX07_PublishAdjustEvent(u8 aDestAddr, TFecEventBufBody * pEvent);	//07 通告调试事件
		//表 C.4 设置数据帧应答
		unsigned int fMsgRX_Cmd00To07(u8 aSrcAddr);
		unsigned int fMsgRX_Cmd15(u8 aSrcAddr, u8 aState);
		
		//________________________________________________________________
		
		void fMsgTX15_Ack_StateAck(u8 aDestAddr, TFecAckCode aState);
		void fMsgRpy17_Ack_PublishEmergencyEvent(u8 aDestAddr);
		void fMsgRpy18_Ack_InformedGeneralEvent(u8 aDestAddr);
		void fMsgRpy19_Ack_InformedAdjustEvent(u8 aDestAddr);
		
		unsigned int fMsgRX_Cmd17To19n41_42(u8 aSrcAddr,TFecEventBufBody * pFecEvent);
		unsigned int fMsgRX_Cmd20(u8 aSrcAddr);
		
		//表 C.5 通告数据帧
		void fMsgC5_PublishEmergencyEvent(TFecItemPath aPath, u16 aDevType, u16 aEventCode, u16 aStateCode, TsDateTime aDt);	//17 通告紧急事件
		void fMsgC5_PublishGeneralEvent  (TFecItemPath aPath, u16 aDevType, u16 aEventCode, u16 aStateCode, TsDateTime aDt);	//18 通告一般事件
		void fMsgC5_PublishAdjustEvent   (TFecItemPath aPath, u16 aDevType, u16 aEventCode, u16 aStateCode, TsDateTime aDt);	//19 通告调试事件
		void fMsgC5_PublishHeartBeat(void);	//20 通告心跳
		//表 C.6 通告数据帧应答
		void fMsgC6_ACK_PublishEmergencyEvent(void);	//17 通告紧急事件
		void fMsgC6_ACK_PublishGeneralEvent(void);	//18 通告一般事件
		void fMsgC6_ACK_PublishAdjustEvent(void);		//19 通告调试事件
		
		//表 C.7 查询数据帧
		void fMsgTX33_InspectionDevice(u8 aDestAddr);	//33
		
		void fMsgTX34_QueryDeviceState(u8 aDestAddr);					//34
		void fMsgTX34_QueryDeviceState(u8 aDestAddr, u8 aCtlNum);				//34
		void fMsgTX34_QueryDeviceState(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum);		//34
		void fMsgTX34_QueryDeviceState(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev);	//34
		
		void fMsgTX35_QueryDeviceConfig(u8 aDestAddr);					//35
		void fMsgTX35_QueryDeviceConfig(u8 aDestAddr, u8 aCtlNum);				//35
		void fMsgTX35_QueryDeviceConfig(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum);		//35
		void fMsgTX35_QueryDeviceConfig(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev);	//35
		
		void fMsgTX36_QueryDeviceIdf(u8 aDestAddr);					//36
		void fMsgTX36_QueryDeviceIdf(u8 aDestAddr, u8 aCtlNum);				//36
		void fMsgTX36_QueryDeviceIdf(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum);		//36
		void fMsgTX36_QueryDeviceIdf(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev);	//36
		
		void fMsgTX37_QueryDeviceParameter(u8 aDestAdd, TFecItemPath * pPath);	//37
		void fMsgTX38_QueryDeviceDescp(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev);	//38
		void fMsgTX39_QueryDeviceProgram(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev);	//39
		
		void fMsgTX40_QueryDeviceRegisterInfo(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum);	//40
		void fMsgTX40_QueryDeviceRegisterInfo(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev);	//40
		void fMsgTX41_QueryCurrentEvent(u8 aDestAddr, u8 aCtlNum, TFecEventCode aEvent); //41
		void fMsgTX42_QueryHistoryEvent(u8 aDestAddr, u8 aCtlNum, TFecEventCode aEvent, u8 aSY, u8 aSM, u8 aSD); //42
		void fMsgTX43_StopQueryDeviceEvent(u8 aDestAddr, u8 aCtlNum); //43
		void fMsgTX44_QueryFECBusVer(u8 aDestAddr); //44
		
		void fMsgTX45_QueryDeviceList(u8 aDestAddr); //45
		void fMsgTX45_QueryDeviceList(u8 aDestAddr, u8 aCtlNum); //45
		void fMsgTX45_QueryDeviceList(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum); //45
		void fMsgTX45_QueryDeviceList(u8 aDestAddr, u8 aCtlNum, u8 aUnitNum, u8 aDev); //45
		
		u32 fMsgRX_Cmd33(u8 aSrcAddr);
		u32 fMsgRX_Cmd34(u8 aSrcAddr, TFecStateCode aStateCode);
		u32 fMsgRX_Cmd35(u8 aSrcAddr, u16 aConfigCode);
		u32 fMsgRX_Cmd36(u8 aSrcAddr, u8 * aIdfCode);
		u32 fMsgRX_Cmd37(u8 aSrcAddr, TParameterType aPrmType, u16 aPrm);
		u32 fMsgRX_Cmd38_40(u8 aSrcAddr, TGetCmd38_40Data * pData);
		u32 fMsgRX_Cmd43(u8 aSrcAddr);
		u32 fMsgRX_Cmd44(u8 aSrcAddr, u16 aVer);
		u32 fMsgRX_Cmd45(u8 aSrcAddr, TGetCmd45Data * pTData);
		
		void fMsgC7_QueryDevEvent		(TFecItemPath aPath);	//41
		void fMsgC7_QueryDevEventHistory	(TFecItemPath aPath, TFecEventCode aEvt, TsDateTime aDT);	//42
		void fMsgC7_CancleQueryDevEvent	(TFecItemPath aPath);	//43
		void fMsgC7_QueryThisVer		(TFecItemPath aPath);	//44
		
		void fMsgC7_QueryDevList	(void);		//45					//查询控制器列表
		void fMsgC7_QueryDevList	(u8 aCtlNum);	//45					//查询单元列表
		void fMsgC7_QueryDevList	(u8 aCtlNum, u8 aUnitNum);		//45		//查询设备列表
		void fMsgC7_QueryDevList	(u8 aCtlNum, u8 aUnitNum, u8 aDev);	//45		//查询通道列表
		
		//表 C.8 单帧查询应答数据帧
		void fMsgC8_Reply_DevInspection		(void);		//33
		void fMsgC8_Reply_QueryDevState		(u16 aStateCode);	//34
		void fMsgC8_Reply_QueryDevConfig	(u16 aStateCode);	//35
		void fMsgC8_Reply_QueryDevIdentify	(u8 *p);//36

		void fMsgC8_Reply_QueryDevParameter	(TParameterType aType, u16 aValue);	//37
		void fMsgC8_Reply_QueryDevParameter	(TParameterType aType, u32 aValue);	//37
		
		void fMsgC8_Reply_CancleQueryDevEvent	(void);	//43
		void fMsgC8_Reply_QueryThisVer		(u16 aVer);	//44

		//表 C.9 查询设备注释信息应答数据帧
		void fMsgC9_Reply_QueryDevDescp		(TFecItemPath aPath, u8 aDescpLength, u8 *p);	//38 The Descp payload is In UTF-8 
		
		//表 C.10 查询设备编程信息应答数据帧
		void fMsgC10_Reply_QueryDevProgram		(TFecItemPath aPath, u8 aCodeLength, u8 *p);		//39 The Descp payload is In UTF-8 
		
		//表 C.11 查询设备信息应答数据帧
		void fMsgC11_Reply_QueryDevRegisterInf	(TFecItemPath aPath, u8 aInfLength, u8 *p);		//40
		
		//表 C.12 查询当前事件应答数据帧
		void fMsgC12_Reply_QueryDevEvent		(TFecItemPath aPath, TFecDevTypeCode aDtc, TFecEventCode aEvt,  u16 aDevState, TsDateTime aDT);			//41
		void fMsgC12_Reply_QueryDevEvent		(TFecItemPath aPath,          u16 aDtc,        u16 aEvt,  u16 aDevState, TsDateTime aDT);			//41
		
		//表 C.13 查询设备历史事件应答数据帧
		void fMsgC13_Reply_QueryDevEventHistory	(TFecItemPath aPath, TFecDevTypeCode aDtc, TFecEventCode aEvt,  u16 aDevState, TsDateTime aDT);			//42
		void fMsgC13_Reply_QueryDevEventHistory	(TFecItemPath aPath,          u16 aDtc,        u16 aEvt,  u16 aDevState, TsDateTime aDT);			//42
		
		//表 C.14 查询设备列表应答数据帧
		void C14_DevList_CtlClearTx(void);
		void C14_DevList_UnitClearTx(void);
		void C14_DevList_DevClearTx(void);
		void C14_DevList_ChlClearTx(void);
		void C14_DevList_CtlAdd		(u8 aCtlNum, 						TFecDevTypeCode aDtc);	//Add Item to 控制器列表
		void C14_DevList_UnitAdd	(u8 aCtlNum, u8 aUnitNum, 				TFecDevTypeCode aDtc);	//Add Item to 单元列表
		void C14_DevList_DevAdd		(u8 aCtlNum, u8 aUnitNum, u8 aDev, 			TFecDevTypeCode aDtc);	//Add Item to 设备列表
		void C14_DevList_ChlAdd		(u8 aCtlNum, u8 aUnitNum, u8 aDev, u8 aChl, 	TFecDevTypeCode aDtc);	//Add Item to 通道列表
		void fMsgC14_Reply_QueryDevList_Ctl		(void);	//45		//查询控制器列表
		void fMsgC14_Reply_QueryDevList_Unit	(void);	//45		//查询单元列表
		void fMsgC14_Reply_QueryDevList_Dev		(void);	//45		//查询设备列表
		void fMsgC14_Reply_QueryDevList_Chl		(void);	//45		//查询通道列表
		
		void ProcesserPublishEmergyRx(void);
		void ProcesserPublishRx(void);
		
		u32 GetNewPublishCount(void);
		u32 GetNewPublishEmerGyCount(void);
		
		u32 MsgIn(u32 CanExdId, u32 data0, u32 data1);
		u32 MsgIn(u8 *pData, u32 Len);
		u32 CheckInput(void);
		
		u16 Crc16(u8 *pD, u8 Len) const;
		void Crc16();
		
		void Task10ms(void);
		void Task100ms(void);
		void OperationTask(void);
		
		void SetRegister(u8 aAddr);
		u8 GetRegisterStatus(u8 aAddr);
		void SetLogout(u8 aAddr);
	
		void SetDownEventList(u8 aType,u8 aCount);
		void SetDownCmdList(void);
		
		void GetUpEventTask(void);
		void SetCommAddr(u8 addr);
		void SetCommPhase(u8 addr);//通讯阶段   下发事件，下发命令，建立连接
		void SetCommState(u8 addr);//通讯状态   巡检，功能码
		
		void SetUpCommTask(void);
		
		void EnterSetDownEvent(u8 aAddr);
		void DownEventTask(void);
		
		void EnterSetDownCmd(TFecFunctionCode aCmd, TFecCmdPath * aCmdPath);
		void DownCmdAckHandle(void);
		void DownCmdTask(void);
		
		void SendPollingTask(void);
		
		void DebugProcess(void);
		
		void TriggerCmd01SysReset(void);
		void TriggerCmd02SysMute(void);
		void TrigerCmd03SysSlefCheck(void);
		void TriggerCmd04SyncTime(void);
};

#endif

