cifX-Toolkit Version History:
=============================

  V2.8.0.1
-----------------
  - Added missng ulOption parameter in SerialDPM example functions (Read_NXxx / Write_NXxx)

  V2.8.0.0
-----------------
  - Added chip-type verfication for firmware download
  - Added new compile time option CIFX_TOOLKIT_USE_CUSTOM_DRV_FUNCS
  - Added license information
  - Update HILDEF headers to version 20230403-00
  - Fixed error/rejection during NXS firmware download
  - Fixed issue which only allowed a COLDSTART when APP-CPU and IDPM was used
  - Fixed file upload for empty files (file size = 0)
  - Fixed issue regarding unaligned access to the DPM

  V2.7.3.0
-----------------
  - Added new option and functions to enable cached I/O buffer access for PLC functions
    Modified and extended OS functions:
      OS_MapUserPointer()/OS_FlushCacheMemory_ToDevice()/OS_InvalidateCacheMemory_FromDevice()
    Modified and extended USER and CIFX API functions:
      USER_GetCachedIOBufferMode() / xChannelPLCMemoryPtr()
  - Updated 2nd Stage Loader to V1.8.0.0

  V2.7.2.0
-----------------
  - Fixed xSysdeviceResetEx() to allow passing of additional flags to underlying functions

  V2.7.1.0
-----------------
  - Fixed reset parameter and flag masking, before writing them to the ulSystemControl value in the DPM
  - Update HilscherDefinitions to version 20220112-00

  V2.7.0.0
-----------------
  - Fixed missing return of ulState packet errors in cifXReadFirmwareIdent()
  - Removed "\r\n" from trace strings
  - Fix netX51 detection during startup
  - Make CRC32 function public
  - Unify OS_* functions in API header and supplied template implementation
  - Change prototype of OS_Time() to support 64bit time values
  - Update HilscherDefinitions to version 20211110-00
  - Update cifXAPI to version 20210908-00
  - Fixed GCC compiler warnings (unaligned pointer value from packed member address of a struct or union)
  - Optimize DSR function by minimizing hardware accesses

  V2.6.0.0
-----------------
  - Changed type of bIrqNumber from uint8_t to uint32_t

  V2.5.1.0
-----------------
  - Fixed reset handling to update handshake flag state when device is in interrupt mode
  - Update HilscherDefinitions to version 20200514-01

  V2.5.0.0
-----------------
  - xDriverEnumBoards() now returns CIFX_NO_MORE_ENTRIES, if actual board count is exceeded
  - Fix CIFX_DMA_STATE_GETSTATE define in DEV_DMAState()
  
  V2.4.0.0
-----------------
  - Fixed Firmware update via xSysdeviceResetEx() if executed on APP CPU
  - Big Endian fixes including possible unexpected values when performing write
    access using xChannelControlBlock(). xChannelCommonStatusBlock() and xChannelControlBlock()
    shall only be called with offset '0' on big endian targets
  - Increase timeout during updatestart handling for jump to firmware (netX90/netX4000)
  - Simultanious access to handshake flags may lead to loss of latest Change-Of-State flags
  - Update HilscherDefinitions to version 20191108-00
  - Update cifX API headers to version 20191108-00
  - Updated 2nd Stage Loader to V1.6.0.1

  V2.3.0.0
-----------------
  - Update PCI IDs for CIFX M2 devices

  V2.2.0.0
-----------------
  - Detection of newer netX90 chip revisions fails
  - xSysdeviceFindFirstFile() does not check for last packet or packet length=0
  - Missing HWIF function around mailbox counter access in xChannelRegisterNotification()
  - SerialDPM initialization fails if the first detected interface is SERDPM_UNKNOWN

 V2.1.0.0
-----------------
  - Add DEV function for ResetEx modes
  - Prevent DPM access during resets for netX4000 based PCI devices

 V2.0.1.0
-----------------
  - Using hilscher standard definition files
  - netX90 / netX4000 device support added (flash based devices)
  - Support download of netX90/netX4000 firmware (update) files
  - Rework chip type detection
  - Add new API function xSysdeviceResetEx()

 V1.6.0.0
