diff --git a/Interfaces/IFluxImage.cs b/Interfaces/IFluxImage.cs new file mode 100644 index 000000000..21a5e12c0 --- /dev/null +++ b/Interfaces/IFluxImage.cs @@ -0,0 +1,118 @@ +// /*************************************************************************** +// 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; + +/// +/// 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. + /// + /// 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) + /// The number of captures + ErrorNumber CapturesLength(uint head, ushort track, byte subTrack, out uint length); + + /// 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 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 indexResolution, + out ulong dataResolution, 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 000000000..6b8da1e73 --- /dev/null +++ b/Interfaces/IWritableFluxImage.cs @@ -0,0 +1,80 @@ +// /*************************************************************************** +// 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; + +/// +/// Abstract class to implement flux writing plugins. +public interface IWritableFluxImage : IFluxImage, IWritableImage +{ + /// 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 + /// 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 + ErrorNumber WriteFluxCapture(ulong resolution, byte[] index, byte[] data, uint head, ushort track, byte subTrack, + uint captureIndex); + + /// Writes a capture's index stream. + /// Error number + /// 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