# Cambrionix API Release Notes ## 3.18.0 - Mon, 04 Mar 2024 * Internal refactoring to improve performance and reliability of the API and to allow for future improvements and code sharing between other services. We've noted a 2 fold improvement in the API's responsiveness to requests under heavy load. ## 3.17.0 - Fri, 09 Feb 2024 * Implement post of Hubs and Devices to Connect service to provide a faster way for Connect to get the latest information about hubs and devices. * [macOS and Linux] Ensure that serial ports to hubs are not opened if they are already opened by another process. It turns out this is a valid thing to do for these operating systems, but may have been responsible for various issues in the past (corrupt serial data, bad firmware updates), since the Hub API could also open the same serial connection to a hub that was already opened elsewhere. This is not an issue on Windows where all serial connections are exclusive by design. ## 3.16.0 - Fri, 01 Dec 2023 * Add `TotalInTree.Endpoints` and `TotalInTree.Memory` to device `Endpoint` information in `cbrx_discover('all')` and `cbrx_get_usb('tree')`. This totals all the endpoints in the USB tree for a given hub. Note that this will include endpoints and memory on chained hubs if there are any. * Fix rare crash when timeout after long USB scan occurs. * Fix issue where recently re-attached hub could show no devices due to a race condition. Also manifested as not showing its own location ID. * Fix bug in libusbmuxd getting stuck in a loop and never completing, resulting in battery information not being available. * Fix `HostSerial` property not always being present in cbrx_find results. ## 3.15.2 - Thu, 23 Nov 2023 * For a single http socket connection, fix issue that subsequent requests do not respond. ## 3.15.1 - Tue, 21 Nov 2023 * Fix authentication issue for local API connections from Connect. ## 3.15.0 - Thu, 20 Jul 2023 * [macOS and Linux] Increase the number of file handles possible for the API. This should ease problems for client processes that create more than 256 socket connections to the API in a short period of time. * [Windows] Fix a bug that could return an error code from cbrx_apidetails, instead of the version details. * [Recorder] Fix a bug that would cause the Recorder to fail to handle this error code correctly which caused the Recorder to stop responding to requests. * [Recorder] Fix issue that prevented Connect from being able to fetch graph data from remote Recorder API instances. * [Recorder] Fix response of /api/v1/hubs/{serial}/events endpoint. * [Windows] Updated installer to not select installation of Python by default. ## 3.14.0 - Wed, 14 Jun 2023 * Added Swagger documentation for both the API and the Recorder services. This serves as documentation for the updated recorder query API as well as a few endpoints that are available to the API itself. * API: http://localhost:43424/swagger * Recorder: http://localhost:43426/swagger * Fix issue with Task Lists getting stuck in a state where they would not complete. This had a knock-on effect of stalling other operations in the API. * [Windows] Fix an issue which could cause the Windows installer to fail to terminate the recorder service during an update, leading to a reboot being required, or the necessity to manually stop the service before updating. * [Windows] Fixed the API's cbrx_exit, and the recorder's /exit endpoint not working on Windows, which caused Connect's `Restart API` button to simply do nothing with no feedback. * [Linux] Fix issue with the API stalling after a USBTree scan. The cause of this is unknown at this time, so this fix is just to disable scanning for each device's BOS descriptor, which can hang for unknown reasons. ## 3.13.0 - Tue, 11 Apr 2023 * [Recorder] Update all recorder queries that return more than one result to accept pagination parameters for the query to allow for more efficient retrieval of large amounts of data. Add `offset` and `limit` parameters to the query. This will change the results from a simple array of all events to an object with a `_metadata` field and an `result` field. The `_metadata` field will contain the `total` number of results and the `offset`, `limit` parameters used for the query and links for the `next` and `prev` query. The `result` field will contain the array of results. The `offset` parameter is optional and defaults to 0. The `limit` parameter is optional and defaults to all. The `limit` parameter can be omitted to return all results from the `offset` onwards. * [Recorder] The `start` and `end` data limits are now optional and will default to the start and end of the available data if not specified. * [Recorder] Added a new recorder API to supersede the old style. Please see the http://localhost:43426/api/v1/help link for details. When the new interface is used (for queries that return more than one result), the results will always contain the `_metadata` field. ## 3.12.5 - Fri, 14 Apr 2023 * [Linux] Fix fetch of SSL web content used for Connect verification. ## 3.12.4 - Wed, 12 Apr 2023 * Fix authorisation from Connect in recorder service. ## 3.12.3 - Wed, 12 Apr 2023 * [Windows] Fix issue during update installation where the recorder service would not exit properly, causing the update to require a reboot to complete. Note that this will not fix the issue for the existing installation, but will prevent it from happening again going forward. ## 3.12.2 - Tue, 11 Apr 2023 * Fix exception in extended logging when cbrx_hub_set is used. ## 3.12.1 - Fri, 31 Mar 2023 * Update authorization for the Connect service. ## 3.12.0 - Thu, 09 Feb 2023 * Added "HardwareInformation" to get dictionary to fetch both hub information and port specific information to individual ports on the hub. This information is static and related to the known configuration of each Cambrionix hub. This includes information such as the official web site, dimensions, tolerances and so on. * Added a simple Rust example for querying the API. * Added `Endpoints.MemoryLimit` field to USBTree information if the limit is known for a host controller. Currently this is limited to the FL1100 controller which has 1Mb of endpoint memory found in newer M1 macs and Cambrionix ThunderSync hubs. * Fix missing endpoint usage information on Thunderbolt root controllers, such as on a certain M1 macOS machines. * Make sure we strip custom commands of whitespace before sending them from cbrx_connection_cli. * Fix cbrx_connection_set("Settings", ...) from not returning the results, but just 'true'. * Update the firmware updater code to align with command-line-updater 2.2.1 to support bulk firmware files. * [macOS M1] Fix issue that would cause ports to reset for iPhones on latest macOS. ## 3.11.1 - Thu, 23 Feb 2023 * Fix crash with cbrx_connection_set in some cases. ## 3.11.0 - Fri, 09 Dec 2022 * Allow `cbrx_connection_get` and `cbrx_connection_set` to accept a hub's serial number instead of only a previously opened handle. This is for convenience (and behaves the same as `cbrx_hub_get` and `cbrx_hub_set`), and it should be noted that for multiple requests, it may still be more time efficient to use handles. Handles will ensure that a hub remains active for at least 30 seconds, whereas no such guarantee exists when using the serial number directly. * Add a "DevicePath" field to USBTree information which gives the platform specific path for the device. This path is now also included in searches originating from the `cbrx_find` command. * When collecting battery information, give indication in the port's results if ADB is not running, and for Windows if the Apple Mobile Device Service is not running. * Add a 'RootLocationIDs' field to cbrx_discover('all') information to provide an array of all of the root USB entry points for a hub. * [Linux] Persist the --persistent installation option if the API is updated. This also required a slight amendment to the `--persistent` option so that once --persistent is enabled, it will now require `--persistent off` to disable it. * [Linux (mainly)] Improve responsiveness of API when it initially launches by not requiring that the initial discovery has fully completed before replying to basic requests that don't require such discovery to complete. * Fix issue that could cause firmware update to fail to start. * Fix issue that could cause the battery update to stop triggering. * Fix the result of RootLocationID in cbrx_discover('all') results to be the actual root location ID for hubs such as the PowerPad15 or SuperSync15. * [Windows] Fix some cases where a USB Flash Drive's drive letter was not detected if there was a case mismatch between the device ID and the USB serial number. Changed to match by the unique device ID instead of serial number. * [macOS] No longer requires Rosetta to be installed to install CAPI on ARM architecture. ## 3.10.0 - Thu, 24 Nov 2022 * Implemented more thorough discovery of attached USB drives to include devices such as USB SCSI drives and their mount points. This also adds a `"Volumes"` field to the existing `"FlashDrive"` information to list all volumes on the USB device. We have not removed the existing information (that was restricted to a single mount point) to remain backwards compatibility. * Fix rare crash that could cause timers to stop working. * [macOS] Fix recorder service install failing to create a valid plist file. * [Linux] Fix issue that could cause duplicate entries in the USBTree when Thunderbolt hubs are present and have a non-Thunderbolt child hub. * [macOS] Fix issue with not showing hubs with older Mac hardware (circa 2017). ## 3.9.2 - Mon, 14 Nov 2022 * Fix issues with dynamic hubs not responding correctly if very recently opened. ## 3.9.1 - Wed, 09 Nov 2022 * Fix issue where USB notification events could occur in the wrong order, leading to confusing in both the API and external event listeners. ## 3.9.0 - Fri, 07 Oct 2022 * Teach API how to update firmware for latest hardware. * [macOS] Fix issue where two devices being removing between 250ms and 1sec of each other could cause one of the devices to appear to still be present. * Fix issue of setting port modes and other settings that could appear to fail. * Ensure when LiveViewer runs the bundled API that those bundled instances check whether the API proper is already running and just exit if it is. * When started as a service, ensure that any LiveViewer bundled instances of the API/Recorder are asked to exit immediately. * Fix some crashes caused when exiting the API or Recorder services. * Fix issue with API becoming unresponsive to a hub until all opened handles are closed and opened again. * [Linux] Fix crash or infinite loop after a USBTree update. ## 3.8.1 - Tue, 11 Oct 2022 * [macOS] Fix issue of API getting confused about hubs when they are moved between different ports. ## 3.8.0 - Thu, 08 Sep 2022 * Remove requirement of running ADB executable to query Android battery information and instead make direct connection to the running ADB server. This fixes issues such as the API service not having access to the folder where the ADB executable is in. * Fix rare crash with timers that are removed while they're already running. * Address long wait times for cbrx_discover('all') when there are several hubs, especially if one of those is unresponsive. * Fix crash or hang when a USB device has invalid descriptor information. * Fix data returned from recorder to LiveViewer when the requested step size is exactly 30 seconds which caused gaps in the graphs due to time slippage where recorded data is always just a little over 30 seconds. * Fix recorder from failing to ever restart if there was an issue, such as failing to connect to the API. * [Linux/macOS] Fix issue of getting stuck in a loop of crashing. * [macOS] Fix issue of the API not starting (affected 3.7.0). * Fix cbrx_connection_set errors, such as changing port mode. The action was always taken, but reported as a failure. ## 3.7.0 - Wed, 10 Aug 2022 * [Linux] Add a new --persistent option (to be used alongside --install) to make the service run all the time instead of being an on-demand service. This can help with responsiveness of API requests when the USB scan takes too long in on-demand scenarios. * Add a few missing dictionary items that are in API reference but not in API. * Port.N.USBStrings * Port.N.Voltage_10mV * TotalPower_W * TemperatureMax_C * Fix definition for USB descriptor for OTG devices. * Fix cbrx_connection_cli and a few other internals from interfering with each other when they run. * Fix issue with aligning USB3 and USB2 trees when their depth is not equal. * [Linux] Fix deb package not having dependency to libudev1. ## 3.6.0 - Wed, 29 Jun 2022 * Added HostPortLocationID field to cbrx_discover('all'). This is the USB node that handles the serial communications to the hub. * For USB3 hubs, added USB3CompanionLocationID field to cbrx_discover('all'). This can be used to identify the USB3 part of the tree from cbrx_get_usb('tree'). * Implemented more reliable and platform independent detection of USB3 to USB2 companion mapping. * Fix rare crash that could occur when a socket connection was being closed and there was still pending data in the out buffer. * [macOS] Fix issues when crash handler not restarting the service. * Give more meaningful feedback if ADB path cannot be determined, such as if the server is started from within a user's folder, which the service may not have access to. * [Windows] Fix issue that caused a build system behaviour change to mean the API now required MSVC runtime libraries. ## 3.5.0 - Fri, 10 Jun 2022 * Removed the self-signed certificate. There is now a cbrx_certificate command to supply your own certificate and private key for the API to use. See the API reference for details. Both the API and the Recorder will use the same certificate once defined. Existing socket connections are left alone if the certificate changes. New SSL connections will use the updated certificate. The listen socket will only listen on 0.0.0.0 if there is a defined certificate, otherwise will fall back to localhost only connections. This is updated automatically if the certificate configuration changes. * Add cbrx_get_usb('descriptors', "serial_number" / locationID) method to retrieve all information regarding a USB device that is available. This is essentially an entire dump of information relating to Chapter 9 of the USB 3.2 specification for the specified device. Devices can be queried either by their serial number, or by their location ID. With an optional 3rd argument to retrieve the raw bytes from descriptors in either 'hex' or 'base64' strings. * You can also get the USB tree now via cbrx_get_usb('tree'). We already had the cbrx_get_usbtree method, but felt this change was good for future proofing. The old method will continue to work indefinitely. * Fix issues where some expected result errors from cbrx_connection_set were not fed back to the JSON response correctly, resulting in misleading errors. * [Windows] Re-factored USB tree scan to simplify things internally and allow capture of lower level properties. This means we can now capture Windows problem codes (The ones you see in Device Manager when a device cannot start). These are made available in "USBErrors" output in cbrx_get_usb('tree') and individually for USB devices in PortInfo. You can look forward to seeing this information in a future version of LiveViewer. * [macOS] Fix issue not finding hubs when using the USBLimitFix that forces USB to use EHCI instead of XHCI. * [Linux armhf] Fix USB tree scan causing stack corruption. * Fix incoming IPv6 addresses not being recognised as loopback addresses if they're mapped from IPv4 addresses. * Fix responsiveness in API when hundreds of requests are made in quick succession. * Fix issue that caused USB events to be missed while a USB tree scan was already underway, which could lead to devices not appearing in LiveViewer or from relevant API queries. ## 3.4.3 - Fri, 10 Jun 2022 * [macOS] Fix USB nodes not being found when connected to the standard USB ports on the back of a MacMini9. ## 3.4.2 - Fri, 10 Jun 2022 * Fix lack of rebooting and rebooted notification after a hub completes firmware update. ## 3.4.1 - Wed, 08 Jun 2022 * [Windows] Fix crash in USB scan under certain hardware conditions. ## 3.4.0 - Tue, 24 May 2022 * Capture USB errors and make them available to PortsInfo and the like. These can be errors related to invalid configuration descriptors that can help to identify issues with USB devices. See PortsInfo in API reference for possible errors. * Properly detect Android and Apple devices based on their Interface descriptors to optimise battery info collection. Also provide the new `"DeviceType"` field in PortsInfo that can be `"Apple"` or `"Android"`. * [macOS] Read USB version from USB device descriptor's bcdUSB field rather than guessing it based on reported speed. * Fix cbrx_connection_get("Settings") from showing stale settings if they were updated between calls, or externally from the API. ## 3.3.2 - Mon, 23 May 2022 * [Windows] Fix detection of individual Thunderbolt root controllers. ## 3.3.1 - Wed, 18 May 2022 * Fix issue where a hub could be forgotten, or report incorrect devices attached if it moves around on the USBTree. This was often the case when dealing with Thunderbolt hubs on Windows as this would usually cause the entire tree to change. * Fix rare crash if a request for USB tree data was received while a device was being removed. ## 3.3.0 - Wed, 02 Feb 2022 * PortsInfo, PortInfo.N and get_usb_tree now include USB endpoint usage information. These are represented as `Endpoints: {"Active", N, "Maximum": N}`. Active are for the current USB configuration that the device is using. Maximum are for the largest configuration that the device can choose to use. * They also now include the device power state if not `D0` (fully powered). These are represented by the fields `USBPowerState` and `USBPowerStateMeaning`. These can respectively be `D1` `Off`, `D2` `Low power`, `D3` `Deep sleep`. * The same API queries will now also provide USB connection speed information, as well as connection speed capability when its a USB3 device. This information can indicate that you are using the wrong cable, if for example, the USBSpeed.Speed field says '480Mbps', but the USBSpeed.Capability.Speed field says '5Gbps', which could indicate that a USB3.1 device is connected via a USB2 cable. USBSpeed.Speed will indicate one of: `1.5Mbps`, `12Mbps`, `480Mbps`, `5Gbps`, `10Gbps` or `20Gbps`. There is also a `USBSpeed.Description` which will describe this speed as one of `Low`, `Full`, `High`, `SuperSpeed`, `SuperSpeedPlus` or `SuperSpeedPlusBy2`. * The USBTree query (cbrx_get_usbtree) will now contain extra elements in the root indicating the host controllers that the child hubs and devices are connected to. This includes a new field `"EndpointMemoryUsed"` and `"EndpointPeakMemoryUsed"` which will indicate in bytes how much of the host controller memory has been consumed by endpoint usage on the host controller hardware, and the maximum usage seen so far. Typically, the available memory on an older Intel chipset controller is 512Kib. Other controllers, such as ASMedia xHCI controllers and newer Intel controllers will have more available endpoint memory. * Add USBConnectionError to USB nodes and PortsInfo information that are not considered connected which may help to determine USB errors. This can be any of: DeviceFailedEnumeration, DeviceGeneralFailure, DeviceCausedOvercurrent, DeviceNotEnoughPower, DeviceNotEnoughBandwidth, DeviceHubNestedTooDeeply, DeviceInLegacyHub, DeviceEnumerating, DeviceReset. * Remove duplicated USBTree information in `PortInfo.N` and `PortsInfo`. This will largely now be restricted to endpoint information and the new USB information described above, except for child items if there is a hub connected. * [macOS] Fix issue where ports on ThunderSync U16 were not mapped correctly. * [macOS M1] Due to changes to the internal USB architecture for M1 macOS, the USB scan has been re-written for macOS to allow non-Thunderbolt USB devices to be detected correctly. * Added `Port.all.LocationID` to retrieve information about all ports and their possible location IDs. Without additional arguments, this returns an object keyed by port number with `"USB2"`, `"USB3"` and `"Current"` entries. `"USB3"` will only be present for a USB3 hub. Current represents the current location ID of the device connected. This can vary between the USB2 or USB3 entries depending on the device type. If specified with an extra `"USB2"` or `"USB3"` argument, then the return value will be a single level object keyed by port number and contain only the location IDs for that USB version. * Port errors for Universal chargers (PowerPad, SuperSync, ThunderSync3-16 etc) will now be detailed in `"PortErrorFlags"` field of PortInfo. * [macOS] Fix issue where example scripts were put in wrong folder during install, and so would never configure correctly. * [Windows] Simplify installation and removes FTDI driver install as these drivers are installed automatically by Windows. * [macOS] Added automatic workaround for Apple devices that fail to appear in Apple Configurator and other similar tools. This should mean Apple devices will appear promptly in all cases whilst the API is running. Note that this was not a fix for anything, but rather a nudge to the OS that it may have overlooked a device. * Fix for not being able to clear notifications mask by supplying empty array. ## 3.2.9 - Wed, 13 Apr 2022 * [Linux] Fix crash in avahi cleanup. ## 3.2.8 - Mon, 28 Mar 2022 * Fix crash in `'Health'` response if a firmware update has just been triggered. ## 3.2.7 - Tue, 22 Mar 2022 * Re-implement cbrx_connection_closeandlock and cbrx_connection_unlock. ## 3.2.6 - Thu, 17 Mar 2022 * [Windows] Implement a more robust fix for chained ThunderSyncs that replicate the same devices from the first in the chain to the rest down the line. ## 3.2.5 - Tue, 08 Mar 2022 * Publish telnet status interface on localhost instead of publicly. ## 3.2.4 - Thu, 03 Mar 2022 * Stop reporting battery level as 0 when a device has not yet been paired. ## 3.2.3 - Tue, 22 Feb 2022 * Fix occasional crash during discovery. ## 3.2.2 - Fri, 18 Feb 2022 * [Windows] Fix issue where chained ThunderSyncs would replicate the same devices from the first in the chain to the rest down the line. ## 3.2.1 - Wed, 02 Feb 2022 * Ensure that current port states are refreshed before responding to a cbrx_discover('all') when the API had currently been idle. This ensures that devices are correctly populated, instead of populating with the previously cached state. * Cope better with corrupted data from a hub's CLI. * Fix a few missing dictionary values. ## 3.2.0 - Mon, 31 Jan 2022 * Added support for SSL based https and wss (Secure WebSocket) connections. This is a work in progress and currently uses a self-signed certificate, however the content is still encrypted. Most likely, we'll provide a method for customers to supply their own CA signed certificate and private key for the API to use for SSL connections. * Add RebootDevices and Port.N.RebootDevice to set dictionary to reboot all/specified trusted Android or paired iOS devices. ## 3.1.5 - Thu, 13 Jan 2022 * [Windows] Fix installer that could leave very old examples around in wrong folders that could confuse LiveViewer. ## 3.1.4 - Tue, 11 Jan 2022 * [macOS] Fix resource leak issue in USB tree scanning which could cause the service to stop functioning correctly after several days of use. ## 3.1.3 - Tue, 11 Jan 2022 * [Linux] Fix issue with updating CambrionixRecorderService binary while it is running. ## 3.1.2 - Wed, 05 Jan 2022 * Improvements to python async example ## 3.1.1 - Wed, 05 Jan 2022 * Fix bogus notification that a hub has become unresponsive when a hub connection handle times out due to inactivity. * [Linux] Fix service configuration to prevent parse errors from systemd. ## 3.1.0 - Wed, 08 Dec 2021 * Now discovers USB flash drive mounting points and makes this information available in PortsInfo, cbrx_discover('all') and a port's 'FlashDrive' get function. Note that this is currently limited to the first partition found on a flash drive. ## 3.0.2 - Thu, 02 Dec 2021 * [Linux] Fix issue where a USB tree discovery never completes, causing the API to be left in a bad state never to update it again. * [macOS] Fix issue where a serial connection could get frozen while shutting down, eventually causing the service to run out of file handles. * [macOS] Deal with odd macOS issue that could cause large portions of data from the hub's CLI to be lost which caused the API to get confused and unable to parse the hub's state. ## 3.0.1 - Wed, 17 Nov 2021 * [Linux] Fix issue when service is triggered by systemd and cbrx_discover is run before the actual discovered results are ready. ## 3.0.0 - Wed, 13 Oct 2021 * Significant re-write of internal system responsible for discovery of hubs and usage of serial port to increase reliability and responsiveness. * Serial connections to Cambrionix hubs are now closed within a few seconds when not in use after a `cbrx_connection_close` command, or after 30 seconds due to timeout. This allows immediate usage of a hub's serial interface (such as via PuTTY) when it is not directly in use. * Improvements to API reliability after a hub's firmware has been updated and the hub is rebooted. * Fixed issues with updating firmware on chained hubs (such as with Unidock). Parent hub's are not rebooted until child hubs have completed their own update. * USB Tree scanning occurs four times faster, leading to improvements to the responsiveness of USB devices being added or removed and appearing or disappearing via USB information, such as to LiveViewer. * [Linux] Fix issues with running the CambrionixRecorderService under Linux. This can now be successfully enabled after installing on Linux by running: `sudo /usr/bin/CambrionixRecorderService --install`. * [Linux] Fix issue that cause Cambrionix services to log everything to syslog rather than only errors and warnings. * In the event of a crash, the services no longer re-generate duplicate crash logs for the same crash, but instead increment a counter in an associated file with the crash. It will also clean up old crash logs from previous versions since they likely out of date. * **[BREAKING CHANGE]** Behaviour changed for Battery query of Android devices. It is now required to have the ADB server running independently in order to fetch Android battery information. This was necessary because it is quite normal for the ADB process to be logged in as a specific user with the authority to query the device. Therefore, the API will no longer attempt to query Android battery information if the ADB process is not already running, and nor will it attempt to start the service itself, as this can cause issues with ADB inheriting handles from the API and causing its own issues. You can start the adb server by running the following command in a terminal, or during your normal system startup: `adb start-server` ## 2.21.18 - Tue, 28 Sep 2021 * Fix issue where updated jsonrpc_websocket library Python 3.4+ broke the new Python asyncio examples. ## 2.21.17 - Tue, 21 Sep 2021 * Ensure hub discovery is not run multiple times simultaneously. ## 2.21.16 - Fri, 17 Sep 2021 * Fix battery update from stalling when it thought there was no API connections. ## 2.21.15 - Fri, 20 Aug 2021 * For USB devices that draw zero power, still allow them to show as an attached device if they are present on the USB tree. Note that this is in conflict to what the hub will report (i.e. port is not attached) via it's 'state' command because the hub considers a device that draws no power to be detached. ## 2.21.14 - Tue, 17 Aug 2021 * Fix occasions during battery update could cause the API to appear to drop connection to the hub or time out. ## 2.21.13 - Wed, 11 Aug 2021 * Fix issue where Linux could skip discovering new USB devices. ## 2.21.12 - Thu, 22 Jul 2021 * Add support for Cambrionix TS3-C10 Type-C Desktop Charger. ## 2.21.11 - Fri, 18 Jun 2021 * Ensure cbrx_connection_set errors 'Error setting value' include meaningful error information from the hub if applicable. ## 2.21.10 - Fri, 18 Jun 2021 * Fix issue that could cause battery update loop to run excessively when there are no devices with battery information. ## 2.21.9 - Wed, 09 Jun 2021 * [macOS] Fix issue which can cause firmware update to not function on macOS 11.14. This appeared to be a bug in macOS itself as we found a lot of chatter about the same thing. ## 2.21.8 - Fri, 28 May 2021 * Fix issue where a hub may not be discovered if it has a newer version of FTDI chip. ## 2.21.7 - Fri, 28 May 2021 * Fix issue with excessive CPU usage when a lot of 'set' commands are issued at the same time. ## 2.21.6 - Mon, 24 May 2021 * Update gate state parser to deal with ModIT MCB firmware 0.10. ## 2.21.5 - Fri, 21 May 2021 * Fix issue when cbrx_connection_cli was used with a command that was also dealt with internally to maintain hub states. ## 2.21.4 - Wed, 19 May 2021 * [Windows] Fix USB tree scanning when using the Fresco Logic Thunderbolt drivers, as apposed to the Windows supplied ones. ## 2.21.3 - Wed, 19 May 2021 * Internal fix to support LiveViewer Test suite. ## 2.21.2 - Mon, 10 May 2021 * [macOS] Fix issue with dependent libraries that targeted most recent version of macOS and so would not run on an older system. ## 2.21.1 - Tue, 27 Apr 2021 * [Linux] Fix issue where API could get into unresponsive state after initial connection. ## 2.21.0 - Fri, 16 Apr 2021 * Added new asynchronous Python example that uses the Python 3.4 asyncio functionality. This is now the preferred method of using Python with the API, and all older Python 2.* examples have been deprecated and moved to a sub- folder. * Made the old Python examples more tolerant (work) with being run with different Python versions. * Added new C# example for Windows and macOS. * Added new VB.NET example for Windows. ## 2.20.6 - Wed, 14 Apr 2021 * Fix issue where recorder can truncate the response data if it is too large. ## 2.20.5 - Tue, 13 Apr 2021 * Fix issue with recorder service using CPU when idle. * Fix issue with recorder that meant it would often not record hub and device states. ## 2.20.4 - Thu, 01 Apr 2021 * [Linux] Account for oddity in Linux where the service triggered socket does not work, so the service exits for re-triggering. ## 2.20.3 - Tue, 30 Mar 2021 * [Linux] Fix issue where the service could fail to exit because the startup had not fully completed. ## 2.20.2 - Fri, 26 Mar 2021 * [Linux] Fix crash issue when a connection is made as the service is exiting. ## 2.20.1 - Thu, 25 Mar 2021 * Fix issue which could cause 1 thread to spin using CPU. * [Linux] Fix issue with service not quitting in the normal manner after receiving API requests via HTTP GET. ## 2.20.0 - Mon, 15 Feb 2021 * Add configuration options for battery updates. These can be set with cbrx_config_set or via LiveViewer 2.17.0 onwards. Also lowered the default update frequency from 20 to 60 seconds, and set the default concurrency to 2. ## 2.19.2 - Wed, 17 Mar 2021 * [Windows] Fix issues when moving a ThunderSync hub between host ports which would cause the hub's ports to subsequently be assigned the wrong numbers. ## 2.19.1 - Thu, 04 Feb 2021 * Fix cbrx_discover("all") returning no devices when there's no recent cbrx_connection to that hub. ## 2.19.0 - Mon, 01 Feb 2021 * Support for LiveViewer notifications indicating when hub's are not connectible because their serial port is already open by another application. ## 2.18.3 - Fri, 29 Jan 2021 * [Linux] Fix service issues. ## 2.18.2 - Wed, 27 Jan 2021 * Fixed an issue introduced in 2.16.5 where discovery hash would not be stored, causing multiple discoveries of hubs and notifications therein. * Correct issue with logging locations and empty log files introduced in 2.18.0. ## 2.18.1 - Tue, 26 Jan 2021 * Fixed an issue where cbrx_connection_get for ports could return empty results when devices are present. ## 2.18.0 - Fri, 15 Jan 2021 * Support running in bundled mode from within LiveViewer. This allows you to run LiveViewer without installing the API. If you need scripting support when LiveViewer is not running, then you should still install the whole API, which you can now do from the LiveViewer settings. * Fix crash in logging if recorder is running. ## 2.17.1 - Wed, 20 Jan 2021 * Fix issues with standard USB hubs and devices not being visible to the API on Apple M1. ## 2.17.0 - Tue, 10 Nov 2020 * [macOS] Support for Native Apple Silicon. All API binaries are now Universal x86_64 and arm64. ## 2.16.7 - Tue, 12 Jan 2021 * Fix issue on Apple M1 where Thunderbolt hubs would not show information about connected devices. * Fix issue detecting a SuperSync15 device on macOS when the LocationID of the hub starts with a 0. ## 2.16.6 - Fri, 06 Nov 2020 * Fix issue of starting ADB twice simultaneously which lead to Android battery reading issues. ## 2.16.5 - Tue, 03 Nov 2020 * Fix crash in firmware updater. * Fix issues with detecting SuperSync on macOS and Windows when it has no firmware. * Fix 10 second connection delay when a hub has no firmware. ## 2.16.4 - Thu, 29 Oct 2020 * Fix crash in timers that could cause the API to stop detecting new devices. ## 2.16.3 - Thu, 29 Oct 2020 * [Windows] Ensure all installations of Python are configured during installation to cure problems where a different version of Python in the path was not configured and fails to run test script. ## 2.16.2 - Mon, 26 Oct 2020 * Fix issues with base64 library on very old processors. ## 2.16.1 - Thu, 15 Oct 2020 * Fix extended battery information for iPhone8 and later. * Always returns error information on battery data collection, even with paired iPhones which may still refuse certain information if locked. ## 2.16.0 - Tue, 13 Oct 2020 * Add logging configuration support. ## 2.15.5 - Mon, 05 Oct 2020 * Fix issue with API not responding on macOS after a reboot. ## 2.15.4 - Sat, 03 Oct 2020 * [Linux & macOS] Fix issue with serial communications to hub that could cause it to stop updating correctly. ## 2.15.3 - Tue, 29 Sep 2020 * Fix some `Port.N.*` dictionary items lingering long after a device is removed. ## 2.15.2 - Wed, 23 Sep 2020 * Fix parsing issue on PDSync with older firmware. ## 2.15.1 - Tue, 22 Sep 2020 * [Linux] Fix issue with detecting removed USB devices after the first device was removed. * [Linux ARM] Fix WebSocket handling which corrupted the return data. ## 2.15.0 - Wed, 16 Sep 2020 * Fix issues with EnabledProfiles, Port.N.Profiles and Profile.N.enabled. * Change version numbering from N.N.BUILD to standard semver.org method of N.N.N+BUILD or N.N.N-beta+BUILD and so on. ## 2.14 - Tue, 18 Aug 2020 * Fix RFID reader functionality broken in 2.13. ## 2.13 - Fri, 31 Jul 2020 * Fix issues with Thunderbolt showing wrong port mappings when unplugged and reconnected. * Fix issues with some cbrx_connection_set combinations not working after a hub is unplugged and reconnected. * Fix issue with EtherSync discovery stalling in calls to Bonjour API causing further discoveries to also stall. * Fix issues with Android battery information collection stalling because adb hangs. * Improve RFID reader so that removal of RFID tag can be detected as well as arrival. ## 2.12 - Wed, 22 Jul 2020 * Add Battery Health for iOS devices. This should provide the same result as the Battery Health page in iOS introduced with 12.3. * Add IMEI and WiFi Mac Address to device's details in port results. ## 2.11 - Fri, 29 May 2020 * Add Linux ARMv7 support - Tested on oDroid XU4 with Ubuntu 18.04 LTS. ## 2.10 - Thu, 14 May 2020 * Fix issue where hubs could disappear from the API after a reboot. * Fix issue where Linux could misread the USB location of a hub. ## 2.9 - Thu, 16 Apr 2020 * To ensure we don't get further issues fixed by 2.6, we're implementing a fail-safe that will automatically launch extra worker threads if jobs are not serviced within 200ms by adding Watchdog to internal task manager to ensure jobs are always serviced in good time. ## 2.8 - Tue, 14 Apr 2020 * Fix issue during startup where USB tree scan would end up waiting for a lock for discovered iOS devices that were currently being provisioned. ## 2.7 - Tue, 14 Apr 2020 * Fix issue where an exception in IOContext thread would cause the thread to exit and cause the API to stop responding. ## 2.6 - Wed, 18 Mar 2020 * Fix libimobile timeouts causing all task manager threads to be busy and not service further jobs. * Responsiveness of the initial opening of a hub greatly improved so that far less work is required internally before further commands can be issued. * Battery information now included in `cbrx_discover("all")` data. ## 2.5 - Mon, 09 Mar 2020 * libimobile has been built into the API now for a more reliable method of collecting battery information for iOS devices. ## 2.4 - Thu, 13 Feb 2020 * Add `cbrx_hub_get`, `cbrx_hub_set`, `cbrx_device_get` and `cbrx_device_set`. * Added `"rfid-received"` as a new notification type. ## 2.3 - Wed, 05 Feb 2020 * Add Node.JS example script. * Fix NVRAM settings_set error. * Fix generated HTML documentation styling. * Add `cbrx_connection_cli` method. ## 2.2 - Mon, 19 Aug 2019 * Many stability and performance improvements. * Add `cbrx_notifications`. * Add `cbrx_firmware`. * Add support for LiveViewer 2 which includes Websocket and HTTP GET capabilities. * Add `CambrionixRecorderService` as optional installation service to record history of hubs and devices. * Add battery monitoring support. * Add http request support. * Add Websocket support. * Add built-in firmware updater. * Add dynamic hubs. ## 2.1 - Mon, 08 Apr 2019 * Fix various typos and change instructions for the new C++ API installation. * Add support for Thunderbolt devices under Windows. * Add API functions `cbrx_find` and `cbrx_get_usbtree`. * Document removal of `cbrx_connection_set_password` and the addition of its replacement argument to `cbrx_connection_open`. * Change documentation versioning to align with API version (`api_major`.`api_minor`). ## Known Issues * EtherSync devices are not supported. Please use the classic API for these. * Linux ARMv7 requires latest GCC libraries. * Currently only Debian/Ubuntu flavours of Linux are supported.