-----------------
  - Fixed ulCopySize calculation in DEV_CheckForDownload()

 V1.5.0.0
-----------------
  - Updated 2nd Stage Loader to V1.6.0.0
  - Fixed delete of existing files in all channels if a new firmware is loaded (DEV_RemoveChannelFiles() was only called with channel 0)
  - Fixed DEV_RemoveChannelFiles() "Find First File" iteration does not reset the internal data on each new iteration
  - Fixed LINT warning in toolkit c modules
  - Fixed USER_xxx function prototypes in cifXToolkit.h to match implementation
  - Extended template file TKitUser_Custom.c by missing USER_GetDMAMode() function
  - Fixed warnings when compiling the toolkit with gcc compiler
  - Added "const" keyword to CrC32Table[] definition in cifXDownload.c, so the table can be stored in .rodata when used in an emdedded system
  - Changed SPM / HWIF example implementation to use the DEVICEINSTANCE pointer instead of the pvOSDependent pointer
  - Added OS_SpiInit() OS_SPILock() and OS_SPIUnlock() functions to SPM function interface
  - Added locking mechanism for SPM read/write functions to prevent overlapped fucntion calls
  - Changed the default firmware startup timeout definition CIFX_TO_FIRMWARE_START from 10 to 20 seconds
  - Improved return value checking (e.g. malloc) during hardware initiaization in cifXInit()
  - xChannelBusState() / CIFX_BUS_STATE_GETSTATE now updates the COS flags to be able to call the function in a loop and to get an updated state
  - Fixed internal check handle functions CheckSysdeviceHandle()/CheckChannelHandle() to be usable also during system start
  - Added more error descriptions for xDriverErrorDescripton()
  - Added additional check for system channel READY before accessing it

V1.4.0.0
-----------------
 - Improved ISR handler by reading only necessary handshake registers on PCI cards
 - Fixed LINT warning in DEV_DoSystemStart(), multiple definition of ptSysChannel
 - Fixed LINT warning by adding type casts
 - Fixed xSysdeviceInfo()/CIFX_INFO_CMD_SYSTEM_CHANNEL_BLOCK for use with SPM, removed access via the "DPM pointer"
 - Fixed xSysdeviceExtendedMemory() missing convert/HWIF function when reading tSystemState
 - Renamed "md5" files to "Hilmd5" preventing conflicts with custom components using same file name
 - xChannelIORead()/xChannelIOWrite() does not return COM flag state in "uncontrolled mode"
 - DEV_IsCommunicating() removed re-read of NCF_Handshake flags for SPM speed improvment

V1.3.0.0
-----------------
 - Fixed DSR Handler channel loop counting preventing one additional iteration
 - Fixed compiler warnings created by implicit data conversion on 64bit systems
 - Fixed Lint warnings in cifXInit.c
 - Fixed notification call "post reset event" (eCIFX_TOOLKIT_EVENT_POSTRESET) done to late
 - Added system state trace log information (e.g. DPM cookie) during start-up
 - Added include in cifXUser.h surrounding <#if _MSC_VER> allowing none Microsoft compiler using -wundef

V1.2.0.1
-----------------
 - Remove single line comment (not allowed in ANSI-C)

V1.2.0.0
-----------------
 - Changed function interface of the hardware read/write functions (PFN_HWIF_MEMCPY). Using void pointer instead of uint32_t
   for address parameter, skips address calculation for memory mapped devices on 64bit systems.
 - xChannelSyncState() may not work on flash-based devices (if no reset is done during initialization)
   or after xSysdeviceReset()
 - Added target independent protocol implementation for serial DPM handling
 - xChannelRegisterNotification/CIFX_NOTIFY_COM_STATE now calls always the user callback to signal the actual COM flag state
 - Interrupt mode with shared PCI interrupts may result in invalid flags being handled in seldom cases
 - Added support for IAR C/C++ Compiler (ARM Cores only)
 - Added support for armcc Compiler (previously known as ARM RealView)
 - Always check cookie before evaluation of READY flag to prevent misinterpretation of invalid DPM content
 - Updated 2nd Stage Loader to V1.4.17.0
 - Introduced eCHIP_TYPE_NETX52 to distinguish between netX51 and netX52
 - Introduced initial wait for bootloader startup before invoking POST_BOOTLOADER event
 - Mailbox notification may cause illegal memory access due to missing hardware interface abstraction and endianness conversion
 - DMA mode does not work properly on big endian machines due to missing endianness conversion

