===============
Version History - openSeaChest_Basics
===============
v0.0.1  12-Aug-2014  openSeaChest Windows, initial beta test release
v0.0.2  13-Aug-2014  Stability improvement
v0.0.3  05-Sep-2014  System scan improvements
v0.0.5  08-Oct-2014  Added set max capacity (destroke) and restore native max
                     for SATA. Fixed a bug where -i would crash on an Intel
                     RAID device.  Added SMART Trip (MRIE) determination for
                     SAS drives.  Added options to manage drive power
                     settings.  Added a spin down command.  Added option to set
                     the SATA drive default maximum interface speed.  Added SAS
                     drive worldwide number to device information.  Added set
                     max capacity (destroke) and restore native max for SAS.
                     Added Sanitize Freezelock for SATA.  Added data erasure
                     options controlled by range of LBA or by time. Added
                     option to manage SAS LED activity on power pin 11.
v1.0.0  20-Oct-2014  Activated support for externally attached USB storage
                     devices.  This support applies to USB-SATA bridges that
                     support 16 byte SAT Passthrough Command Descriptor Blocks
                     (CDBs). This means that many older USB devices will not be
                     recognized.  Added time estimate to Long DST information.
                     Added Write Cache and Read Cache enable disable commands.
                     Added ATA Security Password Disable (see notes above for
                     limitations and details).  Added USB child drive
                     information option.  Added HDD annualized workload rate
                     (Odometer) for SATA to the device information output.
                     Added SSD provisioning.
v1.0.1  30-Oct-2014  Better detection of Seagate products within USB enclosure.
                     SAS Sanitize command completion status fixed.
v1.0.2  20-Nov-2014  SATA Sanitize Overwrite fix and new message when the
                     command is not supported.  Shortened DeviceInformation to
                     DeviceInfo.  Typos fixed. SATA SMART attributes clean up
                     and raw values reorganized. Added Power On Hours to USB
                     devices. eraseRange on SAS SSD now supports the entire
                     device using UNMAP when startLBA is 0 and no endLBA is
                     given.
v1.0.3  04-Dec-2014  Added -F, --scanFlags option which allows selection of
                     specific interfaces.  Added --echoCommandLine.
v1.0.4  17-Apr-2015  Added --transitionPower for SATA and SAS.  Modified
                     --checkPower to not disturb the current power mode of the
                     drive.
v1.0.5  14-Jul-2015  Added --testUnitReady for SATA and SAS.  New name is
                     openSeaChest Basics.  Improved device discovery. Added "info"
                     to Read Look Ahead and Write Cache feature management,
                     shows the current setting.
v1.0.6  12-Aug-2015  Improved device discovery.  Corrections to verbose output.
                     Bug related to setting read look ahead and write cache
                     have been fixed for SAS.
v1.1.0  12-Oct-2015  1_7_0 libraries.  Added enhanced version information.
                     Modified Short DST command line polling arguments to match
                     those of SeaChest_SMART.  Converted Overwrite, Trim and
                     Unmap erase commands to match those in SeaChest_Erase.
                     Removed Sanitize, ATA Security Erase commands and
                     --disableATASecurityPW, see SeaChest_Erase utility for
                     these operations.  Removed PowerChoice settings commands,
                     see SeaChest_PowerChoice for these operations.  Added
                     --downloadMode to provide greater control over firmware
                     control options. download.  Added -sat12byte to increase
                     compatibility.  Added --SATInfo to compare ATA vs SCSI
                     identification differences.
v1.1.1  22-Mar-2016  1_9_1 libraries.  Added new verbosity level. Added
                     --onlySeagate restriction.
v2.0.0  02-May-2016  Added --modelMatch and --onlyFW filters. Added logic
                     change for --overwrite and --trim commands to assume Max
                     LBA (end of the drive) as the range when the erase range
                     is not specified.  --longDST removed, now only available
                     in SeaChest_SMART.
v2.0.2  19-May-2016  1_9_2 libraries fixed scan information from ATAPI devices.
                     Fixed a bug where we could accidentally clear some stored
                     identify data from the device structure. Fixed continuing
                     on when there was a permission denied error opening a
                     drive. Removed Long DST from Help. Fixed --checkPowerMode
                     always returning "active" on SAT interfaces (SATA over
                     SAS).
