From 4476f3ac41665fd3dd3a51ab2ffdccb7500290cb Mon Sep 17 00:00:00 2001 From: Rebecca Wallander Date: Mon, 6 Feb 2023 12:02:18 +0100 Subject: [PATCH 1/2] Add flux image interfaces --- Aaru.CommonTypes.csproj | 22 ++++++------- Interfaces/IFluxImage.cs | 56 ++++++++++++++++++++++++++++++++ Interfaces/IWritableFluxImage.cs | 22 +++++++++++++ 3 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 Interfaces/IFluxImage.cs create mode 100644 Interfaces/IWritableFluxImage.cs diff --git a/Aaru.CommonTypes.csproj b/Aaru.CommonTypes.csproj index a3f96dd..b990c3c 100644 --- a/Aaru.CommonTypes.csproj +++ b/Aaru.CommonTypes.csproj @@ -33,8 +33,8 @@ CS1591;CS1574 - - + + $(Version)+{chash:8} @@ -42,12 +42,12 @@ true - - - - - - + + + + + + @@ -55,9 +55,9 @@ - - - + + + diff --git a/Interfaces/IFluxImage.cs b/Interfaces/IFluxImage.cs new file mode 100644 index 0000000..772af85 --- /dev/null +++ b/Interfaces/IFluxImage.cs @@ -0,0 +1,56 @@ +using Aaru.CommonTypes.Enums; + +namespace Aaru.CommonTypes.Interfaces; + +/// +/// Abstract class to implement flux reading plugins. +public interface IFluxImage : IBaseImage +{ + /// + /// An image may have more than one capture for a specific head/track/sub-track combination. This returns + /// the amount of captures in the image for the specified head/track/sub-track combination. + /// + /// The number of captures + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + uint CapturesLength(uint head, ushort track, byte subTrack); + + /// Reads the resolution (sample rate) of a flux capture in picoseconds + /// The resolution of a capture in picoseconds + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + ulong ReadFluxResolution(uint head, ushort track, byte subTrack, uint captureIndex); + + /// Reads the entire flux capture with index and data streams, as well as its resolution + /// Error number + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + /// The capture's resolution (sample rate) in picoseconds + /// Buffer to store the index stream in + /// Buffer to store the data stream in + ErrorNumber ReadFluxCapture(uint head, ushort track, byte subTrack, uint captureIndex, out ulong resolution, + out byte[] indexBuffer, out byte[] dataBuffer); + + /// Reads a capture's index stream + /// Error number + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + /// Buffer to store the data in + ErrorNumber ReadFluxIndexCapture(uint head, ushort track, byte subTrack, uint captureIndex, out byte[] buffer); + + /// Reads a capture's data stream + /// Error number + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + /// Buffer to store the data in + ErrorNumber ReadFluxDataCapture(uint head, ushort track, byte subTrack, uint captureIndex, out byte[] buffer); +} \ No newline at end of file diff --git a/Interfaces/IWritableFluxImage.cs b/Interfaces/IWritableFluxImage.cs new file mode 100644 index 0000000..e252d36 --- /dev/null +++ b/Interfaces/IWritableFluxImage.cs @@ -0,0 +1,22 @@ +using Aaru.CommonTypes.Enums; + +namespace Aaru.CommonTypes.Interfaces; + +/// +/// Abstract class to implement flux writing plugins. +public interface IWritableFluxImage : IFluxImage, IWritableImage +{ + /// + /// Writes a flux capture. + /// + /// The capture's resolution (sample rate) in picoseconds + /// Flux representation of the index signal + /// Flux representation of the data signal + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture slot to write to. See also + /// Error number + ErrorNumber WriteFluxCapture(ulong resolution, byte[] index, byte[] data, uint head, ushort track, byte subTrack, + uint captureIndex); +} \ No newline at end of file From 62233ca4f698735055e0ad663fc1f03f00611807 Mon Sep 17 00:00:00 2001 From: Rebecca Wallander Date: Thu, 13 Apr 2023 21:04:49 +0200 Subject: [PATCH 2/2] Update flux interfaces --- Interfaces/IFluxImage.cs | 94 ++++++++++++++++++++++++++------ Interfaces/IWritableFluxImage.cs | 68 +++++++++++++++++++++-- 2 files changed, 141 insertions(+), 21 deletions(-) diff --git a/Interfaces/IFluxImage.cs b/Interfaces/IFluxImage.cs index 772af85..21a5e12 100644 --- a/Interfaces/IFluxImage.cs +++ b/Interfaces/IFluxImage.cs @@ -1,3 +1,41 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : IFluxImage.cs +// Author(s) : Rebecca Wallander +// +// Component : Flux image plugins. +// +// --[ Description ] ---------------------------------------------------------- +// +// Defines the interface to be implemented by flux image plugins. +// +// --[ License ] -------------------------------------------------------------- +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2023 Rebecca Wallander +// ****************************************************************************/ + using Aaru.CommonTypes.Enums; namespace Aaru.CommonTypes.Interfaces; @@ -10,33 +48,57 @@ public interface IFluxImage : IBaseImage /// An image may have more than one capture for a specific head/track/sub-track combination. This returns /// the amount of captures in the image for the specified head/track/sub-track combination. /// - /// The number of captures + /// Error number /// Physical head (0-based) /// Physical track (position of the heads over the floppy media, 0-based) /// Physical sub-step of track (e.g. half-track) - uint CapturesLength(uint head, ushort track, byte subTrack); + /// The number of captures + ErrorNumber CapturesLength(uint head, ushort track, byte subTrack, out uint length); - /// Reads the resolution (sample rate) of a flux capture in picoseconds - /// The resolution of a capture in picoseconds - /// Physical head (0-based) - /// Physical track (position of the heads over the floppy media, 0-based) - /// Physical sub-step of track (e.g. half-track) - /// Which capture to read. See also - ulong ReadFluxResolution(uint head, ushort track, byte subTrack, uint captureIndex); - - /// Reads the entire flux capture with index and data streams, as well as its resolution + /// Reads the resolution (sample rate) of a index signal capture in picoseconds. /// Error number /// Physical head (0-based) /// Physical track (position of the heads over the floppy media, 0-based) /// Physical sub-step of track (e.g. half-track) /// Which capture to read. See also - /// The capture's resolution (sample rate) in picoseconds + /// The resolution of the index capture in picoseconds + ErrorNumber ReadFluxIndexResolution(uint head, ushort track, byte subTrack, uint captureIndex, + out ulong resolution); + + /// Reads the resolution (sample rate) of a data signal capture in picoseconds. + /// Error number + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + /// The resolution of the data capture in picoseconds + ErrorNumber ReadFluxDataResolution(uint head, ushort track, byte subTrack, uint captureIndex, out ulong resolution); + + /// Reads the resolution (sample rate) of a flux capture in picoseconds. + /// Error number + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + /// The resolution of the index capture in picoseconds + /// The resolution of the data capture in picoseconds + ErrorNumber ReadFluxResolution(uint head, ushort track, byte subTrack, uint captureIndex, out ulong indexResolution, + out ulong dataResolution); + + /// Reads the entire flux capture with index and data streams, as well as its resolution. + /// Error number + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + /// The resolution (sample rate) of the index capture in picoseconds + /// The resolution (sample rate) of the data capture in picoseconds /// Buffer to store the index stream in /// Buffer to store the data stream in - ErrorNumber ReadFluxCapture(uint head, ushort track, byte subTrack, uint captureIndex, out ulong resolution, - out byte[] indexBuffer, out byte[] dataBuffer); + ErrorNumber ReadFluxCapture(uint head, ushort track, byte subTrack, uint captureIndex, out ulong indexResolution, + out ulong dataResolution, out byte[] indexBuffer, out byte[] dataBuffer); - /// Reads a capture's index stream + /// Reads a capture's index stream. /// Error number /// Physical head (0-based) /// Physical track (position of the heads over the floppy media, 0-based) @@ -45,7 +107,7 @@ public interface IFluxImage : IBaseImage /// Buffer to store the data in ErrorNumber ReadFluxIndexCapture(uint head, ushort track, byte subTrack, uint captureIndex, out byte[] buffer); - /// Reads a capture's data stream + /// Reads a capture's data stream. /// Error number /// Physical head (0-based) /// Physical track (position of the heads over the floppy media, 0-based) diff --git a/Interfaces/IWritableFluxImage.cs b/Interfaces/IWritableFluxImage.cs index e252d36..3b58378 100644 --- a/Interfaces/IWritableFluxImage.cs +++ b/Interfaces/IWritableFluxImage.cs @@ -1,3 +1,41 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : IWritableFluxImage.cs +// Author(s) : Rebecca Wallander +// +// Component : Writable flux image plugins. +// +// --[ Description ] ---------------------------------------------------------- +// +// Defines the interface to be implemented by writable flux image plugins. +// +// --[ License ] -------------------------------------------------------------- +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2023 Rebecca Wallander +// ****************************************************************************/ + using Aaru.CommonTypes.Enums; namespace Aaru.CommonTypes.Interfaces; @@ -6,9 +44,8 @@ namespace Aaru.CommonTypes.Interfaces; /// Abstract class to implement flux writing plugins. public interface IWritableFluxImage : IFluxImage, IWritableImage { - /// - /// Writes a flux capture. - /// + /// Writes a flux capture. + /// Error number /// The capture's resolution (sample rate) in picoseconds /// Flux representation of the index signal /// Flux representation of the data signal @@ -16,7 +53,28 @@ public interface IWritableFluxImage : IFluxImage, IWritableImage /// Physical track (position of the heads over the floppy media, 0-based) /// Physical sub-step of track (e.g. half-track) /// Which capture slot to write to. See also + ErrorNumber WriteFluxCapture(ulong indexResolution, ulong dataResolution, byte[] indexBuffer, byte[] dataBuffer, + uint head, ushort track, byte subTrack, uint captureIndex); + + /// Writes a capture's index stream. /// Error number - ErrorNumber WriteFluxCapture(ulong resolution, byte[] index, byte[] data, uint head, ushort track, byte subTrack, - uint captureIndex); + /// The capture's resolution (sample rate) in picoseconds + /// Flux representation of the index signal + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + ErrorNumber WriteFluxIndexCapture(ulong resolution, byte[] index, uint head, ushort track, byte subTrack, + uint captureIndex); + + /// Writes a capture's data stream. + /// Error number + /// The capture's resolution (sample rate) in picoseconds + /// Flux representation of the data signal + /// Physical head (0-based) + /// Physical track (position of the heads over the floppy media, 0-based) + /// Physical sub-step of track (e.g. half-track) + /// Which capture to read. See also + ErrorNumber WriteFluxDataCapture(ulong resolution, byte[] data, uint head, ushort track, byte subTrack, + uint captureIndex); } \ No newline at end of file