V1.1.5.0
-----------------
 - DEV_TransferPacket() may drop unexpected packets
 - DEV_WaitForBitstate_Poll / DEV_WaitForSynchState_Poll may wait one additional cycle before returning
 - netX51/52 RAM Based device support
   ATTENTION: DPM Timings might need to be adjusted in eCIFX_TOOLKIT_EVENT_PRE_BOOTLOADER notification callback,
              as RDY signal is not activated by ROM loader. If the host has strict timings (e.g. NXPCA-PCI), the 
              DPM won't be readable.
              
              Sample code:
                case eCIFX_TOOLKIT_EVENT_PRE_BOOTLOADER:
                  if(eCHIP_TYPE_NETX51 == ptDevInst->eChipType)
                  {
                    /* netX51 has a timing configuration without rdy/busy, so we need to adjust it here, to be able to access 
                       memory starting at offset 0x100 */
                    NETX51_DPM_CONFIG_AREA_T* ptDpmConfig = (NETX51_DPM_CONFIG_AREA_T*)ptDevInst->pbDPM;

                    ptDpmConfig->ulDpmRdyCfg    = MSK_NX56_dpm_rdy_cfg_rdy_pol |           /* DPM is ready when external RDY-signal is high. */
                                                 (1 << SRT_NX56_dpm_rdy_cfg_rdy_drv_mode); /* Push-Pull Mode */
                    ptDpmConfig->ulDpmTimingCfg = 0; /* Disable setup times and filter. */
                  }
                  break;
 - Updated 2nd Stage Loader to V1.4.16.0

V1.1.4.0
-----------------
 - Fixed memory leak when using netX100 RAM based devices (e.g. cifX)
 - Fixed memory leak if unsupported DPM channel was found
 - Updated 2nd Stage Loader to V1.4.12.0

V1.1.3.0
-----------------
 - Added Lint fixes and re-ordered handling in DSR function
 - Added excplicit casts to allow compiling using C++ compiler (Tested using Visual Studio)
 - Suppress checking of sync handshake flags in DEV_IsReady/IsRunning and DEV_GetHandshakeBitState for performance reasons on slow busses
 - Updated 2nd Stage Loader to V1.4.10.0

V1.1.2.0
-----------------
 - Added notification callback for COM flag state

V1.1.1.0
-----------------
 - Added command packet to set the device time during hardware startup, if a RTC is aveilable
 - Added MRAM API functions

V1.1.0.0
-----------------
 - Fix: Lock DEV_DoSystemStart() againt DSR to prevent writes to handshake flags while in reset, if an IRQ occurs
 - Fix: DEV_DoSystemStart() now clears internal COS Flags in Interrupt mode
 - Updated unsigned long data types to uint32_t
 - New header file added to separate declarations for cifX hardware functions from cifXToolkit.h
 - Added Hardware interface layer (supports serial DPM access e.g. via SPI, RDY/BSY DPM workaround)
 - Added optional validation of pointers and handles passed to toolkit functions (CIFX_TOOLKIT_PARAMETER_CHECK)
 - Added Debug Trace output of device information (DevNr/SerialNr/SlotNr)
 - Added eCIFX_DEVICE_DONT_TOUCH device type to use cards without any changes
 - Added xSysdeviceBootstart() / DEV_DoSystemBootstart() function to switch into bootloader mode

V1.0.4.0
-----------------
 - Starting automatically downloaded configuration database may fail for flash based devices

V1.0.3.0
-----------------
 - Handshake Flags may get out of synch when doing a system start in interrupt mode, if
   firmware asserts interrupt at unexpected time
 - Module downloading to flash / starting from flash may timeout when for large modules

