lib_xua change log
==================

5.3.0
-----

  * ADDED: Optional defines and handler code to allow insertion of user
    endpoints. This allows building composite USB Audio devices such as CDC.
    Check the `Other defines` section in the documents for more details.
  * ADDED:     Optional ``XUA_USER_FUNCTION_CALL_PRE_BUFFER`` define to allow
    running of user code before XUA buffer starts in the ``main()`` function.
    This may be used to initialise global channel ends or interfaces.
  * ADDED:    Support for generating fixed clock using the application PLL for
    xcore.ai targets
  * CHANGED:   ``FB_USE_REF_CLOCK`` renamed to ``XUA_FB_USE_REF_CLOCK`` and
    added ability to define rational clock ratio between master and ref clock
  * CHANGED:   Use lib_mic_array's new default API
  * CHANGED:   Migrated Windows USB DFU host application from 32 bit to 64 bit
  * FIXED:     Unused variable warnings when XUA_USB_EN = 0

  * Changes to dependencies:

    - lib_locks: 2.3.2 -> 2.4.0

    - lib_mic_array: 5.5.0 -> 6.0.0

    - lib_sw_pll: 2.4.0 -> 2.4.1

    - lib_xassert: 4.3.1 -> 4.3.2

    - lib_xud: 4.0.0 -> 4.0.1

5.2.0
-----

  * ADDED:     Support for optional include header ``xua_conf_tasks.h`` with the
    same functionality as ``xua_conf_cores.h`` i.e. to allow insertion of tasks
    into the ``main()`` function (``xua_conf_cores.h`` to be deprecated in a
    future release)
  * ADDED:     Support for define ``USER_MAIN_TASKS`` with the same
    functionality as ``USER_MAIN_CORES`` i.e. to allow insertion of tasks into
    the `main()` function (``USER_MAIN_CORES`` to be deprecated in a future
    release)
  * ADDED:     Support for high bandwidth ISO endpoints
  * ADDED:     Delay in ``AudioHub()`` to allow time for the audio PLL to lock
    and master clock stabilise
  * ADDED:     Change to reset `Software` PLL DCO setting to midpoint when
    there's a change in clock source
  * ADDED:     Where possible ``_TILE_NUM`` defines are now derived from
    ``PORT_`` defines in the application XN file
  * ADDED:    Check for I2S timing violation. Can be enabled by running cmake
    with -DENABLE_I2S_TIMING_CHECK=ON
  * CHANGED:   When `Software PLL` is enabled, report external clock as invalid
    when the USB sampling frequency doesn't match the digital input sampling
    frequency
  * CHANGED:   ``AUDIO_IO_TILE`` renamed to ``XUA_AUDIO_IO_TILE_NUM``
  * CHANGED:   ``XUA_TILE`` renamed to ``XUA_XUD_TILE_NUM``
  * CHANGED:   ``MIDI_TILE`` renamed to ``XUA_MIDI_TILE_NUM``
  * CHANGED:   ``SPDIF_TX_TILE`` renamed to ``XUA_SPDIF_TX_TILE_NUM``
  * CHANGED:   ``PDM_TILE`` renamed to ``XUA_MIC_PDM_TILE_NUM``
  * CHANGED:   ``PLL_REF_TILE`` renamed to ``XUA_PLL_REF_TILE_NUM``
  * CHANGED:   Supported optional configuration header files
    ``user_main_cores.h``, ``user_main_declarations.h`` and
    ``user_main_globals.h`` should now be named ``xua_conf_cores.h``,
    ``xua_conf_declarations.h`` and ``xua_conf_globals.h`` respectively
  * CHANGED:   Renamed AN00246 example to app_xua
  * CHANGED:   Mixer optimisation to do output volume control after mixing,
    instead of in GiveSamplesToDevice()
  * CHANGED:   Mixer optimisation to speed up sample exchange between mixer and
    audiohub, to fix I2S timing violation causing intermittent test failures
  * CHANGED:  Channel protocol between audiohub and SDFIF TX extended to
    communicate SPDIF audio sample length
  * FIXED:     Issue with master clock not present for digital receive (only)
    configs when using the `Software PLL`
  * FIXED:     Reset `Software PLL` phase/frequency detector when digital clock
    becomes invalid to prevent incorrect error input to sigma-delta modulator
  * FIXED:     Incorrect values of bLockDelayUnits and bLockDelay in async mode
  * REMOVED:   Application notes AN00247 and AN00248 from examples folder.
    Instead see https://www.xmos.com/application-notes/

  * Changes to dependencies:

    - lib_locks: 2.3.1 -> 2.3.2

    - lib_logging: 3.3.1 -> 3.4.0

    - lib_spdif: 6.2.1 -> 7.0.0

    - lib_xud: 3.0.1 -> 4.0.0