v2.0.3  15-Jun-2016  1_9_3 libraries fixed issues with ATA secure erase
                     commands. Fixed bugs with --modelMatch and --onlyFW
                     filters.
v2.1.0  06-Jul-2016  1_10_0 libraries add --forceATA and --forceSCSI.  Added
                     --displayLBA.
v2.1.1  14-Jul-2016  1_10_1 libraries adds SMART and power management
                     functions, format polling, endianess detection, buffer
                     size fixes, SAS device statistics, Win32 IOCTL
                     pass-through fix on Win8 and higher. Added support for
                     maxLBA keyword.
v2.2.0  01-Sep-2016  1_11_1 libraries updates to various printed message,
                     minor bug fixes. Fixed --SATInfo command.
v2.2.2  21-Sep-2016  1_11_2 libraries updates adds --forceATADMA, --forceATAPIO
                     and --forceATAUDMA  (SATA Only).
v2.3.0  10-Oct-2016  1_11_4 libraries updates. Support for multiple devices.
                     Added --activateFW.
v2.3.0  25-Oct-2016  1_11_5 libraries updates improved LaCie  detection, adds
                     SAT Vendor ID, SAT Product ID, and SAT Product Revision to
                     the -i --SATInfo output.
v2.3.1  27-Oct-2016  1_11_6 libraries updates WWN detection.  Added
                     --enableLegacyUSBPassthrough
v2.3.1  03-Nov-2016  1_11_7 libraries fixed issue with SAS EPC power mode
                     settings.
v2.3.2  13-Dec-2016  1_11_10 libraries fixes a problem when using maxLBA without
                     the corresponding command range option, SAS power mode
                     setting, and Sanitize erase patterns.
v2.4.0  23-Feb-2017  1_13_0 libraries adds support for SAS 12.0Gb/s and
                     22.5Gb/s physical bus speeds, support for double buffered
                     passthrough IOCTLs. Add --hideLBACounter, --sasPhy. New
                     -F, --scanFlags [options: ignoreCSMI allowDuplicates] for
                     Windows tools. Add CSMI support to all Windows version
                     tools.
v2.4.0  06-Mar-2017  1_13_2 libraries adds Enhanced device information output
                     for SAS features.
v2.5.0  01-Jun-2017  Adds the child drive matching options --childModelMatch,
                     --childOnlyFW, and --childNewFW.
v2.6.0  14-Jun-2017  1_15_0 libraries adds bug fix malformed command line
                     should exit with code = 1; added detection of parallel ATA
                     and SCSI speeds; temperature data on ATA now uses the
                     values from the SCT status log or device statistics log.
                     Bug fix where the "-d all" was not filtering out csmi
                     drives like it is supposed to causing duplicate drives to
                     show up.  --idd now supports SAS.  --idd [short | long |
                     repair]  replaces '70 | 71 | 72' syntax. --abortIDD added.
v2.7.0  14-Jul-2017  1_16_1 libraries adds support for ATA drives that have the
                     Sense Data Reporting feature enabled, changes to how we
                     interpret the completion status from the drive, new Sense
                     Data ASC, ASCQ definitions from SPC5. Adds --Scan (or -S,
                     note the capital S) aggressive system scan.
v2.7.0  27-Jul-2017  1_16_2 libraries enhances Seagate brand detection.
v2.7.0  19-Sep-2017  1_16_4 libraries fixes SCSI "--progress format", added
                     reading remanufacture time for SAS when the drive reports
                     a time, fixed SAS --abortDST.
v2.7.0  25-Sep-2017  1_17_0 libraries adds improved SATA device discovery on
                     SAS adapters, added NVMe read, write & Flush commands.
v2.7.1  10-Oct-2017  1_17_1 libraries adds Better handling of NVMe as a SCSI
                     device, SAT library strings, and fixes to Read-Buffer
                     error history (ISL). Updated copyright notice, invalid
                     command line options now only display an error instead of
                     long help. Added showing the SMART trip failure reason when
                     possible.