V1.0.2.0
-----------------
 - xChannelDMAState() comments fixed
 - netJACK 100 added to PCI definitions header file
 - ChannelDemo() / xChannelIOWrite() uses now abSendData[] instead of abRecvData[]
 - cifXCreateChannels(), fixed memory leak if channel was not created
 - xSysdeviceReset() / xChannelReset(CIFX_SYSTEMSTART) may leave COS flags in invalid
   state in interrupt mode (influences loadable modules)

V1.0.1.0
-----------------
 - DSR Handler crashes due to invalid access on a communication channel instance
 - xSysdeviceReset is now locked against ISR/DSR or Cyclic Thread. Earlier versions
   may write invalid handshake flags during a system start if the cyclic thread or IRQ
   accesses the flags during this time.
 - Downloading loadable modules (.NXO) may fail on larger files due to the last 
   confirmation packet taking longer than expected

V1.0.0.0
-----------------
 - xChannelSyncState parameters updated (added Timeout)
 - SyncState Error codes added
 - Loadable modules may not work (depends on implementation of OS_Strncpy)
 - Fixed GCC compiler warning (deferencing pointer breaks strict-aliasing rules)
 - If start of Firmware fails (e.g. wrong HW options) the card will not
   be rejected by toolkit. It will be used as a card with a system device only.
 - xChannelPLCMemoryPointer may not working correctly due to an invalid parameter 
   passed to OS_MapUserPointer / UnmapUserPointer
 - GetMDRequest may fail depending on the implementation of OS_Strncpy
 - xChannelPLCActivateRead / Write did not lock access to handshake flags
 - cifXHandleWarmstart() using same buffer for send/receive in TransferPacket() fixed
 - DEV_DeleteFile(), OS_Strncpy() size of copied data must include the necessary 0 character
 - DEV_Download() uses twice the packet timeout (=10s) for the last packet if modules are loaded
 
V0.10.1.0
--------------------------
 - Interrupt mode may miss first interrupt after initialization, due to readout 
   of sync handshake flags

V0.10.0.0
--------------------------
 - Functions for SyncMode added
 - Interrupt Handling changed to support notification callbacks for user (xChannelRegisterNotification)

V0.9.9.0
--------------------------
 - 64-Bit Support added (ISO-C99 header file "stdint.h" is now needed to provide
   fixed-width data types)

B0.953
--------------------------
09.02.2010
 - ISA card handling improved by adding an aditional DEV_ReadHandshakeFlags()
   in cifXCreateChannels()
 
B0.952
--------------------------
25.01.2010
 - cifXEndianess.h. added additional braces into the conversion macros

B0.951
--------------------------
03.12.2009
 - DEV_GetMBXState(), receive count handling fixed

B0.950
--------------------------
06.11.2009
 - DMA support added
 - Slot number handling added

B0.946
--------------------------
01.10.2009
 - DEV_ReadHostState extended by fReadHostCOS to prevent the read back of the
   host COS flags when they are not changed by the hardware
 - Handling of COS flags improved (BUS_STATE / CONFIG_LOCK / INITIALIZE) and handled now
   in DEV_DoHostCOSChange()
 - DEV_DoChannelInit() now checks if the READY flag is gone and than waits until it is back

B0.945
--------------------------
31.08.2009
 - cifXStartModule() fixed if no channel is available during first start
 - HilPCIDefs.h included
 - cifXHWFunctions(), TRUE/FALSE definition replaced with 1/0  
 - cifXDownload(), CIFX_BUFFER_TOO_SHORT fixed by using now the max. packet size for confirmation packets

B0.944
--------------------------
07.07.2009
 - Interrupt handling in ISR and DPC fixed/improved
 - xChannelBusState(), COM_FLAG handling in conjunction with
   timeout settings fixed/improved
 - xChannelBusState() handling moved to DEV_HostState() function to be callable as a low level function
   timeout settings fixed/improved

B0.943
--------------------------
28.04.2009
 - Module download improved for comX
   
