DALI software release notes


Version 2.1
2024-07-04 (Latest)

New Feature:

  • Die optionale Variable "Current bus unit configuration" der Memory Bank 0 mit der Adresse 0x1B wurde hinzugefügt. Hierzu gehört auch ein neuer Vendor-Konfigurationsparameter zum Initialisieren.

Fix:

  • Fehlender device type 52 (Diagnostics & Maintenance) in Query (next) device type hinzugefügt. 

  • Die Abfrage der extended version number der device Extensions (device types 49, 51 und 52) wurde korrigiert.

  • Mechanismus zur Bestimmung und Aktualisierung von "Number of last accessible memory bank" in Memory Bank 0 Adresse 0x02 wurde angepasst. Ein Hinzufügen und/oder Entfernen von manufacturer-specific Memory Banks wird jetzt berücksichtig.

  • Die Memory Bank 0 Variablen "102 version number of all integrated control gear" und "103 version number of all integrated control devices" werden jetzt entsprechend des konfigurierten Stack-Modes (control gear, control device) gesetzt und nicht mehr allgemein mit 2.0 initialisiert.

  • Mechanismus für das Senden von extended commands mit dem DALI-Stack konfiguriert als Control Device überarbeitet. Betroffen sind die Module DT6 (LED), DT7 (Switching), DT8 (Colour). 

  • Korrektur am Speichermechanismus

 

Version 2.0
2023-10-16

New Feature:

  • Writing a cell in a manufacturer-specific memory bank triggers the reaction DALILIB_REACT_INTERNAL_CTRL_GEAR_MEMORY_CELL_CHANGED for control gears

  • Writing a cell in a manufacturer-specific memory bank triggers the reaction DALILIB_REACT_INTERNAL_CTRL_DEVICE_MEMORY_CELL_CHANGED for control devices

  • Control Gear: DT8 RGBWAF-only added

  • Service and debug functions added

    a) Stop and start the Dali receiver

    b) Hardware error detection during transmission
    (transmitter and/or receiver level converter defective)

    c) Send 8-bit test frame (without Api)

    d) Function for returning the version and build number.

    e) Build number newly introduced in LL-Driver

Fix:

  • Cumulative time error during transmission (interferes with 102.6.4) corrected

  • The TERMINATE command triggers a save operation if a persistent variable has changed during initialized mode.
    (Part 102 Sequence 7.1)

  • Racecondition in RecieveQueue handling removed.

  • Interrupt-enable/disable callbacks removed. No longer necessary due to resolution of the race condition.

 

Version 1.11
2023-03-24

New Feature:

  • Define DEBUG_LOG was introduced in order to be able to switch logging on and off separately from the DEBUG version

  • Configuration parameter deactivateAutomaticSavePersistent has been introduced. If this is set, saving the persistent variables is only triggered by an internal action.

  • If the stack has reset the persistent variables to default values, the application is now notified by a reaction.

  • New reaction added to enable a distinction between Init and Reset when resetting the persistent variables to default values

  • OperatingMode 0x80 - 0xFF is now permitted by the stack

  • The calculation of the target level has been revised. When the value is changed, the application is notified via a newly introduced reaction

  • New configuration parameters have been introduced:
    - to specify the offset between the start of the stack and the current time
    - to use a random value for calculating the random seed

  • Repeated dimming now uses the actual (high resolution) light level as the start level instead of using the rounded ActualLevel.

  • The internal actions "DALILIB_ACT_INTERNAL_CTRL_GEAR_EXEC_DAPC" and "DALILIB_ACT_INTERNAL_CTRL_GEAR_EXEC_DAPC_RAW_VALUE" trigger a process that corresponds to that of an external incoming DAPC command and uses the existing settings (fading) during the transition.

  • Any number of custom Membanks can be created. The number of Membanks is still limited by MAXMEMBANKS

  • MAXMEMBANKS has been moved from "defines.h" to "libdali.h" and thus to the user-configurable area

  • For custom memory banks, addresses 1 and 2 can now be written to via `WRITE MEMORY LOCATION`.

  • In the gear_calc_actual_level() function, the calculation of the stepValues has been revised in order to increase the resolution when dimming.

  • New enumeration added that allows the application to differentiate between total and partial lamp failure when setting and querying the lamp failure status.

  • Make memory bank 1 available as a user memory bank in GEARS if DALI Part 251 DiiA extension is deactivated

  • Proprietary frames between 9 and 12 bits are now also reported to the application. These can also occur with responses from poorly programmed gears that should actually generate a collision. This allows the application to help itself.

  • SET OPERATING MODE now triggers a DALILIB_CTRL_GEAR_REACTION with the reaction code DALILIB_REACT_INTERNAL_CTRL_GEAR_SET_OPERATING_MODE

  • Function for deleting (reference) manufacturer-specific memory banks implemented

  • SET OPERATING MODE now triggers a DALILIB_CTRL_DEVICE_REACTION with the reaction code DALILIB_REACT_INTERNAL_CTRL_DEVICE_SET_OPERATING_MODE