v2.7.1  12-Oct-2017  1_17_3 libraries improves Fast-Format compatibility on SAS.
v2.7.1  26-Oct-2017  1_17_5 libraries fixes SATA drive discovery behind HBAs
                     that don't show as SATA and don't support the SAT VPD
                     page; added Automatic fallback to 12byte CDBs during
                     initial device discovery;  integrated fixes for SAS
                     firmware download and fixes for SAS LongDST time
                     calculation; added detection of TCG Pyrite and Opalite
                     drives.
v2.7.1  31-Oct-2017  1_17_6 libraries adds ATA Security compatibility with SATL
                     on some LSI adapters, corrects firmware download issue
                     under Windows 10 API.
v2.7.1  02-Nov-2017  1_17_7 libraries fixes Long DST time on SCSI/SAS products.
v2.7.2  19-Apr-2018  1_18_0 libraries improves device detection of CD-ROM and
                     USB flash drives, support for early 90's PATA drives that
                     don't support LBA mode, bug fix where the last digit of
                     the SCSI Unit Serial Number was being dropped, additional
                     logic for deferred download completion status. --scan
                     --onlySeagate for just Seagate drives in a large system,
                     Long Drive Self Test Time in the -i output, write protect
                     status has been added for SCSI and NVMe in the -i output,
                     IDD enhancements for SAS, IDD enhancements to allow
                     captive mode on SATA, added USB Hacks to better support
                     some odd-ball USB devices and prevent crashes and improve
                     performance for some operations on them by issuing test
                     unit ready commands when something fails during device
                     discovery, automatic fall back to SAT 10 byte commands
                     during device discovery to help work with some USB
                     devices, some Legacy SCSI support enhancements (partially
                     from USB hacks development), enhanced SD to SG mapping in
                     Linux.
v2.7.3  21-Sep-2018  1_18_2 libraries Added in reading os-release PRETTY_NAME
                     field to get the OS name under linux; NVMe enabled;  fixed
                     a bug in the ATA activate FW command; added in reading ID
                     Data log and Device statistics logs page 0 to check the
                     list of supported pages; fixed a bug in the loop used to
                     read mode pages for -i information on SAS; IDD SAS
                     improvements; fixed a bug in DST & Clean with ATA drives
                     behind SCSI controllers. Fix for --modelMatch that have
                     spaces in the name. Added additional information to the
                     banner and -V data to show support levels. Add general
                     support for NVMe and NVMe specific identify data to "-i"
                     command.
v2.7.4  18-Oct-2018  1_18_3 libraries. Added NVMe generic read command support.
v2.8.0  03-May-2019  1_19_18 libraries added per device verbosity, --deviceInfo
                     adds SAS (not SATA) FastFormat for Features Supported
                     section.
v2.8.0 10-Jun-2019   1_19_23 libraries added SNTL (SCSI to NVMe translator),
                     updated software SAT translator to use dataset management
                     XL command, fixes for issuing vendor unique commands under
                     Windows, improved fast format support detection, and
                     refactored verbose output for NVMe commands.
v2.8.1 19-Jul-2019   1_19_24 libraries. Added --noTimeLimit.
v2.9.1 19-Feb-2020   1_21_30 libraries add in check for Elevated Privileges
                     (sudo, run as administrator) before trying to talk to
                     devices, new exit code 9 if privileges are missing;
                     printing the USB VID/PID in the device info; fix to sg
                     helper to support large systems; many changes in support
                     of dual actuators (example: warning that EPC settings
                     affect multiple LUNs); overhaul to USB device detection
                     and support, incorporating a new USB hacks and workarounds
                     approach which uses a lookup table listing various USB
                     bridge VIDs/PIDs and their specific issues; separate
                     Seagate SAS SN and PCBA SN.
v2.9.2  13-Apr-2020  1_21_30 libraries, fix memory allocation during the scan
                     command.