B0.942
--------------------------
13.02.2009
 - DEV_CheckCOSFlags is now locked against DEV_DoChannelInit,
   to prevent COS Flag evaluation while a channel init is running

B0.941
--------------------------
30.01.2009
 - Big Endian Host support added via CIFX_TOOLKIT_BIGENDIAN define
 - New parameter (eDeviceType) added to device instance to allow 
   DPM cards (e.g. NXHX500/50) to only use RAM (like cifX does).
   Previous versions always expected a serial flash on DPM based devices
 - New parameter (eChipType) added to device instance, so functions like
   USER_GetBootloader can check if a bootloader for a netX50 or netX100/500
   is requested.
 - netX50 support added

20.01.2009
 - "Loadable Modules" support for comX included

B0.940
--------------------------
12.12.2008
 - PRLIMINARY support for "Loadable Modules" included


V0.931 (under Development)
--------------------------
10.12.2008
 - cifXCreateChannels()
   answer to warmstart commands now excepted with size != 0 preventing error 0x800A0012

27.11.2008
 - IO mode RCX_IO_MODE_BUFF_DEV_CTRL included

24.11.2008
 - cifXTKitISRHandler() extended by new parameter fPCIIgnoreGlobalIntFlag
 - Filename cases corrected to support case sensitive operating systems

17.06.2008
 - While loops extended by Sleep(0)

B0.930 (under Development)
--------------------------
16.05.2008
 - xChannelOpen() error return extended CIFX_INVALID_CHANNEL
 - OS_MapUserPointer() and OS_UnmapUserPointer() now have a new parameter pvOSDependent

07.05.2008
 - Signalling interrupts from DSR changed, so that systems 
   that may get interrupted during DSR are working
 - DSRhandler changed to signal netX Handshake bit changes (since previous irq)
   instead of Host/Netx flag differences. This allows DEV_WaitForBitstate_Irq
 
06.05.2008
 - xDriverErrorDescripton did not return error description, 
   due to internal array size miscalculation29.04.2008
 - DOWNLOAD_MODE_LICENSECODE added
28.04.2008
 - PLC Functions did not return NO_COMFLAG error

B0.923 (under Development)
--------------------------
02.04.2008
 - Wait functions in cifXHWFunctions reviewed
 - xChannelReset(CIFX_CHANNEL_INIT) will only check if the 
   channel becomes READY. Checking for RUNNING removed.
 - cifXStopDevice(), deletion of the system device interrupt events included
21.02.2008
 - Error return in xDriverMemoryPointer() and xChannelPLCMemoryPtr() fixed

V0.922 (under Development)
--------------------------
04.09.2007
 - Setup program:
   - Bug fix, which solves the Warmstart.dat files deletion if more than 
     two cards are using it, included (this fix was lost in V0.921)
   - Firmware name and version now shows "-- not available --" for .mod files
   PROFINET slave parameters:
   - Input/output size changed to 1024 Byte
   - Device type string limited to 25 characters
 - Test program:
   - Scroll bar for the receive packet text control included, to allow viewing of packets,
     which are bigger than the control.
 - All version information changed to V0.922

V0.921 (under Development)
--------------------------
26.07.2007
 - Download now supports downloading to serial flash on target (if available)
   Filename passed to download function will be used to identify target (e.g. "SYSFLASH")
10.07.2007
 - cifX Test crashed, if no device was selected in dialog
03.05.2007
 - On DPM based devices a the driver always creates a communication channel. Even without a firmware.
   This can lead into blue screen if such a channel is access from a user application. 
26.04.2007
 - Function xChannelBusState() now checks the
   COMMUNICATION-Flag if a timeout is given.
   Without a timeout, only BUS ON /OFF is processed
25.04.2007
 - Reading security FLASH and placing data into the
   DPM (bootloader and firmware)
 - File header handling included
 - Prevent multiple firmware files (only the first one
   is usable) included
 - Test of DPM and PCI hardware
19.04.2007
 - MD5 checking for files included (calculated on hardware and firmware)
 - Download for DPM based hardware reworked and
   files are only be downloaded if they are not existing
   or different
 - Download mode now choosen by the file extension
 - New 2nd stage bootloader detection and handling included