Fix:

  • The reaction DALILIB_REACT_INTERNAL_CTRL_GEAR_DEFAULT_PERS_MEMORY now contains data in the struct gearReact

  • The IDENTIFY DEFICE command is executed according to specification, DALI_CTRL_DEVICE_IDENTIFY_DEVICE_TIME_MAX has been increased to 10s. The stack informs the application about a newly introduced reaction when the Identify device status changes.

  • The Identify device is reset for commands (except queries)

  • Send-Twice commands preceded by the ENABLE DEVICE TYPE command are executed.

  • The QUERY MANUFACTURER SPECIFIC MODE command is answered with Yes if the stack is running in a manufacturer-specific mode.

  • When the dimming curve is changed, the corresponding bit in the operatingMode variable is set or deleted.

  • When dimming using the dimming rate, overflow or underflow is avoided.

  • The stack configured as gear responds to the QUERY GEAR PRESENT command with Yes if the short address is MASK.

  • When dimming, the targetLevel is set directly to 0.

  • The Send Twice timeout has been reduced to 99 ms.

  • An underflow occurred in gear_calc_actual_level() during the calculation of stepValue; the calculation is now performed as a 64-bit integer.

  • Dimming processes are completed after the dimming time has elapsed

  • If targetLevel is 0, the actualLevel is set to 0 at the end of the dimming process

  • If the stepTime is low, the dimming process is only ended after the dimming step has been executed

  • After a system failure, the actualLevel is retained

  • When the first UP/DOWN command is executed, the first step is executed before the dimming process begins

  • When calculating the diffLevel in gear_calc_dimmrate(), the carryover is taken into account for UP/DOWN sequences

  • When UP and DOWN commands are received, the stack aborts the current dimming process

  • When calculating the stepTime of a dimming organ, a division by zero could occur; this is now tested and the division is avoided.

  • The DAPC(MASK) command retains limitError

  • With the UP command, the stack sets limitError if acutalLevel is already at maxLevel or minLevel or if the limits are exceeded when calculating the targetLevel

  • With a PowerOn, the stack sets the targetLevel with a check of the limits, so that limitError is also set if necessary

  • With DAPC sequences, the dimming process was calculated incorrectly so that there was no level change during dimming; now the dimming process is calculated correctly.

  • When executing the GO TO SCENE command (actualLevel equals targetLevel), no dimming process is triggered in this case

  • The stack only changes the actualLevel when the RECALL MIN LEVEL and RECALL MAX LEVEL commands are executed.

  • During the Identify device process, the stack set the actual light level to different brightnesses depending on the initializationState; now the stack always switches between off and 100 %.

  • When the Identify device process is ended, the actual light level is set when the process is ended

  • When executing the commands DAPC, SET POWER ON LEVEL and DTR0 (and other instructions), the stack terminates the Identify device process

  • The RECALL MIN LEVEL and RECALL MAX LEVEL commands set the actual light level to PHM or 100 %, regardless of the initializationState, if initializationState is not equal to DISABLED

  • During a dimming process, the new actualLevel is only set if the targetLevel has not yet been reached

  • In gear_init_after_power_cycle(), the targetLevel is only set together with the actualLevel after the power-on time has expired

  • The stack can differentiate between total lamp failure and partial lamp failure and communicate the respective status to it - the stack then sets the variables lampFailure and lampOn accordingly

  • The dimming times of fastFadeTime were taken from Table 1 in IEC 62386-207:2009, now the stack can use the dimming times from Table 1 in IEC 62386-207:2018, switchable to compile time via newly introduced define.

  • If the startTimeOffset was greater than the currentTime, the start time for the power-on procedure for gears and for the power cycle notification for application controllers was calculated incorrectly; now the start time is calculated correctly with wrap-around.

  • If a system failure occurs during the power-on time, the stack aborts the power-on procedure

  • IAR compiler warnings have been corrected

  • If minLevel and targetLevel were set to 1, the stack set the targetLevel to 0 when the STEP DOWN command was executed; now the targetLevel remains at 1 in this case.

  • When executing the GO TO SCENE (MASK) command, the stack sets powerCycleSeen to FALSE if sceneLevel is equal to MASK

  • If the DAPC (MASK) command is processed during the power-on procedure, the stack aborts this process.

  • The first dimming step of a dimming process was carried out 10ms after the start, even if the stepTime was significantly smaller; now a status frame is requested by the low-level driver in 2ms at the start of the dimming process, so that the first dimming step is carried out after 2ms if the stepTime is low.

  • With high-resolution dimming, the newly calculated light level was passed on to the application each time the timingHelper was called; now the stack only passes on the newly calculated light level to the application if the light level has changed.

  • Internal actions are executed during bus power down or system failure.

  • When initializing a stack instance, active instances are taken into account and the corresponding values in their memory bank 0 are updated

  • Keil compiler warnings have been corrected

  • If MEM_BANK1_EXTENSION is activated, 0x08 (V2.0) is reported for DT50 for QUERY_EXTENDED_VERSION_NUMBER

  • Defaults for MEM_BANK1 corrected

  • A go to scene message triggers the new internal reaction "DALILIB_REACT_INTERNAL_CTRL_GEAR_GO_TO_SCENE".

  • The scene index is written in reactValue.

  • Get scene internal action returns a percentage value. The raw value is still available via gearReact.reactRawValue.

  • All events now always contain the event dates

  • The reaction code of light sensors is no longer set to Unknown if the first bit of the input value is set.

  • The event filter for light sensors affects the report timer events and not just events that are triggered by value changes.

  • "QUERY LIGHT SOURCE TYPE" from Part102 - 11.5.19 corrected. Previously, the device type was output instead of the light source type.

  • The ProbitLab test 102.6.4 (fade to zero) could fail due to the internal time measurement for the API. (fixed)

  • LL-Driver gets version 1.12

 

