ZUNO_ENABLE() and ZUNO_DISABLE()

Those macro tunes Z-Uno compiler to access advanced features. ZUNO_ENABLE() enabled and ZUNO_DISABLE() disables features that can be used in the sketch or in dynamic channels. ZUNO_ENABLE(capabilities)
ZUNO_DISABLE(capabilities)
capabilities a space separated list of features For dynamic channels you need to define every user Command Class that might be used. By default none are compiled in to save code space. In fact each feature from the list is a C define. ZUNO_ENABLE/DISABLE is "singletone" macro. Only one call for one sketch. See the examples below. Some useful macroses are listed below. We devided them into groups.
Macro name Value Description
Config parametr
CONFIGPARAMETERS_DISABLE_SYS_PARAMETR - Allows you to disable built-in firmware configuration options.
Debug/Diagnostics
LOGGING_DBG - Enables debug on the core-side. Z-Uno prints lots of debug data like incoming and outgoing packets and etc to LOGGING_UART.
LOGGING_UART Serial, Serial0, Serial1 Defines main logging output. Default is Serial0.
DBG_CONSOLE_PIN HEXADECIMAL:0xPp, where P is port, p is pin. A0 = 0x00, D13 = 0x3D Defines pin for system console output. System console is like *nix dmesg. Here OS dumps internal parameters/events. Flag LOGGING_DBG switches on console on TX0 pin of Z-Uno automatically. To disable console use value 0xFF. For most cases is usable 0x3D = TX0.
Z-Wave advanced options
MODERN_MULTICHANNEL - Disables clusterisation. Only the first endpoint (channel) is mapped to NIF.
MODERN_MULTICHANNEL_S2 - All application's command classes are provided inside S2 supported list.
MODERN_MULTICHANNEL_S2_ALWAYS - S2 stays in NIF/multichannel list if device included unsecurely.
SECURITY_CONFIG_PARAM - Enables parameter #7 that controls security mode. Use it only for debug purposes!
Sketch advanced configuration
SKETCH_VERSION INT, 16bits. Default is 0x0101 = 01.01 Sketch version number for identification. You can see it in Z-Wave controller interface (CC Version/CC FirmwareUpdate)
SKETCH_FWID INT, 16bits. Default is 0x0101 Unique device firmware id for identification. OTA uses this to check validity of firmware image.
SKETCH_FLAGS INT, 32bits, superposition of bits Changes sketch behavior.
HEADER_FLAGS_DBG (bit4) - enables extra debug code.
HEADER_FLAGS_NOLEDS (bit5)- disables system LEDs
HEADER_FLAGS_NOSKETCH_OTA (bit6) - disables sketch OTA process, OTA target#1 will be removed
HEADER_FLAGS_NOSKETCH_USBLOAD (bit7) - disables sketch USB upload. Be careful!
HEADER_FLAGS_REBOOT_CFG (bit8) - enables auto reboot when you change some system configuration parameters.
HEADER_FLAGS_ALL_SECURE (bit9) - device supports SECURE inclusion only. System ignores configuration parameter/IDE settings.
HEADER_FLAGS_ALL_UNSECURE (bit10) - device supports UNSECURE inclusion only. System ignores configuration parameter/IDE settings.
SKETCH_FLAGS_LOOP_DELAY INT, 32bits, in milliseconds. Default is 32 Time interval between loop() function calls. Because of this you don't need to add some extra delay at the end of loop function. For some cases you can adjust it a little. Very low values may hang your radio transmission.
ZUNO_EXT_FIRMWARES_COUNT INT Number of additional (custom) firmwares for OTA.
ZUNO_EXT_FIRMWARES_DESCR_PTR pointer to ZUNOOTAFWDescr_t Metadata for external chip OTA firmwares.
ZUNO_CUSTOM_OTA_OFFSET HEXADECIMAL Additional offset for external chip OTA. Generally OTA's flash segment starts from 0x3a000. Firmware will add defined value to 0x3a000.
GPIO
NO_DEFAULT_PIN_SETUP - Do not set all pins to ZUNO_DEFAULT_PIN_STATE state during startup (just before setup() call).
ZUNO_DEFAULT_PIN_STATE INPUT, INPUT_PULLUP, OUTPUT and etc. Default is INPUT Default pin state. ZUno initializes pins just before setup()
Sleep. Energy saving.
NO_INT1_WAKEUP - Disable wake up from sleep using INT1 (#18) pin.
NO_BTN_WAKEUP - Disable wake up from sleep using BTN (#23) pin.
NO_BTN_CHECK_BEFORE_SLEEP - Puts device into sleep mode even if the button is pressed.
NO_BTN_WUP_NOTIFICATION - When devices wakes up using button it doesn't sleep Wake Up Notification message.
ZUNO_REPORTTIME_DIVIDER INT, default value is 7. Which means once in 80 ms. Z-Uno sends reports by means of system timer. This macro defines a number of system timer ticks beetween reports.
ZUNO_MAX_REPORTCOUNT_PER_MOMENT INT, default value is 2. Which means up to 2 reports for one timer call. Z-Uno sends reports by means of system timer. This macro defines a maximum number of reports. If you use values bigger then default you can overload outgoing message queue.
ZUNO_BUTTON_NONSLEEP_TIMEOUT INT, default value is 5000 ms. It you wake up Z-Uno via "BTN" it waits for user action (inclusion/exclusion and etc.) defined time interval. Smaller value saves your battery, but it loads your fingers :).
WAKEUP_INTERVAL_DEFAULT INT, default value is 36000 s. Default device wake up interval if controller doesn't set it itsels.
ZUNO_DISABLE(WITH_CC_SENSOR_BINARY); // For a binary sensor you can suppress SensorBinary or Notification
ZUNO_ENABLE(LOGGING_EVENTS LOGGING_UART=Serial); // Enable logging in USB
ZUNO_DISABLE(SERVICE_LEDS); // Disable Service LEDs to save battry and remove unwanted blinks
ZUNO_ENABLE(MY_LIBRARY_DEBUG MY_LIBRARY_DEBUG_LEVEL=1); // Set defines used in my library
ZUNO_DISABLE(NO_MULTIBINARY_SWITCH0); // Force Switch Mulitilevel and Switch Binary to be in channels even if can be outside of channels (some controllers require it).
ZUNO_ENABLE(NO_LOOP_MINIMALDELAY); // Disable the default 20 ms minial delay between loops - don't forget to add own delay()
Example 1. Setup some system flags.
 
    ZUNO_ENABLE(LOGGING_EVENTS LOGGING_UART=Serial); // Enable logging, forward it to builtin USB
    // ...
    void setup(){
        // ...
    }
    void loop(){
        // ...
    }
    
Example 2. Setup some user-side flags.
 
        ZUNO_ENABLE(MY_LIBRARY_DEBUG MY_LIBRARY_DEBUG_LEVEL=1); // Set flags for my_library.cpp
        // ...
        void setup(){
            Serial.begin();
            // ...
            #ifdef MY_LIBRARY_DEBUG
            Serial.println("Debug information is on. See details in my_library.cpp ");
            #endif
        }
        void loop(){
            // ...
        }