18.04.2007
 - API functions for 
   * xSysdeviceUpload/Download, xSysdeviceFileFindFirst/FindNext
   * xChannelUpload/Download, xChannelFileFindFirst/FindNext 
   extended by two new parameters, to be able to deliver unhandled
   receive packets during these functions
 - Definitions for CIFX_COLDSTART and CIFX_WARMSTART changed 
   to CIFX_SYSTEMSTART and CIFX_CHANNELINIT
 - New COS-Flag handling included
 - Function xChannelBusState() included

V0.920 (under Development)
--------------------------
11.04.2007
 - C++ style comments removed, missing comment end cifXHWFunctions() fixed
10.04.2007
 - Prepared interrupt handling (provided in cifXInterrupt.c)
 - Update DEVICEINSTANCE structure to provide infos needed for IRQ handling
 - Added OS Dependent functions for Enabling/Disabling device interrupt (needed in OS Abstraction layer)
 - Added CIFx Device Driver dependent include files into OS_Includes.h
 - Added the following functions to cifX API
   * xChannelIOInfo
   * xSysdeviceReset
   * xChannelFindFirstFile
   * xChannelFindNextFile
   * xChannelUpload
   * xSysdeviceFindFirstFile
   * xSysdeviceFindNextFile
   * xSysdeviceUpload
 - Added cifXTkitCyclic timer to Toolkit API, used to poll the COS flags on a polled cifX device.
   Needs to be called by user cyclically (recommended time is approx. 500ms)
 - Added Device Functions used by new API functions
   * DEV_Upload function
   * DEV_DoWarmstart
   * DEV_DoColdStart
 - Prepared interrupt handling via 2 functions needing to be called by user it IRQ is needed
   * cifXTKitISRHandler
   * cifXTKitDSRHandler
 - Renamed USER_ErrorTrace to USER_Trace and changed signature to provide more flexibility.
   Toolkit now uses a global variable g_ulTraceLevel to adjust the amount of trace messages.
 - Some hardware dependent functions did poll the Handshake flags if interrupt is enabled
 - DEV_ReadHandshakeFlag did check the COS flags wrong
 - DEV_TriggerWatchdog illegally returned CIFX_DEV_NOT_RUNNING even if the device was running
 - DEV_IsCommunicating did not set CIFX_DEV_NO_COMFLAG correctly
 - USER_GetInterruptsEnable added, to give the user the possibility to enable interrupts on a 
   per device base


V0.912 (09.01.2007)
-------------------
 - Function bodies for
   xChannelGetSendPacket
   xChannelConfigLock
   xChannelReset 
   included
- Internal version number set to V0.912

V0.911 (26.10.2006)
-------------------
 - UNREFERENCED_PARAMETER macro fixed

V0.910 (19.10.2006)
-------------------
 - Compiler Warning fixes for GNU compiler
 - VxWorks combatible HANDLE now used (HANDLE-->CIFXHANDLE, API change)
 - CifxErrors.h now uses C-Style comments
 - Structure Packing fixed for MidSys_Public.h
 - Some toolkit functions now static, as they are only used internally

V0.903 (13.10.2006)
-------------------
- DEV_WaitForBitState_Poll's timeout changed. 
  - Starttime was read inside poll loop
  - Starttime read into unsigned long, for overflow detection
    a long variable is needed

- DEV_ReadHandshakeFlags() wrong HCF_NETX_COS_ACK flag fixed 

- Fixed bit state waiting timeout for timer overflows

- Warmstart handling included  

- OS_MapUserPointer/OS_UnmapUserPointer added for DPM mapping to application


V0.902 (06.10.2006)
-------------------
- Put/GetPacket now checks for Ready flag

- Fixed size calculation for OS_MemRealloc calls

- Host Handshake Flags did not update COS flags

- Host Handshake Flags are now read earlier, to 
  allow Ready check on Firmware read packets

- Calculation of the mailbox size for system channel
  and communication channel fixed (sizeof......)


V0.900 BETA (10.08.2006)
------------------------
- first version

