ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1259766 Топик полностью
il-2 (17.11.2022 16:04, просмотров: 286) ответил Dingo на Можете подробней описать механизм?
Вот файл conf_target.h из проекта: 
// Два типа устройств - пульт и выносная панель управления
/**====================================================================================**
* @brief Target types, subtypes and capabilites

**====================================================================================**/
// Подтипы пультов - для 2-х линеек и сервисный, работающий с обоими линейками
#define TARGET_TYPE_UNIPULT 0x0000u /* Universal Pult */

#define TARGET_STYPE_UNIPULT_SERV (TARGET_TYPE_UNIPULT | 0xFF) /* Service Pult */

#define TARGET_STYPE_UNIPULT_PU (TARGET_TYPE_UNIPULT | 0x02) /* Universal Pult PU-U */

#define TARGET_STYPE_UNIPULT_PU04 (TARGET_TYPE_UNIPULT | 0x03) /* Universal Pult PU-04U */


// Подтипы выносной/встроенной панели - выносная с протоколом MODBUS и встроенная с функциями пульа

#define TARGET_TYPE_BIU 0x0100u /* Control and indication block, and relay front panel */

#define TARGET_STYPE_BIU_IRDA (TARGET_TYPE_BIU | 0xFF) /* Relay front panel */

#define TARGET_STYPE_BIU_MODBUS (TARGET_TYPE_BIU | 0x00) /* Control and indication block */


// Опции пульта/панели - SD-карта, USB-флешка, режим индикации без возможнсти менять настройки, доп.кнопки, и т.д.

#define TARGET_CAPS_SD 0x00010000ul /* SD-Card support */

#define TARGET_CAPS_PI 0x00020000ul /* Indication only mode */

#define TARGET_CAPS_KEYS_ARM 0x00040000ul /* Additional keys: RUN and STOP */

#define TARGET_CAPS_KEYS_RUAU 0x00080000ul /* Additional key: Manual/Auto mode switch */

#define TARGET_CAPS_INTERCONNECT 0x00100000ul /* Entire display device with interconnection: no need connection status showing ('*' at display edge)) */

#define TARGET_CAPS_USBMSD 0x00200000ul /* USB Mass storage support */

#define TARGET_CAPS_KSKN_ESA 0x00400000ul /* Devices (BIU and Front panel) for KSKN relays */


/**====================================================================================**

* @brief Define various releases

**====================================================================================**/
// Различные релизы - всего 12 моделей пультов и панелей
#define RELEASE_PU_U_SD_SERVICE (TARGET_STYPE_UNIPULT_SERV | TARGET_CAPS_SD)

#define RELEASE_PU_U_SD (TARGET_STYPE_UNIPULT_PU | TARGET_CAPS_SD)

#define RELEASE_PU_U TARGET_STYPE_UNIPULT_PU

#define RELEASE_PI_U (TARGET_STYPE_UNIPULT_PU | TARGET_CAPS_PI)

#define RELEASE_PU04_U_SD (TARGET_STYPE_UNIPULT_PU04 | TARGET_CAPS_SD)

#define RELEASE_PU04_U TARGET_STYPE_UNIPULT_PU04

#define RELEASE_BIU (TARGET_STYPE_BIU_MODBUS | TARGET_CAPS_KEYS_ARM | TARGET_CAPS_KEYS_RUAU)

#define RELEASE_FPANEL (TARGET_STYPE_BIU_IRDA | TARGET_CAPS_INTERCONNECT)

#define RELEASE_FPANEL_MSD (TARGET_STYPE_BIU_IRDA | TARGET_CAPS_INTERCONNECT | TARGET_CAPS_USBMSD)

// Releases for KSKN relaus

#define RELEASE_KSKN_BVK (TARGET_STYPE_BIU_MODBUS | TARGET_CAPS_KEYS_ARM | TARGET_CAPS_KEYS_RUAU | TARGET_CAPS_KSKN_ESA)

#define RELEASE_KSKN_FPANEL (TARGET_STYPE_BIU_IRDA | TARGET_CAPS_INTERCONNECT | TARGET_CAPS_KSKN_ESA)

#define RELEASE_KSKN_FPANEL_MSD (TARGET_STYPE_BIU_IRDA | TARGET_CAPS_INTERCONNECT | TARGET_CAPS_USBMSD | TARGET_CAPS_KSKN_ESA)


/**====================================================================================**

* @brief Define destination release

**====================================================================================**/
// Выбор релиза для компиляции
#define RELEASE_DESTINATION RELEASE_PU_U_SD




/**====================================================================================**

* @brief Auxiliary macro for check current release properties

**====================================================================================**/
// Макросы для использования в условной компиляции и не только
/** @brief Check target type, type = TARGET_TYPE_xxx */

#define TARGET_TYPE_CHECK(type) (((RELEASE_DESTINATION) & 0xFF00u) == (type))

/** @brief Check target subtype, stype = TARGET_STYPE_xxx */

#define TARGET_STYPE_CHECK(stype) (((RELEASE_DESTINATION) & 0xFFFFu) == (stype))

/** @brief Check target capabilites, caps = TARGET_CAPS_xxx | TARGET_CAPS_yyy ... */

#define TARGET_CAPS_CHECK(caps) ((RELEASE_DESTINATION) & (caps))

#define TARGET_CAPS_CHECK_OR(caps) ((RELEASE_DESTINATION) & (caps))

#define TARGET_CAPS_CHECK_AND(caps) (((RELEASE_DESTINATION) & (caps)) == (caps))

/** @brief Get IrDA Slsap service num for IrLMP service */

#define TARGET_IRDA_SLSAP_NUM (((RELEASE_DESTINATION) & 0x80) ? 0x02 : ((RELEASE_DESTINATION)&0x7F))

/** @brief IrDA connection behavior, FALSE - Slsap must be equal to Dlsap, else - connect to any Dlsap service number */

#define TARGET_IRDA_DLSAP_NOCHECK ( ((RELEASE_DESTINATION) & 0x80) || TARGET_EXCH_MODE_MODBUS )

/** @brief Check IrDA/MODBUS exchange mode */

#define TARGET_EXCH_MODE_IRDA (RELEASE_DESTINATION & 0x7F)

#define TARGET_EXCH_MODE_MODBUS ((RELEASE_DESTINATION & 0xFF)==0)

/** @brief Check storage support */

#define TARGET_STORAGE_SUPPORT TARGET_CAPS_CHECK_OR(TARGET_CAPS_SD | TARGET_CAPS_USBMSD)