Version 1.10
2022-05-31

New Feature:

  • Define DEBUG_LOG was introduced in order to be able to switch logging on and off separately from the DEBUG version

  • Configuration parameter deactivateAutomaticSavePersistent has been introduced. If set, saving the persistent variables is only triggered by an internal action.

  • If the stack has reset the persistent variables to default values, the application is now notified by a reaction.

  • New reaction added to enable a distinction between Init and Reset when resetting the persistent variables to default values

  • OperatingMode 0x80 - 0xFF is now permitted by the stack

  • The calculation of the target level in the stack has been revised. When the value is changed, the application is notified via a newly introduced reaction

  • New configuration parameter to specify the offset between the start of the stack and the current time.

  • Repeated dimming now uses the actual (high resolution) light level as the start level instead of using the rounded ActualLevel.

  • configuration parameter was introduced in order to be able to use a real random value for the calculation of the random seed.

  • In the gear_calc_actual_level() function, the calculation of the stepValues has been revised in order to increase the resolution when dimming.

  • Enumeration added, which allows the application to differentiate between total and partial lamp failure when setting and querying the lamp failure status.

Fix:

  • The reaction DALILIB_REACT_INTERNAL_CTRL_GEAR_DEFAULT_PERS_MEMORY was incorrect and now contains the expected data in the struct gearReact

  • The IDENTIFY DEFICE command is now executed according to specification, DALI_CTRL_DEVICE_IDENTIFY_DEVICE_TIME_MAX has been increased to 10s. The stack informs the application about a newly introduced reaction when the Identify device status changes.

  • Identify device is now reset for commands (except queries)

  • Send-Twice commands with the preceding ENABLE DEVICE TYPE command have been discarded and are now executed.

  • The QUERY MANUFACTURER SPECIFIC MODE command was ignored and is now answered with Yes if the stack is running in a manufacturer-specific mode.

  • The LED command QUERY OPERATING MODE was answered incorrectly - the active dimming curve was ignored; now the corresponding bit in the operatingMode variable is set or deleted when the dimming curve is changed.

  • When dimming using the dimming rate, an arithmetic overflow or underflow could occur; this is now tested and the overflow or underflow is avoided.

  • The stack configured as gear did not respond to the QUERY GEAR PRESENT command if the short address was MASK. Now the request is always answered with yes.

  • When dimming to level 0, the targetLevel was first set to minLevel and only after dimming to 0. Now the targetLevel is set directly to 0.

  • The Send Twice timeout has been set to 99 ms.

  • An underflow occurred in gear_calc_actual_level() during the calculation of stepValue; the calculation is now performed as a 64-bit integer.

  • Dimming processes sometimes ended too early, now the dimming process is completed exactly after the dimming time has elapsed.

  • With targetLevel equal to 0, the actualLevel was already set to 0 during the dimming process; now the actualLevel is only set to 0 at the end of the dimming process.

  • With a low stepTime, it could happen that the dimming process was ended before the last dimming step was executed; now the dimming process is only ended after the dimming step has been executed.

  • After a system failure, the actualLevel was set to zero, now the actualLevel is retained.

  • When the first UP/DOWN command was executed, the first step before the start of the dimming process was ignored; now this step is executed.

  • When calculating the diffLevel in gear_calc_dimmrate(), the carryover was ingorized so that too few dimming steps were performed for UP/DOWN sequences; now the carryover is taken into account for UP/DOWN sequences.

  • The current dimming process was not aborted when UP and DOWN commands were received; now the stack aborts the current dimming process.

  • When calculating the stepTime of a dimming organ, a division by zero could occur; this is now tested and the division is avoided.

  • With the DAPC(MASK) command, imitError was set to FALSE, now limitError is retained.

  • With the UP command, limitError was not set if maxLevel was exceeded during execution. Similarly, limitError was not set for the DOWN command if minLevel was undershot during execution. Now the stack sets limitError if acutalLevel is already at maxLevel or minLevel or if the limits are exceeded when calculating the targetLevel.

  • With a PowerOn the targetLevel was set directly without checking the limits, now the stack sets the targetLevel with checking the limits, so that limitError is also set if necessary.

  • With DAPC sequences, the dimming process was calculated incorrectly so that there was no level change during dimming; now the dimming process is calculated correctly.

  • When executing the GO TO SCENE command, a dimming process was triggered although actualLevel was equal to targetLevel, now no dimming process is triggered in this case.

  • During the Identify device process the actualLevel was changed, now the stack only changes the actualLevel when the RECALL MIN LEVEL and RECALL MAX LEVEL commands are executed.

  • During the Identify device process, the stack set the actual light level to different brightness levels depending on the initializationState, now the stack always switches between Off and 100%.

  • When the Identify device process was terminated, the actual light level was only set if the timer had expired; now it is always set when the process is terminated.

  • When executing the commands DAPC, SET POWER ON LEVEL and DTR0 (and further instructions) the stack did not finish the Identify device process, now the stack finishes the process.

  • The RECALL MIN LEVEL and RECALL MAX LEVEL commands always set the actual light level to the same level regardless of the initializationState; now the two commands set the actual light level to PHM or 100% if the initializationState is not equal to DISABLED.

  • During a dimming process in which the targetLevel had already been reached, the new actualLevel was not recalculated but was still set; now the new actualLevel is only set if the targetLevel has not yet been reached.

  • In gear_init_after_power_cycle() the targetLevel was already set depending on the powerOnLevel, now the targetLevel is only set together with the actualLevel after the power-on time has expired.

  • The stack did not differentiate between total lamp failure and partial lamp failure, now the application can communicate the respective status to the stack and the stack sets the variables lampFailure and lampOn accordingly.

  • The dimming times of fastFadeTime were taken from Table 1 in IEC 62386-207:2009, now the stack can use the dimming times from Table 1 in IEC 62386-207:2018, switchable to compile time via newly introduced define.

  • If the startTimeOffset was greater than the currentTime, the start time for the power-on procedure for gears and for the power cycle notification for application controllers was calculated incorrectly; now the start time is calculated correctly with wrap-around.

  • If a system failure occurred during the power-on time, the power-on procedure was not aborted, now the stack aborts the power-on procedure when a system failure is detected.

  • IAR compiler warnings have been corrected

  • If minLevel and targetLevel were set to 1, the stack set the targetLevel to 0 when the STEP DOWN command was executed; now the targetLevel remains at 1 in this case.

  • When executing the GO TO SCENE (MASK) command, powerCycleSeen was not reset, now the stack sets powerCycleSeen to FALSE even if sceneLevel is equal to MASK.

  • If the DAPC (MASK) command was processed during the power-on procedure, the power-on procedure continued to run unchanged; now the stack aborts the power-on procedure when processing the DAPC (MASK) command.

  • The first dimming step of a dimming process was carried out 10ms after the start, even if the stepTime was significantly smaller; now a status frame is requested by the low-level driver in 2ms at the start of the dimming process, so that the first dimming step is carried out after 2ms if the stepTime is low.

  • With high-resolution dimming, the newly calculated light level was passed on to the application each time the timingHelper was called; now the stack only passes on the newly calculated light level to the application if the light level has changed.

  • Internal actions were discarded during bus power down or system failure, now internal actions are also executed during bus power down or system failure.

  • If several instances of the stack were started on a bus unit, these were not taken into account during initialization; now, when a stack instance is initialized, instances that are already active are taken into account and the corresponding values in their memory bank 0 are updated.

  • Keil compiler warnings have been corrected