v3.0.0  20-Nov-2020  Changed how scan-flags are parsed. CSMI rewrite and initial
                     Intel RST NVMe support added. Numerous code quality improvements
                     which fixed many potential bugs and memory leaks. Improved
                     support for openfabrics NVMe drivers. Changed permissions
                     detection to show warnings rather than errors. Removed obsolete
                     CSMI and SAT 12B CDB options. CSMI handles now show as csmi:?:?:?
v3.0.2  12-Feb-2021  Added additional language for running/aborting Seagate IDD
                     operations. Also improved argument parsing for many options so
                     that hex or decimal inputs can be given for LBAs.
v3.1.0  16-Jun-2021  Pulled in FWDL change for making the ignore final segment
                     a standalone option: --fwdlIgnoreFinalSegment
                     This is only needed when updating specific legacy products
                     to new firmware.
                     Minor USB compatibility improvements and more products added
                     to the list with their specific workarounds.
                     Updated NVMe compatibility for FreeBSD 11.
                     Analyzed SMART attribute output for Seagate SATA HDDs.
                     Support for detection and showing of concurrent positioning 
                     (new multi-actuator support from the standards).
v3.5.2  28-Feb-2023  Improved user experience with automatic FWDL mode. This will now
                     automatically do deferred download and activate or segmented
                     download automatically based on a drive's capabilities.
                     Includes new --noBanner option and new fast discovery option
                     that can be used in situations where super critical performance
                     is required at a loss of information about a drive's capabilities.
                     Help now has many more examples of the options in the tool.
                     Fixed a few bugs in scan and device discovery that could cause
                     a crash or the tool to list no devices found.
                     Added option to dump low-level info to assist with debugging.
                     Added date of manufacture info to the -i output when available.
                     Fixed some big endian compatibility issues discovered on AIX.
v3.5.2  27-Mar-2023  opensea-operations library updated to fix hybrid smart attribute
                     counters output. Also added note about DST log display order and
                     fixed attribute 198 name for Seagate HDDs.
                     Added automatic FWDL retry if deferred download fails in certain
                     scenarios to work around drive bugs.
                     Added workaround for overwrite not erasing some drives in Windows.
                     opensea-transport updated to fix CSMI scan duplicating devices 
                     found in certain scenarios.
v3.5.4  01-Dec-2023  Updated to newer opensea-libs to pull in low-level fixes.
                     Stopped reading /etc/passwd file to show username in banner.
                     Banner will now show either "admin"/"root" or "current user".
                     Improved parsing of linux distro/release information from
                     /etc/os-release file.
                     Fixed a bug in byte swap string used to get ATA MN, SN, FW.
                     Fixed a bug in getting/reporting power on hours as years, 
                     days, hours, etc where days was being truncated.
                     Fixed error reading NVMe features in Windows for drive info.
                     Fixed SAS Date of manufacture in drive info.
                     Added detection of HPA security feature.
                     Added more SMART attributes definitions for Seagate HDDs & SSDs,
                     and more definitions for Maxtor HDDs.
                     Improved temperature detection from older HDDs with only
                     SMART attribute 194 reporting current temperature.
                     Added separate warning for SMART attributes below threshold that
                     are not considered prefail/warranty attributes (aka failures).
                     Fixed output of Seagate Airflow temperature SMART attribute.
                     Added showing new capacity after changing Max LBA.
                     Fixed possible segmentation fault when reading /etc/mtab in Linux.
                     Workaround for some SAS drives on some HBAs reporting incorrect
                     response to SAT A1h CDB.
                     Fixed a bug in FreeBSD causing non-data ATA commands to report
                     all zeroes instead of expected output in RTFRs.
v3.6.2  28-Aug-2024  Pull in security updates and low-level bug fixes from opensea-libs.
                     CISS RAID device support for Linux (CCISS, HPSA, and SmartPQI drivers)
                     Fixed capacity output after changing MaxLBA value on SATA and SAS.
                     dded new options to change a device's MN when changing the maxLBA to.
                     This new feature is supported only on new products with ACS-6 
                     that support changing the MN. A log page describes the other MN's
                     available at different capacities that can be used.
                     Fixed memory leak in --progress option.
                     All config files and firmware files must now be loaded from secured directories.
                     Secured directories are owned by the user or root and do not allow writing to other users/groups.
                     Fixed incorrect parameter for activate option. Backwards compatibility in 
                     the API was able to catch this without causing an error.
                     Added SMART trip reason when SMART trip is detected (As SeaChest_SMART has).
                     Improved SMART trip detection algorithm when smart return status command
                     is not available and attributes and thresholds must be used instead.
                     SMART trip warning is now formatted according to text from SFF-8055.
