1 // *********************************************************************
    2 //   IQRF HWPIDs                                                       *
    3 // *********************************************************************
    4 // Copyright (c) MICRORISC s.r.o.
    5 //
    6 // File:    $RCSfile: IQRF_HWPID.h,v $
    7 // Version: $Revision: 1.114 $
    8 // Date:    $Date: 2021/08/18 20:43:06 $
    9 //
   10 // Revision history:
   11 //   2021/08/18  Release for DPA 4.16
   12 //   2020/09/03  Release for DPA 4.15
   13 //   2020/04/03  Release for DPA 4.14
   14 //   2020/02/27  Release for DPA 4.13
   15 //   2020/01/09  Release for DPA 4.12
   16 //   2019/12/11  Release for DPA 4.11
   17 //   2019/10/09  Release for DPA 4.10
   18 //   2019/06/12  Release for DPA 4.03
   19 //   2019/06/03  Release for DPA 4.02
   20 //   2019/03/07  Release for DPA 4.01
   21 //   2019/01/20  Release for DPA 4.00
   22 //   2018/10/25  Release for DPA 3.03
   23 //   2017/11/16  Release for DPA 3.02
   24 //   2017/08/14  Release for DPA 3.01
   25 //
   26 // *********************************************************************
   27 
   28 // Online DPA documentation https://doc.iqrf.org/DpaTechGuide/
   29 // IQRF Standards documentation https://doc.iqrf.org/
   30 
   31 #ifndef _IQRFSTD_HWPID_
   32 #define _IQRFSTD_HWPID_
   33 
   34 //# Class #1 #################################################################################
   35 // Manufacturer: bits:0-9, bit.0=0, bit.3-9=[0000000] (even numbers, but not 0x000)
   36 // Product: bits:10-15 (6 bits)
   37 //############################################################################################
   38 #ifdef __CC5X__
   39 #define HWPID_CLS1(prod,man) \
   40 #if prod < 0 || prod > 0x3F \
   41 #error "HWPID_CLS1: invalid product number" \
   42 #endif \
   43 #if man <= 0 || man > 0x007 || ( man & 1 ) != 0 \
   44 #error "HWPID_CLS1: invalid manufacturer number" \
   45 #endif \
   46 ( (uns16)(man) | ( (uns16)(prod) << 10 ) )
   47 #else
   48 #define HWPID_CLS1(prod,man) ( (uns16)(man) | ( (uns16)(prod) << 10 ) )
   49 #endif
   50 
   51 // -------------------------------------------------------------------------------------------
   52 // IQRF Tech s.r.o.
   53 #define HWPID_IQRF_TECH1      0x002
   54 
   55 // DDC-SE-01 sensor example
   56 // (0002_DDC-SE01.c)
   57 #define HWPID_IQRF_TECH__DEMO_DDC_SE01                HWPID_CLS1( 0x00, HWPID_IQRF_TECH1 ) // 0x0002
   58 
   59 // DDC-SE-01 + DDC-RE-01 sensor example
   60 // (0402_DDC-SE+RE.c)
   61 #define HWPID_IQRF_TECH__DEMO_DDC_SE01_RE01           HWPID_CLS1( 0x01, HWPID_IQRF_TECH1 ) // 0x0402
   62 
   63 // TR temperature sensor example
   64 // (0802_TrThermometer.c)
   65 #define HWPID_IQRF_TECH__DEMO_TR_THERMOMETER          HWPID_CLS1( 0x02, HWPID_IQRF_TECH1 ) // 0x0802
   66 
   67 // Binary output example using LEDs and DDC-RE-01
   68 // (0C02_BinaryOutput-Template.c)
   69 #define HWPID_IQRF_TECH__DEMO_BINARY_OUTPUT           HWPID_CLS1( 0x03, HWPID_IQRF_TECH1 ) // 0x0C02
   70 
   71 // Light example
   72 // (1002_Light-Template.c)
   73 #define HWPID_IQRF_TECH__DEMO_LIGHT                   HWPID_CLS1( 0x04, HWPID_IQRF_TECH1 ) // 0x1002
   74 
   75 // Sensor template
   76 // (1402_Sensor-Template.c)
   77 #define HWPID_IQRF_TECH__DEMO_SENSOR_TEMPLATE         HWPID_CLS1( 0x05, HWPID_IQRF_TECH1 ) // 0x1402
   78 
   79 // ToDo Description DK-SW2-01
   80 // ToDo (?.c)
   81 #define HWPID_IQRF_TECH__DK_SW2_01                    HWPID_CLS1( 0x06, HWPID_IQRF_TECH1 ) // 0x1802
   82 
   83 // ToDo Description IQD-SW1-01
   84 // ToDo (?.c)
   85 #define HWPID_IQRF_TECH__IQD_SW1_01                   HWPID_CLS1( 0x07, HWPID_IQRF_TECH1 ) // 0x1C02
   86 
   87 // ToDo Description IQD-SW2-01
   88 // ToDo (?.c)
   89 #define HWPID_IQRF_TECH__IQD_SW2_01                   HWPID_CLS1( 0x08, HWPID_IQRF_TECH1 ) // 0x2002
   90 
   91 // ToDo Description IQD-RC3-01
   92 // ToDo (?.c)
   93 #define HWPID_IQRF_TECH__IQD_RC3_01                   HWPID_CLS1( 0x09, HWPID_IQRF_TECH1 ) // 0x2402
   94 
   95 // ToDo Description IQD-SM1
   96 // ToDo (2802_IQD-SM1.c)
   97 #define HWPID_IQRF_TECH__IQD_SM1                      HWPID_CLS1( 0x0A, HWPID_IQRF_TECH1 ) // 0x2802
   98 
   99 // ToDo Description IQD-RC4-01
  100 // ToDo (?.c)
  101 #define HWPID_IQRF_TECH__RC4_01                       HWPID_CLS1( 0x0B, HWPID_IQRF_TECH1 ) // 0x2C02
  102 
  103 // ToDo Description IQD-RC4-02
  104 // ToDo (?.c)
  105 #define HWPID_IQRF_TECH__RC4_02                       HWPID_CLS1( 0x0C, HWPID_IQRF_TECH1 ) // 0x3002
  106 
  107 // ToDo Description IQD-REP-01
  108 // ToDo (?.c)
  109 #define HWPID_IQRF_TECH__REP_01                       HWPID_CLS1( 0x0D, HWPID_IQRF_TECH1 ) // 0x3402
  110 
  111 // ToDo Description IQD-SW1-02
  112 // ToDo (?.c)
  113 #define HWPID_IQRF_TECH__IQD_SW1_02                   HWPID_CLS1( 0x0F, HWPID_IQRF_TECH1 ) // 0x3C02
  114 
  115 // DDC-SE-01 + DDC-RE-01 sensor + binary output example - LP version
  116 // (4402_DDC-SE+RE_LP.c)
  117 #define HWPID_IQRF_TECH__DEMO_DDC_SE01_RE01_LP        HWPID_CLS1( 0x11, HWPID_IQRF_TECH1 ) // 0x4402
  118 
  119 // DDC-RE-01 binary output example - LP version
  120 // (4802_DDC-RE_LP.c)
  121 #define HWPID_IQRF_TECH__DEMO_DDC_RE01_LP             HWPID_CLS1( 0x12, HWPID_IQRF_TECH1 ) // 0x4802
  122 
  123 // DDC-SE-01 sensor example - LP version
  124 // (4C02_DDC-SE_LP.c)
  125 #define HWPID_IQRF_TECH__DEMO_DDC_SE01_LP             HWPID_CLS1( 0x13, HWPID_IQRF_TECH1 ) // 0x4C02
  126 
  127 //#define   ?             HWPID_CLS1( 0x14, HWPID_IQRF_TECH1 ) // 0x5002
  128 
  129 //#define   ?             HWPID_CLS1( 0x15, HWPID_IQRF_TECH1 ) // 0x5402
  130 
  131 // DALI_TEMPLATE
  132 // (5802_DALI_TEMPLATE.c)
  133 #define HWPID_IQRF_TECH__DALI_TEMPLATE                HWPID_CLS1( 0x16, HWPID_IQRF_TECH1 ) // 0x5802
  134 
  135 // IQD-REP-03
  136 // (5C02_P-IQD-REP-03.c)
  137 #define HWPID_IQRF_TECH__P_IQD_REP_03                 HWPID_CLS1( 0x17, HWPID_IQRF_TECH1 ) // 0x5C02
  138 
  139 // IQD_REP_02_W2D
  140 // (6002_IQD_REP_02_W2D.c + IQD_REP_02_x1D)
  141 #define HWPID_IQRF_TECH__IQD_REP_02_W2D               HWPID_CLS1( 0x18, HWPID_IQRF_TECH1 ) // 0x6002
  142 
  143 // IQD_REP_02_S2D
  144 // (6402_IQD_REP_02_S2D.c + IQD_REP_02_x1D)
  145 #define HWPID_IQRF_TECH__IQD_REP_02_S2D               HWPID_CLS1( 0x19, HWPID_IQRF_TECH1 ) // 0x6402
  146 
  147 // -------------------------------------------------------------------------------------------
  148 // MICRORISC s.r.o.
  149 #define HWPID_MICRORISC   0x004
  150 
  151 // IQD_REP_02
  152 // (?.c)
  153 #define HWPID_MICRORISC__IQD_REP_02               HWPID_CLS1( 0x00, HWPID_MICRORISC )     // 0x0004
  154 
  155 // Radar Counter
  156 // (0404_RadarCounter.c)
  157 #define HWPID_MICRORISC__RADAR_COUNTER            HWPID_CLS1( 0x01, HWPID_MICRORISC )     // 0x0404
  158 
  159 // IQD-DALI-01
  160 // (0804_IQD-DALI-01.c)
  161 #define HWPID_MICRORISC__IQD_DALI_01              HWPID_CLS1( 0x02, HWPID_MICRORISC )     // 0x0804
  162 
  163 // P-IQD-TEMP-01
  164 // (0C04_P-IQD-TEMP-01.c)
  165 #define HWPID_MICRORISC__P_IQD_TEMP_01            HWPID_CLS1( 0x03, HWPID_MICRORISC )     // 0x0C04
  166 
  167 // IQD-TEMP-02
  168 // (1004_IQD-TEMP-02.c)
  169 #define HWPID_MICRORISC__IQD_TEMP_02              HWPID_CLS1( 0x04, HWPID_MICRORISC )     // 0x1004
  170 
  171 // IQD-CNT-01
  172 // (1404_IQD-CNT-01.c)
  173 #define HWPID_MICRORISC__IQD_CNT_01               HWPID_CLS1( 0x05, HWPID_MICRORISC )     // 0x1404
  174 
  175 // IQD-CNT-02
  176 // (1804_IQD-CNT-02.c)
  177 #define HWPID_MICRORISC__IQD_CNT_02               HWPID_CLS1( 0x06, HWPID_MICRORISC )     // 0x1804
  178 
  179 // IQD-CNT1-01-T-E-01
  180 // (1C04_IQD-CNT1-01-T-E-01.c)
  181 #define HWPID_MICRORISC_IQD_CNT1_01_T_E_01        HWPID_CLS1( 0x07, HWPID_MICRORISC )     // 0x1C04
  182 
  183 // IQD-CNT1-01-TH-I-01
  184 // (2004_IQD-CNT1-01-TH-I-01.c)
  185 #define HWPID_MICRORISC_IQD_CNT1_01_TH_I_01       HWPID_CLS1( 0x08, HWPID_MICRORISC )     // 0x2004
  186 
  187 // IQD-CNT1-01-TH-F-01
  188 // (2404_IQD-CNT1-01-TH-F-01.c)
  189 #define HWPID_MICRORISC_IQD_CNT1_01_TH_F_01       HWPID_CLS1( 0x09, HWPID_MICRORISC )     // 0x2404
  190 
  191 // IQD-REP-02-W1D
  192 // (2804_IQD-REP-02-W1D.c)
  193 #define HWPID_MICRORISC_IQD_REP_02_W1D            HWPID_CLS1( 0x0A, HWPID_MICRORISC )     // 0x2804
  194 
  195 // IQD-REP-02-S1D
  196 // (2C04_IQD-REP-02-S1D.c)
  197 #define HWPID_MICRORISC_IQD_REP_02_S1D            HWPID_CLS1( 0x0B, HWPID_MICRORISC )     // 0x2C04
  198 
  199 // KON-OPI-02
  200 // (3004_KON-OPI-02.c)
  201 #define HWPID_MICRORISC_KON_OPI_02                HWPID_CLS1( 0x0C, HWPID_MICRORISC )     // 0x3004
  202 
  203 // IQD-SW1-06
  204 // (3404_IQD-SW1-06.c)
  205 #define HWPID_MICRORISC_IQD_SW1_06                HWPID_CLS1( 0x0D, HWPID_MICRORISC )     // 0x3404
  206 
  207 // IQD-SE01-xxR
  208 // (3804_IQD-SE01-xxR.c)
  209 #define HWPID_MICRORISC_IQD_SE01_xxR              HWPID_CLS1( 0x0E, HWPID_MICRORISC )     // 0x3804
  210 
  211 // IQD-SE01-xxRT
  212 // (3C04_IQD-SE01-xxRT.c)
  213 #define HWPID_MICRORISC_IQD_SE01_xxRT             HWPID_CLS1( 0x0F, HWPID_MICRORISC )     // 0x3C04
  214 
  215 // IQD-SE01-xxVT
  216 // (4004_IQD-SE01-xxVT.c)
  217 #define HWPID_MICRORISC_IQD_SE01_xxVT             HWPID_CLS1( 0x10, HWPID_MICRORISC )     // 0x4004
  218 
  219 // IQD-SE01-xxLT
  220 // (4404_IQD-SE01-xxLT.c)
  221 #define HWPID_MICRORISC_IQD_SE01_xxLT             HWPID_CLS1( 0x11, HWPID_MICRORISC )     // 0x4404
  222 
  223 // IQD-SE03-xxFL
  224 // (4804_IQD-SE03-xxFL.c)
  225 #define HWPID_MICRORISC_IQD_SE03_05FL             HWPID_CLS1( 0x12, HWPID_MICRORISC )     // 0x4804
  226 
  227 // IQD-SE03-xxLUX
  228 // (4C04_IQD-SE03-xxLUX.c)
  229 #define HWPID_MICRORISC_IQD_SE03_06LUX            HWPID_CLS1( 0x13, HWPID_MICRORISC )     // 0x4C04
  230 
  231 // IQD-CNT2-02, Sensor teploty a vlhkosti, rozšířená přesnost, krabička Italtronic
  232 // (5004_IQD_CNT2_02_TH.c)
  233 #define HWPID_MICRORISC_IQD_CNT2_02_TH            HWPID_CLS1( 0x14, HWPID_MICRORISC )     // 0x5004
  234 
  235 // IQD-SE01-xxI, Intensita osvětlení pro detekci polohy žaluzií (v krabičce IQD-SM1)
  236 // (5404_IQD_SE01_xxI.c)
  237 #define HWPID_MICRORISC_IQD_SE01_xxI              HWPID_CLS1( 0x15, HWPID_MICRORISC )     // 0x5404
  238 
  239 // IQD-SE03-04IR, Detekce polohy žaluzií, reflexní IR čidlo
  240 #define HWPID_MICRORISC_IQD_SE03_04IR             HWPID_CLS1( 0x16, HWPID_MICRORISC )     // 0x5804
  241 
  242 // IQD-SE04-01PIR, Detekce pohybu, čidlo PIR
  243 // (5C04_IQD-SE04-01PIR.c)
  244 #define HWPID_MICRORISC_IQD_SE04_01PIR            HWPID_CLS1( 0x17, HWPID_MICRORISC )     // 0x5C04
  245 
  246 // CHOR-IQ, Kouřový sensor
  247 #define HWPID_MICRORISC_CHOR_IQ                   HWPID_CLS1( 0x18, HWPID_MICRORISC )     // 0x6004
  248 
  249 // IQD-CNT-01-TH
  250 // (6404_IQD-CNT-01-TH.c)
  251 #define HWPID_MICRORISC__IQD_CNT_01_TH            HWPID_CLS1( 0x19, HWPID_MICRORISC )     // 0x6404
  252 
  253 // P-IQD-SM2-T.c
  254 // (6804_P_IQD_SM2_T.c)
  255 #define HWPID_MICRORISC__P_IQD_SM2_T              HWPID_CLS1( 0x1A, HWPID_MICRORISC )     // 0x6804
  256 
  257 // IQD-REP-04.c
  258 // (6C04_IQD_REP_04.c)
  259 #define HWPID_MICRORISC__IQD_REP_04               HWPID_CLS1( 0x1B, HWPID_MICRORISC )     // 0x6C04
  260 
  261 // IQD-REP-02-S1D-T
  262 // (7004_IQD-REP-02-S1D-T.c)
  263 #define HWPID_MICRORISC_IQD_REP_02_S1D_T          HWPID_CLS1( 0x1C, HWPID_MICRORISC )     // 0x7004
  264 
  265 // IQD-UPS01
  266 // (7404_IQD_UPS01.c)
  267 #define HWPID_MICRORISC_IQD_UPS01                 HWPID_CLS1( 0x1D, HWPID_MICRORISC )     // 0x7404
  268 
  269 //# Class #2 #################################################################################
  270 // Manufacturer: bits:0-11, bit.0=1, bit.5-11=[0000000] (odd numbers, never value 0x??F)
  271 // Product: bits:12-15 (4 bits)
  272 //############################################################################################
  273 #ifdef __CC5X__
  274 #define HWPID_CLS2(prod,man) \
  275 #if prod < 0 || prod > 0xF \
  276 #error "HWPID_CLS2: invalid product number" \
  277 #endif \
  278 #if man < 0 || man > 0x01F || ( man & 1 ) == 0 || ( man & 0xF ) == 0xF \
  279 #error "HWPID_CLS2: invalid manufacturer number" \
  280 #endif \
  281 ( (uns16)(man) | ( (uns16)(prod) << 12 ) )
  282 #else
  283 #define HWPID_CLS2(prod,man) ( (uns16)(man) | ( (uns16)(prod) << 12 ) )
  284 #endif
  285 // -------------------------------------------------------------------------------------------
  286 // PROTRONIX s.r.o.
  287 #define HWPID_PROTRONIX   0x001
  288 
  289 // Temperature+Humidity+CO2 sensor
  290 // (0001_Protronix-T+RH+CO2.c)
  291 #define HWPID_PROTRONIX__TEMP_HUM_CO2                 HWPID_CLS2( 0x0, HWPID_PROTRONIX ) // 0x0001
  292 
  293 // Temperature+Humidity+VOC sensor
  294 // (1001_Protronix-T+RH+VOC.c)
  295 #define HWPID_PROTRONIX__TEMP_HUM_VOC                 HWPID_CLS2( 0x1, HWPID_PROTRONIX ) // 0x1001
  296 
  297 // Temperature+Humidity+CO2 sensor + Relay
  298 // (2001_Protronix-T+RH+CO2+Relay.c)
  299 #define HWPID_PROTRONIX__TEMP_HUM_CO2_RELAY           HWPID_CLS2( 0x2, HWPID_PROTRONIX ) // 0x2001
  300 
  301 // Temperature+Humidity sensor
  302 // (3001_Protronix-T+RH.c)
  303 #define HWPID_PROTRONIX__TEMP_HUM                     HWPID_CLS2( 0x3, HWPID_PROTRONIX ) // 0x3001
  304 
  305 // Temperature+Humidity+CO2 sensor [LP]
  306 // (4001_Protronix-LP-T+RH+CO2.c)
  307 #define HWPID_PROTRONIX__LP_TEMP_HUM_CO2              HWPID_CLS2( 0x4, HWPID_PROTRONIX ) // 0x4001
  308 
  309 // Temperature+Humidity sensor [LP]
  310 // (5001_Protronix-LP-T+RH.c)
  311 #define HWPID_PROTRONIX__LP_TEMP_HUM                  HWPID_CLS2( 0x5, HWPID_PROTRONIX ) // 0x5001
  312 
  313 // PM 2,5 sensor [LP]
  314 // (6001_Protronix-NLII_PM25.c)
  315 #define HWPID_PROTRONIX__NLII_PM25                    HWPID_CLS2( 0x6, HWPID_PROTRONIX ) // 0x6001
  316 
  317 // Temperature+Humidity+CO2 sensor Beaming
  318 // (7001_Protronix-NLB-CO2+RH+T-Beaming.c)
  319 #define HWPID_PROTRONIX__NLB_CO2_R_T_Beaming          HWPID_CLS2( 0x7, HWPID_PROTRONIX ) // 0x7001
  320 
  321 // TVOX+RH+T
  322 #define HWPID_PROTRONIX__NLII_TVOC_RH_T               HWPID_CLS2( 0x8, HWPID_PROTRONIX ) // 0x8001
  323 
  324 // NOX
  325 #define HWPID_PROTRONIX__NLII_NOX                     HWPID_CLS2( 0x9, HWPID_PROTRONIX ) // 0x9001
  326 
  327 // -------------------------------------------------------------------------------------------
  328 // NETIO products a.s.
  329 #define HWPID_NETIO       0x003
  330 
  331 // Cobra 1 - 1x power plug
  332 // (0003_Netio-Cobra1.c)
  333 #define HWPID_NETIO__COBRA1                           HWPID_CLS2( 0x0, HWPID_NETIO )     // 0x0003
  334 
  335 // Cobra 1 - 1x power plug [LP]
  336 // (1003_Netio-LP-Cobra1.c)
  337 #define HWPID_NETIO__LP_COBRA1                        HWPID_CLS2( 0x1, HWPID_NETIO )     // 0x1003
  338 
  339 // -------------------------------------------------------------------------------------------
  340 // DATmoLUX a.s.
  341 #define HWPID_DATMOLUX    0x005
  342 
  343 // DATmoLUX Light
  344 // 0005_DATmoLUX-Light.*
  345 #define HWPID_DATMOLUX__LIGHT                         HWPID_CLS2( 0x0, HWPID_DATMOLUX )  // 0x0005
  346 
  347 // -------------------------------------------------------------------------------------------
  348 // CITIQ s.r.o.
  349 #define HWPID_CITIQ       0x007
  350 
  351 // -------------------------------------------------------------------------------------------
  352 // Austyn International s.r.o.
  353 #define HWPID_AUSTYN      0x009
  354 
  355 // Room temperature controller
  356 // (0009_RoomTemperatureController.c)
  357 #define HWPID_AUSTYN__ROOM_CONTROLLER                 HWPID_CLS2( 0x0, HWPID_AUSTYN )    // 0x0009
  358 
  359 // -------------------------------------------------------------------------------------------
  360 // Aledo s.r.o.
  361 #define HWPID_ALEDO       0x00B
  362 
  363 // Room temperature controller
  364 // (000B_Aledo-Reader_R02A230.c)
  365 #define HWPID_ALEDO__READER_R02A230                   HWPID_CLS2( 0x0, HWPID_ALEDO )     // 0x000B
  366 
  367 // -------------------------------------------------------------------------------------------
  368 // SANELA spol. s r. o.
  369 #define HWPID_SANELA      0x00D
  370 
  371 // Sanela SL626 Person presence sensor
  372 // (000D_Sanela-SL626.c)
  373 #define HWPID_SANELA__SL626                           HWPID_CLS2( 0x0, HWPID_SANELA )    // 0x000D
  374 
  375 // Sanela SL626A sink sensor
  376 // (100D_Sanela-SL626A.c)
  377 #define HWPID_SANELA__SL626A                          HWPID_CLS2( 0x1, HWPID_SANELA )    // 0x100D
  378 
  379 // -------------------------------------------------------------------------------------------
  380 // TESLA Blatná, a.s.
  381 #define HWPID_TESLA_BLATNA  0x011
  382 
  383 // TESLA Blatná Smart City environmental module
  384 // (0011_TESLA_Blatna-EnvironmentalModule.c)
  385 #define HWPID_TESLA_BLATNA__EnvironmentalModule       HWPID_CLS2( 0x0, HWPID_TESLA_BLATNA )  // 0x0011
  386 
  387 // -------------------------------------------------------------------------------------------
  388 // JoTio Tech s.r.o.
  389 #define HWPID_JOTIO_TECH  0x013
  390 
  391 // IRIS
  392 #define HWPID_JOTIO_TECH__IRIS                        HWPID_CLS2( 0x0, HWPID_JOTIO_TECH )    // 0x0013
  393 
  394 // ALTAIR
  395 #define HWPID_JOTIO_TECH__ALTAIR                      HWPID_CLS2( 0x1, HWPID_JOTIO_TECH )    // 0x1013
  396 
  397 // -------------------------------------------------------------------------------------------
  398 // HARDWARIO s.r.o. (BigClown)
  399 #define HWPID_HARDWARIO  0x015
  400 
  401 // Presence sensor
  402 #define HWPID_HARDWARIO_PRESENCE_SENSOR               HWPID_CLS2( 0x0, HWPID_HARDWARIO )     // 0x0015
  403 
  404 // COOPER
  405 // (1015_HARDWARIO-COPPER.c)
  406 #define HWPID_HARDWARIO_COOPER                        HWPID_CLS2( 0x1, HWPID_HARDWARIO )     // 0x1015
  407 
  408 // -------------------------------------------------------------------------------------------
  409 // 4IOTECH s.r.o.
  410 #define HWPID_4IOTECH  0x017
  411 
  412 // 4IOT-SEN-01
  413 #define HWPID_4IOTECH_4IOT_SEN_01                     HWPID_CLS2( 0x0, HWPID_4IOTECH )       // 0x0017
  414 
  415 // -------------------------------------------------------------------------------------------
  416 // Liteplan Ltd.
  417 #define HWPID_LITEPLAN  0x019
  418 
  419 // IQD-DALI-01
  420 #define HWPID_LITEPLAN_IQD_DALI_01                    HWPID_CLS2( 0x0, HWPID_LITEPLAN )      // 0x0019
  421 
  422 
  423 // -------------------------------------------------------------------------------------------
  424 // Danlers https://www.danlers.co.uk/
  425 #define HWPID_DANLERS  0x01B
  426 
  427 // DANLERS-PIR
  428 // (001B_DANLERS-PIR.c)
  429 #define HWPID_DANLERS_PIR                             HWPID_CLS2( 0x0, HWPID_DANLERS )       // 0x001B
  430 
  431 //# Class #3 #################################################################################
  432 // Manufacturer: bits:0-11, bit.0=0, bit.3-9 != [0000000] (even numbers, but not 0x000)
  433 // Product: bits:12-15 (4 bits)
  434 //############################################################################################
  435 #ifdef __CC5X__
  436 #define HWPID_CLS3(prod,man) \
  437 #if prod < 0 || prod > 0xF \
  438 #error "HWPID_CLS3: invalid product number" \
  439 #endif \
  440 #if man <= 0 || man > 0xFFF || ( man & 0x3F8 ) == 0 || ( man & 1 ) != 0 \
  441 #error "HWPID_CLS3: invalid manufacturer number" \
  442 #endif \
  443 ( (uns16)(man) | ( (uns16)(prod) << 12 ) )
  444 #else
  445 #define HWPID_CLS3(prod,man) ( (uns16)(man) | ( (uns16)(prod) << 12 ) )
  446 #endif
  447 
  448 // -------------------------------------------------------------------------------------------
  449 // IQRF Tech s.r.o.
  450 #define HWPID_IQRF_TECH3      0x05E
  451 // For the fixed HWPID=C05E used by a special handler
  452 
  453 // (CustomDpaHandler-ChangeIQRFOS.c)
  454 #define HWPID_IQRF_TECH_ChangeIQRFOS                  HWPID_CLS3( 0xC, HWPID_IQRF_TECH3 ) // 0xC05E
  455 
  456 //# Class #4 #################################################################################
  457 // Manufacturer: bits:0-13, bit.0=1, bit.5-11 != [0000000] (odd numbers, never value 0x??F)
  458 // Product: bits:14-15 (2 bits)
  459 //############################################################################################
  460 #ifdef __CC5X__
  461 #define HWPID_CLS4(prod,man) \
  462 #if prod < 0 || prod > 0x3 \
  463 #error "HWPID_CLS4: invalid product number" \
  464 #endif \
  465 #if man < 0 || man > 0x3FFF || ( man & 1 ) == 0  || ( man & 0xFE0 ) == 0 || ( man & 0xF ) == 0xF \
  466 #error "HWPID_CLS4: invalid manufacturer number" \
  467 #endif \
  468 ( (uns16)(man) | ( (uns16)(prod) << 14 ) )
  469 #else
  470 #define HWPID_CLS4(prod,man) ( (uns16)(man) | ( (uns16)(prod) << 14 ) )
  471 #endif
  472 
  473 // -------------------------------------------------------------------------------------------
  474 
  475 //############################################################################################
  476 #endif  // _IQRFSTD_HWPID_
  477 //############################################################################################