Version 1.9
2021-10-21

New Feature:

  • New internal actions have been introduced that enable the stack's operating variables to be read or changed

  • New configuration parameter has been introduced to set the delay of saving persistent data between 0-29 seconds

  • The callback functions fAppLoadModuleMem and fAppSaveModuleMem now also pass the pointer to the stack instance and the version of the memory block as parameters

Fix:

  • The save persistent memory mechanism is now also triggered when the RESET command is processed

  • Action DALILIB_REACT_INTERNAL_CTRL_DEVICE_DEFAULT_PERS_MEMORY is now also implemented for memory blocks

  • Before the memory blocks are saved, a check is made to ensure that the device is configured accordingly and is actually using this block


Version 1.8
2021-08-06

New Feature:

  • New mechanism for saving persistent data has been introduced. Persistent data is now saved separately in modules. New callback functions fAppLoadModuleMem and fAppSaveModuleMem are available for this purpose and the internal data structure has been adapted. A new configuration parameter savePersistentModules has been introduced to activate the new mechanism for saving persistent data. The previous mechanism can still be used

Fix:

  • The behavior when sending test frames has been corrected

  • When a bus collision is received, any existing collision is now reported to the application as completed before the new collision is reported

  • The waiting time of the power cycle notification is now set to a value between 1300 and 4900 ms with continuous uniform distribution