v3.7.0  28-May-2025  Added support for low-level SCSI rescan in Linux when passing aggressive scan flag -S.
                     Refactor reading SCSI capacity code which may reduce total commands issued.
                     Refactored looking up supported SCSI commands with Report Supported operations codes and
                     legacy CmdDT bit in Inquiry which reduces total commands issued.
                     Source code level support for OpenBSD, NetBSD, and DragonflyBSD now available.
                     More source code hardening implemented with new bounds checking functions from
                     opensea-common library (behave similar to Annex K in C11).
                     Fixed a bug in reading device information (-i) on USB devices causing the information to be
                     incomplete.
                     Fixed big endian system support for all devices, but especially for NVMe.
                     Fixed looking up SD to SG device handles in Linux.
                     Added new exit codes for Device Not Found when opening the handle and Device Busy when
                     attempting to open a handle.
                     Enhanced file security API to display recommended actions to modify directories to be 
                     compatible with security requirements when reading or writing a file.
                     Fixed a crash when reading/writing files located at / in unix-like systems.
                     Fixed exit code when -d all or --modelMatch are used but all devices are skipped so that 
                     the exit code is not set to 0 (success) when all the devices were skipped.
                     Fixed parsing some CLI options to allow empty units like previous versions.
v3.7.2  07-Jul-2025  Fixed a bug with scan not showing any output in specific circumstances where number of successfully
                     enumerated devices is equivalent to the number of unsuccessfully enumerated devices.
                     Added new exit code for when paths are detected as insecure to be resolved by the user before
                     files will be accessed in these directories (see https://github.com/Seagate/openSeaChest/wiki/Secure-File-And-Path).
                     Fixed a check for reading correct mode page which may cause changing some SAS features to fail.
                     Fixed incorrect protocol specified in ATA download microcode passthrough command. This causes firmware updates
                     to hang when the device does not support the download DMA command.
                     Fixed NVMe firmware update in Windows 11 23H2 and 24H2.
                     Disabled extra CSMI related device scan in Windows that can cause a hang on some chipsets.
                     Added some more legacy USB devices to list of known devices to support these better when they are used.
v3.7.3  06-Oct-2025  Fixed mismatch of GNU/clang access attribute description and how the code was actually written in many
                     parts of the low-level library code. Also added const to many objects to make intention more clear and
                     reduce the chance of accidental modification to memory intended to be used in a read-only way. No known
                     bugs from this, but may affect some optimizations in the code.
                     Fixed compatibility with some newer C23 capable compilers.
                     Fixed incorrect pointer check in TRIM function causing a failure when trying to use this option with valid
                     inputs.
                     Fixed incorrect lookup for supported read defect data command in SCSI Defect list code.
                     Added automatic selection of firmware download transfer size based on drive reported information for all
                     interfaces (min/max/granularity, etc).
                     Fixed out of bounds access when generating FARM combined log (was adding NULL terminator one past end of memory).
                     Removed use of os_Update_File_System_Cache from situations where the drive may not be in a good state (still sanitizing,
                     or after a sector size change) to minimize possible system interaction issues which may disconnect the device from the
                     system.
                     Fixed read/write logic on some USB devices which reported an ATA maxlba of 0.
                     Added tracking lock/unlock requests to a tDevice to keep things in sync better between operations.
                     Refactor SCSI device read/write logic on how commands are selected and issued (10B vs 16B)
                     Removed automatic ATA passthrough reads/writes due to other side affects this created on some devices.
                     Fixed a crash on NVMe devices in Windows when using the openfabrics NVMe driver.
                     Fixed a bug that tracks the last command's sense data after issuing which may have been missed in certain situations.
