RR3-II returns serial number as hex, which caused problems on Linux.
Fix to loading config/reg information on Linux if file was corrupted.
Fix to device/context handles when using LibUsb (Linux & Mac).
.NET Framework 4.7.2, .NET 5.0
5.0.7 - 1 Feb 2021
Moved to .NET 5.0
Availability of LibUsbK on Windows checked and non-availability handled, so that RR3-IIs can still be used.
Windows Forms drag and drop object names changed for clarification, which may cause problems if different versions of DLL & apps used.
Network properties now returned directly by RedRat4 objects.
RedRatX disconnect while connection in compromised state no longer blocks.
Fixed bug: In .NET 5.0 a connection attempt to a busy RedRat IP device did not cause an immediate error.
.NET Framework 4.7.2, .NET Standard 2.1
5.0.6 - 8 July 2020
Macro execution code moved to async APIs.
Macros generate log events if needed in an application.
Improved irNetBox and RedRat-X protocol handling code.
Fixed occasional bug in repeated USB device disconnect/reconnect.
5.0.5 - 4 June 2020
Various small fixes and improvements.
5.0.4-beta - 26 May 2020
AVDevice lookup is no longer case sensitvive.
RedRat-X fix for Linux support (named EventWaitHandle).
Misc refactoring, including some improved method naming.
AVDeviceMngmt namespace changed to AvDeviceDb.
5.0.3-beta - 13 May 2020
USB hot plug support available on Windows and Linux.
5.0.2-alpha - 27 April 2020
Updated System.Buffers NuGet package due to NuGet problems with .NET 472.
5.0.1-alpha - 27 April 2020
Targets both .NET 4.7.2 and .NET Standard 2.1.
Included updates from V4.25.
USB support added back in for both Windows and Linux. Hot plugging doesn't yet work on Linux.
Added better support for IR data (and other object) serialization.
5.0.0-alpha - 12 Dec 2019
Initial port to .NET Core.
No USB device support yet.
RegKeyTransferHelper removed. Should no longer be necessary to transfer keys from HKLM to HKCU on Windows.
.NET Framework 4.7.2
4.25 - 5 March 2020
Tidied USB code a bit and fixed concurrency bug in low-level USB device creation.
Moved to .NET Framework 4.7.2.
Dispose of RedRatX does not now cause any exceptions to be thrown.
.NET Framework 4.5
4.24 - 23 Sept 2019
Device reset feature added to RRUtil.
4.22 - 12 July 2019
Refactored RR4 signal output locking a little to reduce repeated code.
Fixed bug causing "Object synchronization method called from an unsynchronized block of code with RRX signal output if not connected.
OutputUtil can now dynamically set the number of repeats on an output IR signal.
4.21 - 14 May 2019
Most Bluetooth and RF4CE code moved out to ModuleApi.
USB hot plug handler wrapped in exception handler to stop it terminating the application.
4.20
Fixes and reversal of some USB plug handling code.
RF addresses are primarily handled as an object, rather than string/byte array.
4.19 - 29 Aug 2018
ASCII encoding used for global name retrieved via broadcast.
Added support for refactored IR signal capture by RR-X (f/w V0.6.0 onwards):
Learning a signal provides an additional array of the number of carrier cycles in each pulse.
Needed a couple of extra messages, e.g. for keyboard type signal support.
4.18 - 24 Nov 2017
OutputUtil:
OutputMacro method now has optional output power parameter.
Inherits IDisposable. Disposing disconnects from all used RedRats.
4.17 - 13 Nov 2017
Additional static methods in FirmwareVersionUtil.
Different message queue overlap limit for RRX now supported.
AsyncOutputManager now handles output errors. Previously, errors were masked as async output is in background thread.
Improvements for support on a Mac: XMOS USB device discovery and NIC lookup for the UDP broadcast.
USB device notification doesn't seem to work on a Mac - caused app to hang.
OutputSignal method in OutputUtil now has optional output power parameter.
BREAKING CHANGES
Protection level of most RRX GetInstance methods changed to make them less accessible.
4.16 - 7 Sept 2017
Some fixes and improvements to USB code and plug handling.
Restructure of BT code into profile based classes.
Added the RedRat4XS.UdpReset() method.
Misc other minor bug fixes and additions.
4.15 - 22 Aug 2017
Slight refactor of use of couple of key variables in AsyncOutputManager.
Other minor bug fixes in async protocol handling.
Added USB plug handler code for use by applications (UsbPlugHandler class).
Further work on BT core code.
LibUsbDotNet.dll compiled into RedRat.dll as a resource.
Uses some C# 6 syntax.
BREAKING CHANGES
Async/sync output lists refactored to be a single class - OutputList.
Some refactoring of BT code.
4.14 - 4 May 2017
Refactored IR signal input from RR4s - removed unnecessary threads and added support for RR-X.
Improved instantiation of RR-X and ModuleAdaptor objects to prevent multiple location info objs being created.
Supports the serial number in the broadcast return information.
Global mutexes & wait handles have more standardised names - "Global\RedRat.RedRat....".
XMOS USB code now works with plug and unplug events.
Core code has fix for signal learning deadlock (from comms refactoring).
Use usb ClaimInterface to globally lock access to an XMOS USB device as the global mutex can cause a hang if not released properly.
RRX with narrow-band detector: The correct events are now returned for RC detector enable and disable.
BREAKING CHANGES
Reduced the accessibility of MKIIIPowerLevelMapping enum as shouldn't be used externally.
4.13 - 1 Feb 2017
RR-X support added.
OutputUtil now supports Macros.
LibUsbDotNet.dll is now not needed with RedRat.dll on Windows. It is dynamically loaded when needed.
OutputUtil now supports clearing cached XML files.
4.12
Moved irNetBox MK-IV discovery port to the same as the MK-III. Considerably simplifies lookup, but MK-IV firmware needs to support this.
Handles MK-IV connection not available error (0x04).
4.11 - 21st April 2016
BREAKING CHANGES
Refactored the product ids, versions and serial numbers to be consistent across devices.
Refactored port-enabling code. Now single commands exist for all devices.
Improvement to irNB search.
4.10
Started adding support for module boards, plus the first RF4CE board.
Added support for the "native" message protocol so that flashlib operations can be done via this library. (Standard message protocol is called "legacy" in firmware.)
Updated OutputUtil so that by default it won't do a network search with the 4 parameter method (usually used with RR3s). This can be overridden.
Adjusted device type discovery at IP (UdpTcpDataBlockReader) as the irNB-IV uses a different port and different data structure.
Started adding support for continuous IR output (MK-III+)
Added flag to disable irNB retry code in debug mode if needed for debugging.
Fixed two XMP related bugs:
XMP viewer was showing main signal as repeat signal.
XMP data was not correctly analysed, in that the tag from reg packet was not read correctly.
Improved decoder logging infrastructure a bit.
BREAKING CHANGES:
Device lookup for each type is via the FindDevices() method call on each device type.
IRedRat is now a more generic device rather then IR specific, to support RF devices. The
IR functionality has been promoted to IRedRat3.
Cypress USB code now moved to USB.Cypress. Xmos USB code moved to USB.Xmos.
RedRat4 find methods have now been renamed to FindDevices().
IRedRat4-III.ResetIRMicro() has been changed to ResetDevice(bool factory).
Removed code for USB control of irNetBox-IIIs.
4.03
Fixed IROutputGroup registry entry storage.
4.02 - 1 May 2015
Have added signal caching + toggle/double signal handling on a port (or output set) basis on RR4s.
4.01 - 20 Jan 2015
Added Swap() method to toggle bits.
Sync output of IR signals via an irNetBox works again following comms refactoring work.
IR signal capture via an irNetBox works again following comms refactoring work.
4.00
Moved to .NET4.5 (4.5.1)
Removed all remoting and WCF code. (Network comms now take place at application level where needed.)
Removed RedRat2 code.
Major refactoring work on irNetBox network comms and retry code.
Added device discovery trace switch.
Put in exception handling if UDP lookup finds an irNetBox but can't connect via TCP.
BREAKING CHANGES:
Removed RedRat2 code.
Removed all remoting and WCF code. (Network comms now take place at application level where needed.)
XMP1Signal moved to RedRat.IR.Protocols.
First pass of registry garbage collection included.
NOTE: IR signal output via an irNetBox using the sync API is not working in this version.
.NET Framework 3.5
3.11
Small fix in RedRat4StreamIOImpl, adding a lock to prevent a race condition.
Fixed a bug in RedRat3ModulatedKeyboardSignal when de-serialized it does not have correct state.
Async IR output did not use the SigDataCache and did not support double signals. Now fixed so that toggle and double signals work OK via the irNB-III async API.
A second call to SetupDiGetClassDevs() in CyUSWrapper on win8-64 caused overflow in conversion to Int32. Now uses IntPtr.
Fix so that if RR4 lookup is via IP, and the IP has changed, then the registry value gets updated.
Fix in TcpConn that caused problems on Linux.
Fix in ModulatedSignal.GetHashCode() to prevent throwing exceptions on null signal fields.
3.10 - 9 Sept 2013
Handle SocketException when looking up local addresses. Not sure why this should ever fail.
Added exception handling for RR4 lookup in RRUtil.
Auto-reconnect for the irNetBox works again, and now using a timer to poll rather than background thread.
The callback to the client is now called on async IR output errors in more cases.
The UDP broadcast thread RX listener now has an exception handler in case exceptions are thrown, e.g. if a firewall or
other network hardware block UDP a "forcible disconnect" can happen. If this ex is not caught the app terminates.
A disadvantage now is that the ex is swallowed unless tracing is exposed somewhere in the app.
Added support for XPort-05. This returns an ID of X9.
3.09
RedRat4XPortLocationInfo.CalcHash implemented with .net native GetHashCode function. Previous custom implementation was broken but possibly not used anyway.
3.08
Fixed bug in MacroQueue.ProcessMacroQueue(). The ex handler was outside the while() so an ex caused the thread to exit.
Improved handling of AbandondedMutexException; put in a single place and applied to many more WaitOne() calls.
Improvement to ProntoModulatedSignal creation from pronto data - better at finding the pause at end of data.
Win8-64 had overflow in conversion to Int32 of return from SetupDiGetClassDevs() in CyUSWrapper. Now uses IntPtr.
Added methods ListDevices() and ListSignals() to OutputUtil for use of device and signal lists in LabView.
Improved synchronisation around async signal handling in RedRat4StreamIOImpl.cs.
3.07 - 8 Nov 2012
RedRat4Xport.ResetEZUSB() and ResetXS1() both moved to RedRat4XPort.ResetIRMicro().
XPort CP3 pin is now set correctly for the XS1 restart for boot into normal firmware.
Setting the config pins on the XPort works properly now - before it would set them by cycling through the whole pin config process, meaning that toggling
a single pin in isolation would not work. This caused confusion with the XS1 reset operations.
RedRat4Xport.ResetXS1ToFactory() added.
Added RedRat4XPort.ForceTCPOnly so that no UDP will be used on networks that don't allow UDP. This stops the broadcast lookup working.
3.06 - 25 Sept 2012
RedRat4StreamIOImpl includes an idle timer so that applications can check to see how long an irNetBox has been idle.
GPIO_Pins - put ex handler round method body in SetPinConfigurations.
3.05 - 28 June 2012
If very long signals are output via a RR3, the USB timeout is now adjusted automatically so that there is no actual timeout error.
A RedRat4StreamIOImpl can now only have one AsyncOutputManager. This helps with it's use in apps.
Fixed a problem with async timeouts on long IR signals - the timeout was set from start of signal output rather than end, causing a premature timeout on long IR signals.
3.04 - 30 May 2012
If UDP blocked, then can't read setup records of irNBs, so don't know which type. So have added ability to use TCP for reading setup record if UDP times out.
Added UdpTcpDataBlockReader class for this.
Registry key code abstracted to generic config utilities so that it works on Mono and .NET.
3.03
Fixed bug in CyUSBWrapper. One lock too many causing deadlocks when both IR detectors in use.
Fixed typo in name of IRedRat4.IROuputsChanged -> IROutputsChanged.
Changed rr4 try-reconnect to disconnect and connect properly.
3.02
Added the ability to connect directly to a remote RedRat mux instance.
3.01
Added support for the post-signal delay in the irNB-III.
OutputUtil now supports simple output via an irNetBox.
3.00
Moved to .NET 3.5
Added p/invoke code for driver calls, so removing the need for DriverWrapper.dll.
Removed all refs to old EzUSBSys driver. The new version of the CyUSB driver will now work with older devices.
USB RedRat devices are now called RedRat-X (common to MK-I and MK-II).
Moved registry key storage of device information from HKLM to HKCU to prevent having to start apps in admin mode.
Attempts to copy values from HKLM if none found in HKCU.
Re-jigged signal data conversion routines a bit - now not static on RR implementation classes.
Added support for the USB version of the irNetBox-III.
.NET Framework 2.0
2.32
irNB-III async output method takes a state object which is returned in the callback.
Fixed bug in async output - async complete message comes back from box in the same packet as message ok (i.e. 0x30 & 0x31), which meant that the callback method hadn't been setup.
RedRat4StreamIOImpl.OutputIRPacketAsync() now checks port numbers in output list param.
Fixed a minor bug in RedRat4StreamIOImpl.OutputIRPacketAsync() - ex thrown in wrong place caused mutex ex due to an invalid release attempt. Moved try statement to fix.
2.31
Includes some support for the irNetBox-III.
Added AsyncOutputManager for MK-III irNetBox.
2.30 - 19 Oct 2010
Work on support for MK-III irNetBox started.
RedRat4StreamIOImpl: Auto adjusts the comm timeout value if a long IR signal is being output.
First SDK release built with VS.2010.
2.24
If an irNetBox is discovered twice (e.g. two network cards) then checked and only added once to list of devices.
Added a second fix for this so that if two have the same name it will not add both, but ignore the second.
Fixed a bug in CCW code: IROutputsChangedEventHandler on CCWRR4 had a null list of IR outputs that had been changed.
Added XPort rescue code to RedRat4USBImpl.
Added RRUtil.PrintFoundRedRats() which creates a string with all RRs and op groups.
The lookup lists of RRs (and RR3s) now uses a case insensitive comparer for device names.
Finding an output group is also case insensitive.
RedRat4USBImpl.IROutputState has now been implemented.
Fixed bug in IROutputGroup that caused all ops to be set to low power when an op group had all set, but some at MEDIUM or HIGH power.
2.23
Improved output power level selection for RR4-II in RedRat4StreamIoImpl, including a bug fix or two. For this to work reliably via IP,
it needs f/w version 2.03IP or higher on the irNetBox-II.
2.22 - 7th Oct 2009
IROutputChangedEventArgs now uses power state rather than just bool values.
IROutputGroup also uses OutputPower rather then bool on/off values.
Using CyAPI.lib from Cypress USB Suite V3.4.1.
Added support for high-speed capture of keyboard mod signals.
Fixed bug in DecoderManager.SetDeviceDB() whereby a decoder was not created if the
decoderClass was an empty string.
Bug in RedRat3USBImpl when accessing deviceinfo. Not always using getter, so could be null. Fixed.
Supports USB irNetBox-II.
2.21
Put in a timeout for sending a UDP packet to a single address. The reason is that when the irNetBox is contacted directly via an IP address, then the UDP lookup is the first
contact attempt, so it has to timeout and not block.
The Resolve property of RedRat4XPortLocationInfo is not now serialised, as it should be read from the registry.
RedRat4XPortLocationInfo loads some additional state from the registry.
Support added for switching the RR3-II to high speed mode for signal capture.
Added UPC-Broadband decoder.
RedRat4SIOError now subclasses RedRat3Error, and errors back from the RR4, especially during IR signal input are now handled correctly. (Associated bug fixes in f/w as well.)
Improved RedRat3USBImpl.GetInstance(RedRat3LocationInfo li) as it would always do a complete lookup, which caused considerable memory growth in some circumstances.
MacroQueue background thread catches exceptions and sends to trace output.
First cut at converting ModulatedSignal objects to Pronto hex strings (in ProntoModulatedSignal)
Ported solution to VS.2008.
Export of signals as irNetBox data block did not work with more than 16 length values.
Increased robustness of GPIO pin use - used finally to ensure it's closed.
Modified RedRat3Error and RedRat3Exception so that we have an initial default, 'UNKNOWN' value.
XMP1SignalKey's Equals() behaviour can be changed, depending on the application. For example, we may not want to compare the TAG and OWNER.
If get back wrong msg type from RR3, the msg type is now reported.
Added the RR4-Multiplexer code, based on .NET remoting.
Added Trace.cs as a central place for working with SDK tracing.
Added some extra locking in RedRat4StreamIOImpl to make slightly more thread safe.
RedRat4XPortDeviceInfo now gives product name as 'irNetBox-IP' or 'irNetBox-II-IP'.
Completely restructured the LocationInfo.RedRatType enum as a flags based one that gives a lot more information.
All device find methods now return LocationInfo() objects rather than string names.
2.20 - 8th May 2008.
First release with full support for RedRat3-II, i.e. MK-II versions.
Converted MK-II USB I/O to use the CyUSB .NET suite. This required the addition of a new package - RedRat.USB.Driver - and restructuring how the driverwrapper is abstracted.
Provides plugging and unplugging events for MK-II redrats.
2.07
DoubleSignal.SignalLength() returns the length of the longest signal, rather than 0.0.
RedRat3USBImpl: When RCOneShot was set, and has some error disabling the RC detector then would get a background, unhandled ex. This now fails quietly.
RedRat4 XPorts IP versions can now be set as being found directly by IP address.
2.06 - 1 Feb 2008
Min fuzz length on RR3 can now be set to 0. When used with FW V0.33 or greater this gives faster length processing on signal input.
Added XMP-1 signal decoding.
Added RC5 signal generation from system/command codes.
Added DO_TOGGLE_TIMEOUT to SignalDataCache so that the A signal will always be used following a certain timeout period.
RegistryKeyValue code changed to open HKLM reg entries as read-only if it can't open as read/write.
CCWRedRat3 & CCWRedRat4: Learning signal input, when cancelled or timeout, the event wasn't passed through the CCW layer, so never arrived.
Various bits of device info are now used in converting signal input (rr3.LengthToMillis) which is read from the RR3 while RC detector is enabled, causing deadlock.
So in some of these methods, the cached version is used, though it is loaded if null.
Added tracing to Macro actions.
Added IRedRat4-II interface for additional RR4 MK-II functionality.
USBDevice.DeviceInformation is now cached.
Added XMP1Signal - basically modulated signal with some XMP1 conversion methods.
Fixed bug not allowing DoubleSignals to be output via 'fastpath' COM API OutputSignal()
Allow DB XML file to be opened read-only mode through the COM interface.
When RR3 unplugged while RC detector enabled, would get exceptions generated in a loop very quickly. Have now put in a delay between exceptions.
RedRat3USBImpl has a catch all ex handler in dispose so that we don't get unhandled exceptions when object finalised etc.
N.B. Searching for RedRatII-X USB devices has been disabled.
2.05 - 21 June 2007
Added UnhookEvents() to both CCWRedRat3 and CCWRedRat4 so that VB can disconnect the events if needed.
2.04 - 11 June 2007
Added ExecuteMacro() to MacroQueue, which doesn't queue but blocks until completed.
Beep macro action did not work if an RR name or output group were given.
SignalAction macro action has better management of connections and irNetBox o/ps if they have been set by some other part of an application.
Added support for the output of DoubleSignals via the COM API.
Changed position of irNetBox mem alloc call in RedRat4StreamIOImpl.OutputModulatedSignal() due to a bug in the irNetBox firmware. This has been fixed in FW V1.03-IP.
Added DefaultLocationInfo so that Scheduler etc. can use a "default" RR more easily.
Added CCWSignalDB.AddDoubleModSignal(...)
2.03
For Vista, adjusted UdpBroadcast to work with only IPv4 addresses.
2.02
Sorted out DriverWrapper installation problems.
2.01
Switches USB CPLD power on/off on connect/disconnect.
2.00
Ported to .NET 2.0.
IS_SERVER_PROCESS flag moved to RRFirmwareDevice.
Added support for USB RedRat4.
When learning signal input is cancelled, the SignalEventArgs now picks it up and returns this rather than an exception.
RR4 can now output flash signals.
Various other minor bug fixes.
.NET Framework 1.1
1.24
Fix in the signal decoder. Decode states were too easily combined - the difference should be delta/2 not delta. The result was that certain signals couldn't be decoded.
RRUtil.PrintFoundRedRat3s() includes the location name in the detail it prints.
Added the ability to override the default decode/create deltas in a given device DB.
Fixed some bugs with signal decoding - create & decode delta.
Fixed locking issues with RR lookup in RRUtil
Fixed RedRatNameToLocInfo() - would not return information if a full lookup had not been made.
Added support for XPort-03 "X5" (i.e. XPort firmware 6.X).
Validates the X5 version of the XPort, i.e. looks for the RedRat ID in XPort setup records.
1.22
Default signal decoder still not always picked up. Now fixed.
On RR3 obj init, do not insist on reset of endpoint 2. If another app was inputting via this RR3 it meant that this second app could not start.
Added a connection state change event to the RedRat4StreamIOImpl.
Fixed bug with signal mem alloc on irNetBox on re-connect following conn loss.
1.21
Fixed a bug in the signal decoding.
Added the support for being able to change the RC Correction per device.
Locates XPort with firmware type "X2" as well as "X1".
COM interface now supports the use of DoubleSignals.
1.20
Added plugin structure for signal decoders, and created EchostarDish decoder.
Added the [N] command to the VirtualRR2 to obtain the serial number.
1.19
NO_SIGNAL_DATA error message from RR3 added.
In RR3USBImpl, for IR signal output lock EP0 over BulkOut data output operation so that no additional commands are sent between bulk out and output signal vendor command.
Put lock release in bulk out in finally clause.
A couple of minor bug fixes to RR2 signal conversion.
Added VirtualRR2 class for mapping RR2 calls to the RR3. Plus CCW code.
1.18
Added support for keyboard type modulated signals, i.e. 3-part. This needs RR3 firmware V0.27 or later.
USB vendor request failures now throw a VendorRequestedFailedException.
Can specify what types of hardware to find in lookup.
Minor improvements in TcpConn client.
Fixed bug in RR4 signal input - connection monitor thread has to be stopped.
Added MessageBoxAction and BeepAction.
1.17
Added output group discovery in RRUtil.
Added queuing for macro output.
Fixed concurrency issues in the output of macros to irNetBoxes
1.16
Partial RedRat2 support.
Changed IStreamIo to StreamIOBase abstract class.
Changed signal output caching, adding the option to disable it. This is needed in situations where IR data comes from external sources, so each output
signal call creates a new GUID, so the cache will gradually grow - memory leak!
Added irNetBox (RR4) support for IrDa like IR signal output.
Fixed UDP broadcast lookup for the RR4.
Added IsConnected() method to the RR4 and improved connection monitoring.
1.15
If there are more than 4 toggle bits, then throw ex. Find that using "DoubleSignal" in this situation works better for decoding. (ModulatedSignal)
Added drag and drop support for IRPacket and AVDevice.
Added A/B output for toggle and double signals.
Added caching of signal data for output.
Auto-connect for RedRat4 when obtaining device info.
1.14
Fixed RR4 bug in requesting device signal mem alloc. if the device goes off-line and comes back on-line.
1.13
Broadcasts for irNetBoxs on a class-B address only. Doesn't work on class-C.
1.12
Fixed bug in RR4StreamIO input - now removes listener.
1.11
Fixed null ref bug in CCWRedRat4.
1.10
First version to be release with RedRat4 support, including COM API.
1.02
Works with new device driver (>= 1.8) which calls all USB devices RedRat-X.
Added support for XPort.
Added the first cut of RedRat4 support.
Fixed a bug in ISignalDB.SetAVDeviceInfo(ref CCWAVDeviceInfo newAVDeviceInfo) - set to ref.
1.01
Added support for flash code input.
Pronto conversion can now take "5000" type pre-defined signals.