5.1.0
-----

  * ADDED:     Enumeration of vendor specific control interface as WinUSB
    compatible on Windows. Can be disabled by defining
    ENUMERATE_CONTROL_INTF_AS_WINUSB to 0
  * ADDED:     Optional user_main_declarations.h and user_main_cores.h headers
    to allow insertion of declarations and tasks for extending main()
  * ADDED:     XUA_LOW_POWER_NON_STREAMING define allowing low-power state when
    not streaming which stops I2S and provides additional user callback
  * ADDED:     Calls to user functions XUA_UserSuspendPowerDown() and
    XUA_UserResumePowerUp() to allow user code to run when the device is
    suspended or resumed (default implementations are empty)
  * ADDED:     Documentation of XUA_CHAN_BUFF_CTRL
  * CHANGED:   Suspend/resume notification from lib_xud (added in v3.0.0) used
    rather than overriding XUD_UserSuspend() and XUD_UserResume()
  * CHANGED:   Made `p_off_mclk` nullable for XUA_Buffer; this port is now only
    required either in configurations using Synchronous mode and using the
    application PLL to clock the USB buffers, or for configurations using
    Asynchronous mode and using the reference clock to clock the USB buffers
  * CHANGED:   Renamed USB_CONTROL_DESCS define to XUA_USB_CONTROL_DESCS
  * CHANGED:   AN00248 updated so that it uses lib_xua main() instead of custom
    main()
  * CHANGED:   UserAudioStreamStart and UserAudioStreamStop replaced by single
    UserAudioStreamState(in, out) API with arguments indicating whether input or
    output streams are active
  * CHANGED:   Functionality associated with AUDIO_CLASS_FALLBACK and
    FULL_SPEED_AUDIO_2 moved to XUA_AUDIO_CLASS_FS and XUA_AUDIO_CLASS_HS
  * CHANGED:   Simplification of USB string table handling
  * CHANGED:   lib_xud's USB_TILE define derived from lib_xua's XUD_TILE define
    (using xud_conf.h)
  * FIXED:     wMaxPacketSize for MIDI bulk IN and OUT endpoints incorrectly set
    when running at full-speed
  * FIXED:     `p_mclk_in` and `clk_audio_bclk` not correctly nullable when I2S
    not in use.
  * FIXED:     Incorrect `clk_audio_mclk` nullability for XUA_AudioHub; this
    clock block is only required for configurations with ADAT or SPDIF TX
  * FIXED:     Compilation error with NUM_USB_CHAN_IN=0, NUM_USB_CHAN_OUT=0 and
    HID_CONTROLS=1
  * FIXED:     HID functionality with AUDIO_CLASS = 1
  * FIXED:     Alignment issue with HID_Descriptor memory that was causing
    USB_GET_DESCRIPTOR for the HID interface to fail leading to failing USB3CV
    HID Descriptor test
  * FIXED:     Device enumeration error when both XUA_DFU_EN and
    XUA_USB_CONTROL_DESCS enabled
  * FIXED:     UAC2 descriptors during full-speed operation
  * FIXED:     Compiler error when PDM mics used and EXCLUDE_USB_AUDIO_MAIN is
    not defined.
  * FIXED:     Guard on epTypeTableOut[] declaration where incorrect EP type for
    audio out endpoint occurred if additional custom endpoints are added
  * FIXED:     String descriptors not updated when using runtime API (#406)
  * FIXED:     Strings relating to items such as Clock Selector, Clock, DFU, etc
    not updated when using run time API function setVendorString()
  * REMOVED:   Support for iAP EA Native Transport endpoints

  * Changes to dependencies:

    - lib_sw_pll: 2.3.1 -> 2.4.0

    - lib_xud: 2.4.1 -> 3.0.1

5.0.0
-----

  * ADDED:     Support for DFU 1.1 DFU_DETACH with bitWillDetach set to 1
  * ADDED:     Enumerate with the DFU interface as WINUSB compatible. This is
    done by updating the bcdUSB version to 2.01 and providing the BOS and
    MSOS2.0 descriptors listing WINUSB compatibility at enumeration
  * ADDED:     Support for XMOS_DFU_REVERTFACTORY arriving as a
    USB_BMREQ_H2D_VENDOR_INT request to work with the latest Thesycon DFU driver
    on Windows
  * ADDED:     Support for building the xmosdfu application on MacOS arm64
  * ADDED:     MIDI support with UAC1.0
  * ADDED:     DFU support with UAC1.0
  * CHANGED:   By default, enumerate with iSerialNumber set to None(0) in the
    device descriptor
  * CHANGED:   xmosdfu app to use DFU_DETACH
  * CHANGED:   xmosdfu app to send XMOS_DFU_REVERTFACTORY as bmRequestType.Type
    = Vendor
  * CHANGED:   xmosdfu app command line for specifying runtime and DFU mode PIDs
  * CHANGED:   Limit HS_STREAM_FORMAT_OUTPUT_1/2/3_MAXPACKETSIZE to 1024 bytes
    to fix bcdUSB version 2.01 USB device supporting a sampling rate of 192KHz
    not enumerating on Windows
  * CHANGED:   Added default value (1) for XUA_QUAD_SPI_FLASH
  * CHANGED:   Default value of FLASH_MAX_UPGRADE_SIZE to 512 KB
  * CHANGED:   Build examples using XCommon CMake instead of XCommon
  * CHANGED:   AN00248 now targets XK-EVK-XU316 and uses mic_array version 5
    (new API)
  * CHANGED:   Examples use lib_board_support for XK-AUDIO-316-MC-AB support
    code
  * CHANGED:   Master clock port no longer used if not required, for example
    when using I2S slave with USB disabled
  * FIXED:     Build issue when XUA_NUM_PDM_MICS > 0
  * FIXED:     baInterfaceNr field in MIDI Class-specific AC Interface
    Descriptor to specify the correct MIDI streaming interface number
  * REMOVED:   Support for PDM mics for xcore-200 targets

  * Changes to dependencies:

    - lib_adat: 1.2.0 -> 2.0.1

    - lib_dsp: Removed dependency

    - lib_locks: 2.2.0 -> 2.3.1

    - lib_logging: 3.2.0 -> 3.3.1

    - lib_mic_array: 4.6.0 -> 5.5.0

    - lib_spdif: 6.1.1 -> 6.2.1

    - lib_sw_pll: 2.2.0 -> 2.3.1

    - lib_xassert: 4.2.0 -> 4.3.1

    - lib_xcore_math: Added dependency 2.4.0

    - lib_xud: 2.3.2 -> 2.4.1

4.2.0
-----

  * CHANGED:   lsats instruction used for saturation in the mixer
  * CHANGED:   Mixer task communication scheme simplified, aiding code reuse &
    performance
  * CHANGED:   Audio Class Control Interface no longer presented in descriptors
    if NUM_USB_CHAN_IN and NUM_USB_CHAN_OUT are both zero
  * CHANGED:   Buffering sub-system no longer spawns if NUM_USB_CHAN_IN and
    NUM_USB_CHAN_OUT are both zero
  * CHANGED:   Communication of commands between tasks now uniformly uses
    control tokens. Potentially making mix & match of components more tractable
    in the future

  * Changes to dependencies:

    - lib_spdif: 6.1.0 -> 6.1.1

    - lib_xud: 2.3.1 -> 2.3.2

4.1.0
-----

  * ADDED:     MIDI unit and sub-system tests
  * CHANGED:   Only the minimum number of ADAT input formats are enabled based
    on the supported sample rates
  * CHANGED:   Enabling ADAT tx enables different channel count interface alts,
    based on sample rate
  * CHANGED:   Input audio buffer size and the exit condition underflow modified
    to to fix buffer underflow in some configurations
  * CHANGED:   CT_END token based handshake in MIDI channels transactions,
    reducing opportuninity for deadlock
  * FIXED:     Device fails to enumerate when ADAT and S/PDIF transmit are
    enabled
  * FIXED:     Update software PLL at the correct rate for ADAT S/MUX
  * FIXED:     Incorrect internal input EP count for input only devices
  * FIXED:     Samples transferred to ADAT tx too frequently in TDM mode
  * FIXED:     S/MUX not initialised to a value based on DEFAULT_FREQ in
    clockgen
  * FIXED:     Trap when moving to DSD mode on XS3A based devices

  * Changes to dependencies:

    - lib_adat: 1.0.1 -> 1.2.0

    - lib_locks: 2.1.0 -> 2.2.0

    - lib_logging: 3.1.1 -> 3.2.0

    - lib_sw_pll: 2.1.0 -> 2.2.0

    - lib_xassert: 4.1.0 -> 4.2.0

4.0.0
-----

  * ADDED:     Support for XCommon CMake build system
  * FIXED:     Output volume control not enabled by default when MIXER disabled
  * FIXED:     Full 32bit result of volume processing not calculated when
    required
  * FIXED:     Input stream sending an erroneous zero-length packet when exiting
    underflow state
  * FIXED      Build failures when XUA_USB_EN = 0
  * FIXED:     Clock configuration issues when ADAT and S/PDIF receive are
    enabled (#352)
  * FIXED:     Repeated old S/PDIF and ADAT samples when entering underflow
    state
  * CHANGED:   QUAD_SPI_FLASH replaced by XUA_QUAD_SPI_FLASH (default: 1)
  * CHANGED:   UserBufferManagementInit() now takes a sample rate parameter
  * CHANGED:   xcore.ai targets use sigma-delta software PLL for clock recovery
    of digital Rx streams and synchronous USB audio by default
  * CHANGED:   Windows host mixer control application now requires driver GUID
    option

  * Changes to dependencies:

    - lib_dsp: 6.2.1 -> 6.3.0

    - lib_mic_array: 4.5.0 -> 4.6.0

    - lib_spdif: 5.0.1 -> 6.1.0

    - lib_sw_pll: Added dependency 2.1.0

    - lib_xud: 2.2.3 -> 2.3.1

3.5.1
-----

  * FIXED:     Respect I2S_CHANS_PER_FRAME when calculating bit-clock rates

  * Changes to dependencies:

    - lib_spdif: 5.0.0 -> 5.0.1

3.5.0
-----

  * ADDED:     Configurable word-length for I2S/TDM via XUA_I2S_N_BITS
  * ADDED:     Support for statically defined custom HID descriptor
  * CHANGED:   Rearranged main() such that adding custom code that uses lib_xud
    is possible
  * CHANGED:   bNumConfigurations changed from 2 to 1, removing a work-around to
    stop old Windows versions loading the composite driver
  * FIXED:     Memory corruption due to erroneous initialisation of mixer
    weights when not in use (#152)
  * FIXED:     UserHostActive() not being called as expected (#326)
  * FIXED:     Exception when entering DSD mode (#327)

  * Changes to dependencies:

    - lib_spdif: 4.2.1 -> 5.0.0

    - lib_xud: 2.2.2 -> 2.2.3

3.4.0
-----

  * ADDED:     Unit tests for mixer functionality
  * ADDED:     Host mixer control applications (for Win/macOS)
  * CHANGED:   Small tidies to mixer implementation
  * CHANGED:   Improved mixer control channel communication protocol to avoid
    deadlock situations
  * CHANGED:   By default, output volume processing occurs in mixer task, if
    present. Previously occurred in decouple task
  * CHANGED:   Some optimisations in sample transfer from decouple task
  * FIXED:     Exception on startup when USB input disabled
  * FIXED:     Full 32bit volume processing only applied when required
  * FIXED:     Setting OUT_VOLUME_AFTER_MIX to zero now has the expected effect

  * Changes to dependencies:

    - lib_xud: 2.2.1 -> 2.2.2

3.3.1
-----

  * CHANGED:  Documentation updates

  * Changes to dependencies:

    - lib_spdif: 4.1.0 -> 4.2.1

3.3.0
-----

  * CHANGED:   Define ADAT_RX renamed to XUA_ADAT_RX_EN
  * CHANGED:   Define ADAT_TX renamed to XUA_ADAT_TX_EN
  * CHANGED:   Define SPDIF_RX renamed to XUA_SPDIF_RX_EN
  * CHANGED:   Define SELF_POWERED changed to XUA_POWERMODE and associated
    defines
  * CHANGED:   Drive strength of I2S clock lines upped to 8mA on xCORE.ai
  * CHANGED:   ADC datalines sampled on falling edge of clock in TDM mode
  * CHANGED:   Improved startup behaviour of TDM clocks
  * FIXED:     Intermittent underflow at MAX_FREQ on input stream start due to
    insufficient packet buffering
  * FIXED:     Decouple buffer accounting to avoid corruption of samples

  * Changes to dependencies:

    - lib_adat: Added dependency 1.0.1

    - lib_xud: 2.1.0 -> 2.2.1

3.2.0
-----

  * CHANGED:   Updated tests to use lib_locks (was legacy module_locks)
  * CHANGED:   Exclude HID Report functions unless the HID feature is enabled
  * CHANGED:   Explicit feedback EP enabled by default (see
    UAC_FORCE_FEEDBACK_EP)
  * FIXED:     Incorrect conditional compilation of HID report code
  * FIXED:     Input/output descriptors written when input/output not enabled.
    (Audio class 1.0 mode using XUA_USB_DESCRIPTOR_OVERWRITE_RATE_RES)

  * Changes to dependencies:

    - lib_dsp: 5.0.0 -> 6.2.1

    - lib_locks: Added dependency 2.1.0

    - lib_logging: 3.0.0 -> 3.1.1

    - lib_mic_array: 4.0.0 -> 4.5.0

    - lib_spdif: 4.0.0 -> 4.1.0

    - lib_xassert: 4.0.0 -> 4.1.0

    - lib_xud: 2.0.0 -> 2.1.0

3.1.0
-----

  * CHANGED:   Removed logic from HID API functions allowing a Report ID of 0 to
    be used as "all/any" Report

3.0.0
-----

  * ADDED:     Support for HID Report IDs
  * CHANGED:   Renamed the HID API file xua_hid_report_descriptor.h to
    xua_hid_report.h
  * REMOVED:   Support for HID Reports containing controls from mixed usage
    pages

2.1.1
-----

  * CHANGED:   Setting of HID report items

2.1.0
-----

  * CHANGED:   Updated clock blocks to support lib_xud v2.0.0

  * Changes to dependencies:

    - lib_xud: 1.2.0 -> 2.0.0

2.0.0
-----

  * ADDED:     Function to get a Report item description
  * ADDED:     Support for multiple flash specs defined by DFU_FLASH_DEVICE
  * ADDED:     Nullable c_aud_ctl chan-end optimisation for fixed rate devices
  * CHANGED:   Check HID Usage Page when changing a Report item description
  * CHANGED:   HID event ID from list to bit and byte location in HID Report
  * CHANGED:   Interface to UserHIDRecordEvent()

1.3.0
-----

  * ADDED:     Build default HID Report descriptor at boot-time
  * ADDED:     Function to return length of HID Report
  * CHANGED:   Move HID descriptors to ease maintenance
  * CHANGED:   Move legacy tests to separate directory
  * CHANGED:   Replace unused GPI-specific HID event names with generic ones
  * CHANGED:   HID Report to return multiple bytes
  * CHANGED:   NO_USB conditional compilation switch with XUA_USB_EN
  * CHANGED:   Clock blocks used for BCLK and MCLK
  * CHANGED:   Arguments no longer supported by XUD_Main
  * REMOVED:   Support for XS1 based devices

1.2.0
-----

  * ADDED:     Updates for xcore.ai/XS3 compatibility
  * ADDED:     Makefile.Win32 for xmosdfu on Windows
  * CHANGED:   Use XMOS Public Licence Version 1
  * FIXED:     Bump default BCD device number to v1.2.0
  * FIXED:     xmosdfu now fails with an error when given a directory (#119)
  * FIXED:     Compilation errors related to HID code
  * FIXED:     Runtime error when using mic array interface
  * FIXED:     Automate HID Report Descriptor length in AC1 HID Descriptor

1.1.1
-----

  * CHANGED:   Pin Python package versions
  * FIXED:     Zero length input packets generated before enumeration causing
    I2S timing pushout at startup

1.1.0
-----

  * ADDED:     Ability to read or modify serial number string

1.0.1
-----

  * FIXED:     Wrong size of vendor and product strings

1.0.0
-----

  * ADDED:     UAC1 HID support with simulated Voice Command detection reported
    every 10 seconds
  * ADDED:     Support for USB HID Set Idle request
  * ADDED:     Pre-processor symbols to enable single-threaded, dual-PDM
    microphone operation
  * ADDED:     Guards to user_hid.h and xua_hid.h
  * ADDED:     UAC1 HID support for AC Stop (End Call), Volume Increment and
    Volume Decrement
  * CHANGED:   UAC1 HID to report function keys f21 through f24 as specified by
    customer
  * CHANGED:   HID interface for user to set and clear events from global
    variable to function
  * CHANGE     HID report descriptor to use generic events instead of GPI
    events, to report Key-phrase detection as AC Search, and to report end-call
    detection as AC Stop
  * ADDED:     Ability to read or modify vendor and product IDs and strings
  * ADDED:     Ability to read or modify bcdDevice
  * ADDED:     Override USB descriptor with sampling frequency and
    bit-resolution set at boot time.
  * ADDED:     Global pointer to allow external access to masterClockFreq
  * FIXED:     Descriptors for XUA_ADAPTIVE incorrectly defined for IN endpoint

  * Changes to dependencies:

    - lib_spdif: 3.1.0 -> 4.0.0

    - lib_xassert: 3.0.1 -> 4.0.0

0.2.1
-----

  * FIXED:     Fix descriptors for XUA_ADAPTIVE

  * Changes to dependencies:

    - lib_logging: 2.1.1 -> 3.0.0

    - lib_xud: 0.1.0 -> 0.2.0

0.2.0
-----

  * ADDED:     Initial library documentation
  * ADDED:     Application note AN00247: Using lib_xua with lib_spdif (transmit)
  * ADDED:     Separate callbacks for input/output audio stream start/stop
  * CHANGED:   I2S hardware resources no longer used globally and must be passed
    to XUA_AudioHub()
  * CHANGED:   XUA_AudioHub() no longer pars S/PDIF transmitter task
  * CHANGED:   Moved to lib_spdif (from module_spdif_tx & module_spdif_rx)
  * CHANGED:   Define NUM_PDM_MICS renamed to XUA_NUM_PDM_MICS
  * CHANGED:   Define NO_USB renamed to XUA_USB_EN
  * CHANGED:   Build files updated to support new "xcommon" behaviour in xwaf.
  * FIXED:     wChannelConfig in UAC1 descriptor set according to output channel
    count
  * FIXED:     Indexing of ADAT channel strings (#18059)
  * FIXED:     Rebooting device fails when PLL config "not reset" bit is set

  * Changes to dependencies:

    - lib_dsp: Added dependency 5.0.0

    - lib_mic_array: Added dependency 4.0.0

    - lib_spdif: Added dependency 3.1.0

    - lib_xassert: Added dependency 3.0.1

0.1.2
-----

  * ADDED:     Application note AN00246: Simple USB Audio Device using lib_xua
  * CHANGED:   xmosdfu emits warning if empty image read via upload
  * CHANGED:   Simplified mclk port sharing - no longer uses unsafe pointer
  * FIXED:     Runtime exception issues when incorrect feedback calculated
    (introduced in sc_usb_audio 6.13)
  * FIXED:     Output sample counter reset on stream start. Caused playback
    issues on some Linux based hosts

0.1.1
-----

  * FIXED:   Configurations where I2S_CHANS_DAC and I2S_CHANS_ADC are both 0 now
    build
  * FIXED:   Deadlock in mixer when MAX_MIX_COUNT > 0 for larger channel counts

  * Changes to dependencies:

    - lib_logging: Added dependency 2.1.1

    - lib_xud: Added dependency 0.1.0

0.1.0
-----

  * ADDED:     FB_USE_REF_CLOCK to allow feedback generation from xCORE internal
    reference
  * ADDED:     Linux Makefile for xmosdfu host application
  * ADDED:     Raspberry Pi Makefile for xmosdfu host application
  * ADDED:     Documentation of PID argument to xmosdfu
  * ADDED:     Optional build time microphone delay line (MIC_BUFFER_DEPTH)
  * CHANGED:   Removal of audManage_if, users should define their own interfaces
    as required
  * CHANGED:   Vendor specific control interface in UAC1 descriptor now has a
    string descriptor so it shows up with a descriptive name in Windows Device
    Manager
  * CHANGED:   DFU_BCD_DEVICE removed (now uses BCD_DEVICE)
  * CHANGED:   Renaming in descriptors.h to avoid clashes with application
  * CHANGED:   Make device reboot function no-argument (was one channel end)
  * FIXED:     FIR gain compensation for PDM mics set incorrectly for divide of
    8
  * FIXED:     Incorrect xmosdfu DYLD path in test script code
  * FIXED:   xmosdfu cannot find XMOS device on modern MacBook Pro (#17897)
  * FIXED:   Issue when feedback is initially incorrect when two SOF's are not
    yet received
  * FIXED:   AUDIO_TILE and PDM_TILE may now share the same value/tile
  * FIXED:   Cope with out of order interface numbers in xmosdfu
  * FIXED:   DSD playback not functional on xCORE-200 (introduced in
    sc_usb_audio 6.14)
  * FIXED:   Improvements made to clock sync code in TDM slave mode


Legacy release history
----------------------

(Note: Forked from sc_usb_audio at this point)

7.4.1
-----

    - FIXED:   Exception due to null chanend when using NO_USB

7.4.0
-----

    - FIXED:   PID_DFU now based on AUDIO_CLASS. This potentially caused issues
      with UAC1 DFU


7.3.0
-----

    - CHANGED:    Example OSX DFU host app updated to now take PID as runtime
      argument. This enabled multiple XMOS devices to be attached to the host
      during DFU process

7.2.0
-----

    - ADDED:      DFU to UAC1 descriptors (guarded by DFU and FORCE_UAC1_DFU)
    - FIXED:      Removed 'reinterpretation to type of larger alignment' warnings
    - FIXED:      DFU flash code run on tile[0] even if XUD_TILE and AUDIO_IO_TILE are not 0

7.1.0
-----

    - ADDED:      UserBufferManagementInit() to reset any state required in UserBufferManagement()
    - ADDED:      I2S output up-sampling (enabled when AUD_TO_USB_RATIO is > 1)
    - ADDED:      PDM Mic decimator output rate can now be controlled independently (via AUD_TO_MICS_RATIO)
    - CHANGED:    Rename I2S input down-sampling (enabled when AUD_TO_USB_RATIO is > 1, rather than via I2S_DOWNSAMPLE_FACTOR)
    - FIXED:      Crosstalk between input channels when I2S input down-sampling is enabled
    - FIXED:      Mic decimation data tables properly sized when mic sample-rate < USB audio sample-rate

7.0.1
-----

    - FIXED:      PDM microphone decimation issue at some sample rates caused by integration

7.0.0
------

    - ADDED:      I2S down-sampling (I2S_DOWNSAMPLE_FACTOR)
    - ADDED:      I2S resynchronisation when in slave mode (CODEC_MASTER=1)
    - CHANGED:    Various memory optimisations when MAX_FREQ = MIN_FREQ
    - CHANGED:    Memory optimisations in audio buffering
    - CHANGED:    Various memory optimisations in UAC1 mode
    - CHANGED:    user_pdm_process() API change
    - CHANGED:    PDM Mic decimator table now related to MIN_FREQ (memory optimisation)
    - FIXED:      Audio request interrupt handler properly eliminated

6.30.0
------

    - FIXED:   Number of PDM microphone channels configured now based on NUM_PDM_MICS define
    (previously hard-coded)
    - FIXED:   PDM microphone clock divide now based MCLK defines (previously hard-coded)
    - CHANGED: Second microphone decimation core only run if NUM_PDM_MICS > 4

6.20.0
------

    - FIXED:   Intra-frame sample delays of 1/2 samples on input streaming in TDM mode
    - FIXED:   Build issue with NUM_USB_CHAN_OUT set to 0 and MIXER enabled
    - FIXED:   SPDIF_TX_INDEX not defined build warning only emitted when SPDIF_TX defined
    - FIXED:   Failure to enter DFU mode when configured without input volume control

6.19.0
------

    - FIXED:   SPDIF_TX_INDEX not defined build warning only emitted when SPDIF_TX defined
    - FIXED:   Failure to enter DFU mode when configured without input volume control

6.18.1
------

    - ADDED:   Vendor Specific control interface added to UAC1 descriptors to allow control of
                XVSM params from Windows (via lib_usb)

6.18.0
------

    - ADDED:   Call to VendorRequests() and VendorRequests_Init() to Endpoint 0
    - ADDED:   VENDOR_REQUESTS_PARAMS define to allow for custom parameters to VendorRequest calls
    - FIXED:   FIR gain compensation set appropriately in lib_mic_array usage
    - CHANGED: i_dsp interface renamed i_audManage

6.16.0
------

    - ADDED:      Call to UserBufferManagement()
    - ADDED:      PDM_MIC_INDEX in devicedefines.h and usage
    - CHANGED:    pdm_buffer() task now combinable
    - CHANGED:    Audio I/O task now takes i_dsp interface as a parameter
    - CHANGED:    Removed built-in support for A/U series internal ADC
    - CHANGED:    User PDM Microphone processing now uses an interface (previously function call)

6.15.2
------

    - FIXED:   interrupt.h (used in audio buffering) now compatible with xCORE-200 ABI

6.15.1
------

    - FIXED:   DAC data mis-alignment issue in TDM/I2S slave mode
    - CHANGED:    Updates to support API changes in lib_mic_array version 2.0

6.15.0
------

    - FIXED:   UAC 1.0 descriptors now support multi-channel volume control (previously were
                  hard-coded as stereo)
    - CHANGED:    Removed 32kHz sample-rate support when PDM microphones enabled (lib_mic_array
                  currently does not support non-integer decimation factors)

6.14.0
------

    - ADDED:      Support for for master-clock/sample-rate divides that are not a power of 2
                  (i.e. 32kHz from 24.567MHz)
    - ADDED:      Extended available sample-rate/master-clock ratios. Previous restriction was <=
                  512x (i.e. could not support 1024x and above e.g. 49.152MHz MCLK for Sample Rates
                  below 96kHz) (#13893)
    - ADDED:      Support for various "low" sample rates (i.e. < 44100) into UAC 2.0 sample rate
                  list and UAC 1.0 descriptors
    - ADDED:      Support for the use and integration of PDM microphones (including PDM to PCM
                  conversion) via lib_mic_array
    - FIXED:   MIDI data not accepted after "sleep" in OSX 10.11 (El Capitan) - related to sc_xud
                  issue #17092
    - CHANGED:    Asynchronous feedback system re-implemented to allow for the first two ADDED
                  changelog items
    - CHANGED:    Hardware divider used to generate bit-clock from master clock (xCORE-200 only).
                  Allows easy support for greater number of master-clock to sample-rate ratios.
    - CHANGED:    module_queue no longer uses any assert module/lib

6.13.0
------

    - ADDED:      Device now uses implicit feedback when input stream is available (previously explicit
                  feedback pipe always used). This saves chanend/EP resources and means less processing
                  burden for the host. Previous behaviour available by enabling UAC_FORCE_FEEDBACK_EP
    - FIXED:   Exception when SPDIF_TX and ADAT_TX both enabled due to clock-block being configured
                  after already started. Caused by SPDIF_TX define check typo
    - FIXED:   DFU flag address changed to properly conform to memory address range allocated to
                  apps by tools
    - FIXED:   Build failure when DFU disabled
    - FIXED:   Build issue when I2S_CHANS_ADC/DAC set to 0 and CODEC_MASTER enabled
    - FIXED:   Typo in MCLK_441 checking for MIN_FREQ define
    - CHANGED:    Mixer and non-mixer channel comms scheme (decouple <-> audio path) now identical
    - CHANGED:    Input stream buffering modified such that during overflow older samples are removed
                  rather than ignoring most recent samples. Removes any chance of stale input packets
                  being sent to host
    - CHANGED:    module_queue (in sc_usb_audio) now uses lib_xassert rather than module_xassert

6.12.6
------

    - FIXED:   Build error when DFU is disabled
    - FIXED:   Build error when I2S_CHANS_ADC or I2S_CHANS_DAC set to 0 and CODEC_MASTER enabled

6.12.5
------

    - FIXED:   Stream issue when NUM_USB_CHAN_IN < I2S_CHANS_ADC

6.12.4
------

    - FIXED:   DFU fail when DSD enabled and USB library not running on tile[0]

6.12.3
------

    - FIXED:   Method for storing persistent state over a DFU reboot modified to improve resilience
                  against code-base and tools changes

6.12.2
------

    - FIXED:   Reboot code (used for DFU) failure in tools versions > 14.0.2 (xCORE-200 only)
    - FIXED:   Run-time exception in mixer when MAX_MIX_COUNT > 0 (xCORE-200 only)
    - FIXED:   MAX_MIX_COUNT checked properly for mix strings in string table
    - CHANGED:    DFU code re-written to use an XC interface. The flash-part may now be connected
                  to a separate tile to the tile running USB code
    - CHANGED:    DFU code can now use quad-SPI flash
    - CHANGED:    Example xmos_dfu application now uses a list of PIDs to allow adding PIDs easier.
                  --listdevices command also added.
    - CHANGED:    I2S_CHANS_PER_FRAME and I2S_WIRES_xxx defines tidied

6.12.1
------

    - FIXED:   Fixes to TDM input timing/sample-alignment when BCLK=MCLK
    - FIXED:   Various minor fixes to allow ADAT_RX to run on xCORE 200 MC AUDIO hardware
    - CHANGED:    Moved from old SPDIF define to SPDIF_TX

6.12.0
------

    - ADDED:      Checks for XUD_200_SERIES define where required
    - FIXED:   Run-time exception due to decouple interrupt not entering correct issue mode
                  (affects XCORE-200 only)
    - CHANGED:    SPDIF Tx Core may now reside on a different tile from I2S
    - CHANGED:    I2C ports now in structure to match new module_i2c_singleport/shared API.

  * Changes to dependencies:

    - sc_util: 1.0.4rc0 -> 1.0.5alpha0

      + xCORE-200 Compatiblity fixes to module_locks

6.11.3
------

    - FIXED:  (Major) Streaming issue when mixer not enabled (introduced in 6.11.2)

6.11.2
------

    - FIXED:   (Major) Enumeration issue when MAX_MIX_COUNT > 0 only. Introduced in mixer
                  optimisations in 6.11.0. Only affects designs using mixer functionality.
    - FIXED:   (Normal) Audio buffering request system modified such that the mixer output is
                  not silent when in underflow case (i.e. host output stream not active) This issue was
                  introduced with the addition of DSD functionality and only affects designs using
                  mixer functionality.
    - FIXED:   (Minor) Potential build issue due to duplicate labels in inline asm in
                  set_interrupt_handler macro
    - FIXED:   (Minor) BCD_DEVICE define in devicedefines.h now guarded by ifndef (caused issues
                  with DFU test build configs.
    - FIXED:   (Minor) String descriptor for Clock Selector unit incorrectly reported
    - FIXED:   (Minor) BCD_DEVICE in devicedefines.h now guarded by #ifndef (Caused issues with
                  default DFU test build configs.
    - CHANGED:    HID report descriptor defines added to shared user_hid.h
    - CHANGED:    Now uses module_adat_rx from sc_adat (local module_usb_audio_adat removed)

6.11.1
------

    - ADDED:      ADAT transmit functionality, including SMUX. See ADAT_TX and ADAT_TX_INDEX.
    - FIXED:   (Normal) Build issue with CODEC_MASTER (xCore is I2S slave) enabled
    - FIXED:   (Minor) Channel ordering issue in when TDM and CODEC_MASTER mode enabled
    - FIXED:   (Normal) DFU fails when SPDIF_RX enabled due to clock block being shared between SPDIF
                  core and FlashLib

6.11.0
------

    - ADDED:      Basic TDM I2S functionality added. See I2S_CHANS_PER_FRAME and I2S_MODE_TDM
    - CHANGED:    Various optimisations in 'mixer' core to improve performance for higher
                  channel counts including the use of XC unsafe pointers instead of inline ASM
    - CHANGED:    Mixer mapping disabled when MAX_MIX_COUNT is 0 since this is wasted processing.
    - CHANGED:    Descriptor changes to allow for channel input/output channel count up to 32
                  (previous limit was 18)

6.10.0
------

    - CHANGED:    Endpoint management for iAP EA Native Transport now merged into buffer() core.
                  Previously was separate core (as added in 6.8.0).
    - CHANGED:    Minor optimisation to I2S port code for inputs from ADC

6.9.0
-----

    - ADDED:      ADAT S-MUX II functionality (i.e. 2 channels at 192kHz) - Previously only S-MUX
                  supported (4 channels at 96kHz).
    - ADDED:      Explicit build warnings if sample rate/depth & channel combination exceeds
                  available USB bus bandwidth.
    - FIXED:   (Major) Reinstated ADAT input functionality, including descriptors and clock
                  generation/control and stream configuration defines/tables.
    - FIXED:   (Major) S/PDIF/ADAT sample transfer code in audio() (from ClockGen()) moved to
                  aid timing.
    - CHANGED:    Modifying mix map now only affects specified mix, previous was applied to all
                  mixes. CS_XU_MIXSEL control selector now takes values 0 to MAX_MIX_COUNT + 1
                  (with 0 affecting all mixes).
    - CHANGED:    Channel c_dig_rx is no longer nullable, assists with timing due to removal of
                  null checks inserted by compiler.
    - CHANGED:    ADAT SMUX selection now based on device sample frequency rather than selected
                  stream format - Endpoint 0 now configures clockgen() on a sample-rate change
                  rather than stream start.

6.8.0
-----

    - ADDED:      Evaluation support for iAP EA Native Transport endpoints
    - FIXED:   (Minor) Reverted change in 6.5.1 release where sample rate listing in Audio Class
                  1.0 descriptors was trimmed (previously 4 rates were always reported). This change
                  appears to highlight a Windows (only) enumeration issue with the Input & Output
                  configs
    - FIXED:   (Major) Mixer functionality re-instated, including descriptors and various required
                  updates compatibility with 13 tools
    - FIXED:   (Major) Endpoint 0 was requesting an out of bounds channel whilst requesting level data
    - FIXED:   (Major) Fast mix code not operates correctly in 13 tools, assembler inserting long jmp
                  instructions
    - FIXED:   (Minor) LED level meter code now compatible with 13 tools (shared mem access)
    - FIXED:    (Minor) Ordering of level data from the device now matches channel ordering into
                  mixer (previously the device input data and the stream from host were swapped)
    - CHANGED:    Level meter buffer naming now resemble functionality

Legacy release history
----------------------

Please see changelog in sw_usb_audio for changes prior to 6.8.0 release.

