#pragma once #include "hb_detail.h" namespace hb { //! 安定宝ID范围 static constexpr size_t MinAdemcoId = 1; static constexpr size_t MaxAdemcoId = 999999; // 兼容性考虑,最大安定宝 ID 为 0x0F423F static constexpr size_t AdemcoIdSentinel = MaxAdemcoId + 1; static constexpr bool isValidAdemcoId(size_t ademcoId) { return MinAdemcoId <= ademcoId && ademcoId <= MaxAdemcoId; } /******** 结合 hb 与 ademco ******/ //! 从事件码推出主机类型 static common::MachineType machineTypeFromAdemcoEvent(ademco::ADEMCO_EVENT e) { switch (e) { case ademco::EVENT_I_AM_NET_MODULE: return common::MachineType::NetMod; case ademco::EVENT_I_AM_GPRS: return common::MachineType::Gprs; case ademco::EVENT_I_AM_LCD_MACHINE: return common::MachineType::Lcd; case ademco::EVENT_I_AM_WIRE_MACHINE: return common::MachineType::Wired; case ademco::EVENT_I_AM_WIFI_MACHINE: return common::MachineType::WiFi; case ademco::EVENT_I_AM_3_SECTION_MACHINE: return common::MachineType::ThreeSection; default: return common::MachineType::InvalidMachineType; } } //! 从主机类型推出事件码 static ademco::ADEMCO_EVENT ademcoEventFromMachineType(common::MachineType type) { switch (type) { case common::MachineType::NetMod: return ademco::EVENT_I_AM_NET_MODULE; case common::MachineType::Gprs: return ademco::EVENT_I_AM_GPRS; case common::MachineType::Lcd: return ademco::EVENT_I_AM_LCD_MACHINE; case common::MachineType::Wired: return ademco::EVENT_I_AM_WIRE_MACHINE; case common::MachineType::WiFi: return ademco::EVENT_I_AM_WIFI_MACHINE; case common::MachineType::ThreeSection: return ademco::EVENT_I_AM_3_SECTION_MACHINE; default: return ademco::EVENT_INVALID_EVENT; } } //! 从事件码推出主机状态 static common::MachineStatus machienStatusFromAdemcoEvent(ademco::ADEMCO_EVENT e) { switch (e) { case ademco::EVENT_ARM: return common::MachineStatus::Arm; case ademco::EVENT_DISARM: return common::MachineStatus::Disarm; case ademco::EVENT_HALFARM: case ademco::EVENT_HALFARM_1456: return common::MachineStatus::HalfArm; case ademco::EVENT_ENTER_SETTING_MODE: case ademco::EVENT_ENTER_SET_MODE: return common::MachineStatus::Setting; default: return common::MachineStatus::InvalidMachineStatus; } } //! 从主机状态推出事件码 static ademco::ADEMCO_EVENT ademcoEventFromMachineStatus(common::MachineStatus status) { switch (status) { case common::MachineStatus::Arm: return ademco::EVENT_ARM; case common::MachineStatus::Disarm: return ademco::EVENT_DISARM; case common::MachineStatus::HalfArm: return ademco::EVENT_HALFARM; // ademco::EVENT_HALFARM_1456 case common::MachineStatus::Setting: return ademco::EVENT_ENTER_SETTING_MODE; // ademco::EVENT_ENTER_SET_MODE default: return ademco::EVENT_INVALID_EVENT; } } //! 从防区属性推出防区应该触发什么警情事件码 static ademco::ADEMCO_EVENT ademcoEventFromZoneProperty(common::ZoneProperty zp) { switch (zp) { case hb::common::BuglarGlobal: return ademco::EVENT_BURGLAR; case hb::common::BuglarHalf: return ademco::EVENT_BURGLAR; case hb::common::Emergency: return ademco::EVENT_EMERGENCY; case hb::common::Fire: return ademco::EVENT_FIRE; case hb::common::Duress: return ademco::EVENT_DURESS; case hb::common::Gas: return ademco::EVENT_GAS; case hb::common::Water: return ademco::EVENT_WATER; case hb::common::DoorRing: return ademco::EVENT_DOORRINGING; case hb::common::SubMachine: case hb::common::RemoteControl: case hb::common::Shield: case hb::common::Reserved0B: case hb::common::Reserved0C: case hb::common::Reserved0D: case hb::common::Reserved0E: case hb::common::Bypass: case hb::common::ZonePropertyCount: case hb::common::InvalidZoneProperty: default: return ademco::EVENT_INVALID_EVENT; } } //! 从防区属性推出应该发送什么警情事件码 static ademco::ADEMCO_EVENT ademcoEventFromZonePropertyOld(old::ZoneProperty zp) { switch (zp) { case hb::old::ZP_GLOBAL: return ademco::EVENT_BURGLAR; case hb::old::ZP_HALF: return ademco::EVENT_HALFARM; case hb::old::ZP_EMERGENCY: return ademco::EVENT_EMERGENCY; case hb::old::ZP_DOORRING: return ademco::EVENT_DOORRINGING; case hb::old::ZP_FIRE: return ademco::EVENT_FIRE; case hb::old::ZP_DURESS: return ademco::EVENT_DURESS; case hb::old::ZP_GAS: return ademco::EVENT_GAS; case hb::old::ZP_WATER: return ademco::EVENT_WATER; case hb::old::ZP_SHIELD: default: return ademco::EVENT_INVALID_EVENT; } } //! 获取主机防区数量的格式化字符串 static const char* getZoneFormatString(common::MachineType type) { auto zone = common::zoneMax(type); if (zone < 10) { return "%d"; } else if (zone < 100) { return "%02d"; } else if (zone < 1000) { return "%03d"; } else { return "%d"; } } //! 获取主机防区数量的格式化字符串 static const wchar_t* getZoneFormatStringW(common::MachineType type) { auto zone = common::zoneMax(type); if (zone < 10) { return L"%d"; } else if (zone < 100) { return L"%02d"; } else if (zone < 1000) { return L"%03d"; } else { return L"%d"; } } } // namespace hb