Version 1.7
2021-06-24

New Feature:

  • The C++ keyword "using" has been replaced by isUsed in the structure dali_instance_t

Fix:

  • A time parameter has been added to the interface to the low-level driver in order to be able to determine the timeouts of Send Twice frames according to the standard

  • The newly introduced time parameter of the frame is now used to calculate the timeout

  • The timeout of Send Twice Frames has been increased to 102ms

  • The command SEND TESTFRAME is now processed and test frames are sent accordingly

  • Writable cells can now also be written to in memory bank 201

  • The processing of the DIRECT WRITE MEMORY command has been corrected

  • When the QUERY CONTENT DTR2 and DTR2:DTR1 commands are processed, the writeEnableState is no longer reset

  • When processing the VERIFY SHORT ADDRESS command, the short address mask is now applied and the command is discarded if necessary

  • When processing the ENABLE INSTANCE command, the system now checks whether the stack is configured as an application controller in order to skip further processing if necessary

  • Instance commands are now discarded from the stack according to Part 103 Amendment 1 if it is configured as an application controller

  • Commands reserved in the standard are now correctly recognized and discarded


Version 1.6
2021-05-20

Fix:

  • The InitializationState is now also reset after the initialization time has elapsed if it is set to WITHDRAWN

  • The INITIALIZE command no longer overwrites the InitializationState if it is set to WITHDRAWN

  • The incrementing of DTR0 when executing the WRITE MEMORY CELL or READ MEMORY CELL commands has been corrected and is now carried out according to standard


Version 1.5
2021-05-10

New Feature:

  • Saving persistent data when changing the value of persistent variables is now triggered 29 seconds after the first value change

Fix:

  • The overflow of the time counter was faulty and has been corrected

  • The time counter for the demo runtime was incorrect and has been corrected

  • When executing the RESET command, the initializationState is no longer reset by default

  • The number of the memory bank of the D4i extension Part 351 has been corrected to 201


Version 1.4
2021-03-31

New Feature:

  • D4i extensions can now be switched on or off at compile time

  • New actions for setting the light level with raw values have been added

Fix:

  • The return value of fAppSend is now evaluated and R_DALILIB_BUSY is returned to the application in the event of an error

  • Send Twice frame check has been adjusted, new timeout DALI_SEND_TWICE_TIMEOUT has been introduced

  • When the value of a persistent variable is changed, the persistent data is now saved immediately

  • The creation of the frame for the POWER NOTIFICATION event was incorrect and has been corrected according to the standard

  • Group-addressed commands are now also executed when the group is set

  • The incrementing of DTR0 when executing the WRITE MEMORY CELL or READ MEMORY CELL commands has been corrected and is now carried out according to standard


Version 1.3
2021-03-08

New Feature:

  • D4i extensions (parts 250, 251, 252, 253 and 351) are supported by the stack

  • New configuration parameter savePersistentOnInit added. When the persistent memory is reinitialized, it is saved directly depending on savePersistentOnInit

  • New internal gear and device action for requesting a buffer with the default data of the persistent memory has been introduced

Fix:

  • Commands with instance addressing "Device" are now accepted and processed

  • Forward frames are no longer sent in quiescent mode

  • If the stack is waiting for a W response but receives a command, the application is now notified of the missing response

  • The QUERY INSTANCE TYPE command is now only answered by the stack if it is configured as an input device

  • Warnings generated by -Wextra compiler flag have been fixed

  • The target level of gears is now also set to 0 without fading when a DAPC 0 command is received

  • The buffer for the callback functions fPAppSaveMem and fPAppLoadMem has been increased to 512 bytes and the parameter nSize has been increased from uint8_t to uint16_t

  • The callback functions fPAppSaveMem and fPAppLoadMem now pass the total size of the buffer to the application

  • The stack now only responds to the QUERY FEATURE TYPE command if it is configured as an input device

  • IAR compiler warnings have been corrected


Version 1.2
2020-07-15

New Feature:

  • Actions for communication with DT8 Gears have been added

  • C++ directive has been added to libdali.h

  • Collisions on the DALI bus are reported to the application

  • Source files have been moved to new subdirectory "src" and header files to new subdirectory "inc"

  • Doxygen source files added to new subdirectory "dali_lib_documentation"

  • Sending and receiving of proprietary frames with a length of 40 - 64 bits has been implemented

  • Manufacturer-specific memory banks can now be created by the application

  • Actions for setting the gear variables powerOnLevel, systemFailureLevel, lastLightLevel, targetLevel and lastActiveLevel have been added

  • Allowing actions during a DALI bus system failure is now configurable

  • Actions for device commands READ NEXT MEMORY CELL, WRITE NEXT MEMORY CELL, QUERY MISSING SHORT ADDRESS, QUERY CONTENT DTR0, QUERY CONTENT DTR1, QUERY CONTENT DTR2 and QUERY QUIESCENT MODE have been added

  • Actions for communication with light sensor and occupancy sensor devices have been added

Fix:

  • Responses to QUERY NEXT DEVICE TYPE and QUERY MISSING SHORT ADDRESS actions are now forwarded to the application

  • Responses to commands GEAR_CMD_DTR2, GEAR_CMD_QUERY_CONTENT_DTR0, GEAR_CMD_QUERY_CONTENT_DTR1 and GEAR_CMD_QUERY_CONTENT_DTR2 are now evaluated correctly.

  • Command sequences of the actions DALILIB_ACT_CTRL_GEAR_WRITE_MEMORY_CELL, DALILIB_ACT_CTRL_GEAR_LED_SELECT_DIMMING_CURVE and DALILIB_ACT_CTRL_GEAR_LED_SET_FAST_FADE_TIME were faulty and have been adapted to the DALI standard.

  • Warnings generated by -Wextra compiler flag have been fixed

  • Received events with schema "Device/Instance" are now correctly forwarded to the application