Files
Aaru/Aaru.Devices/Remote/Structs.cs

417 lines
13 KiB
C#
Raw Normal View History

2020-03-11 21:56:55 +00:00
// /***************************************************************************
// Aaru Data Preservation Suite
// ----------------------------------------------------------------------------
//
// Filename : Structs.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Aaru Remote.
//
// --[ Description ] ----------------------------------------------------------
//
// Structures for the Aaru Remote protocol.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
2020-12-31 23:08:23 +00:00
// Copyright © 2011-2021 Natalia Portillo
2020-03-11 21:56:55 +00:00
// ****************************************************************************/
using System.Runtime.InteropServices;
2020-02-27 00:33:26 +00:00
using Aaru.CommonTypes.Enums;
using Aaru.Decoders.ATA;
2020-02-27 00:33:26 +00:00
namespace Aaru.Devices.Remote
{
2019-10-12 22:34:27 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketHeader
{
2019-10-26 15:34:00 +01:00
public uint remote_id;
public uint packet_id;
2020-02-29 18:03:35 +00:00
public uint len;
public byte version;
2020-02-27 22:42:21 +00:00
public AaruPacketType packetType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
2019-10-12 22:34:27 +01:00
public readonly byte[] spare;
}
2019-10-12 22:34:27 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketHello
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string application;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string version;
public byte maxProtocol;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
2019-10-12 22:34:27 +01:00
public readonly byte[] spare;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sysname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string release;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string machine;
}
2019-10-12 22:34:27 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCommandListDevices
2019-10-12 22:34:27 +01:00
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2019-10-12 22:34:27 +01:00
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public readonly struct AaruPacketResponseListDevices
2019-10-12 22:34:27 +01:00
{
2020-02-27 22:42:21 +00:00
public readonly AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public readonly ushort devices;
2019-10-12 22:34:27 +01:00
}
2019-10-13 20:54:10 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketNop
2019-10-13 20:54:10 +01:00
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public AaruNopReason reasonCode;
2019-10-13 20:54:10 +01:00
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public readonly byte[] spare;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string reason;
2019-10-13 21:19:21 +01:00
public int errno;
2019-10-13 20:54:10 +01:00
}
2019-10-13 21:59:19 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCommandOpenDevice
2019-10-13 21:59:19 +01:00
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2019-10-13 21:59:19 +01:00
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string device_path;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdScsi
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public uint cdb_len;
public uint buf_len;
public int direction;
public uint timeout;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResScsi
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public uint sense_len;
public uint buf_len;
public uint duration;
public uint sense;
public uint error_no;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdAtaChs
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public uint buf_len;
public AtaRegistersChs registers;
public byte protocol;
public byte transferRegister;
[MarshalAs(UnmanagedType.U1)]
public bool transferBlocks;
public byte spare;
public uint timeout;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResAtaChs
{
2020-02-29 18:03:35 +00:00
public AaruPacketHeader hdr;
public uint buf_len;
public AtaErrorRegistersChs registers;
2020-02-29 18:03:35 +00:00
public uint duration;
public uint sense;
public uint error_no;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdAtaLba28
{
2020-02-29 18:03:35 +00:00
public AaruPacketHeader hdr;
public uint buf_len;
public AtaRegistersLba28 registers;
2020-02-29 18:03:35 +00:00
public byte protocol;
public byte transferRegister;
[MarshalAs(UnmanagedType.U1)]
public bool transferBlocks;
public byte spare;
public uint timeout;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResAtaLba28
{
2020-02-29 18:03:35 +00:00
public AaruPacketHeader hdr;
public uint buf_len;
public AtaErrorRegistersLba28 registers;
2020-02-29 18:03:35 +00:00
public uint duration;
public uint sense;
public uint error_no;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdAtaLba48
{
2020-02-29 18:03:35 +00:00
public AaruPacketHeader hdr;
public uint buf_len;
public AtaRegistersLba48 registers;
2020-02-29 18:03:35 +00:00
public byte protocol;
public byte transferRegister;
[MarshalAs(UnmanagedType.U1)]
public bool transferBlocks;
public byte spare;
public uint timeout;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResAtaLba48
{
2020-02-29 18:03:35 +00:00
public AaruPacketHeader hdr;
public uint buf_len;
public AtaErrorRegistersLba48 registers;
2020-02-29 18:03:35 +00:00
public uint duration;
public uint sense;
public uint error_no;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruCmdSdhci
{
public MmcCommands command;
2020-02-29 18:03:35 +00:00
[MarshalAs(UnmanagedType.U1)]
public bool write;
[MarshalAs(UnmanagedType.U1)]
public bool application;
public MmcFlags flags;
2020-02-29 18:03:35 +00:00
public uint argument;
public uint block_size;
public uint blocks;
public uint buf_len;
public uint timeout;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruPacketCmdSdhci
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
public AaruCmdSdhci command;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruResSdhci
{
public uint buf_len;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public uint[] response;
public uint duration;
public uint sense;
2019-10-17 22:15:01 +01:00
public uint error_no;
}
2019-10-14 01:02:25 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruPacketResSdhci
{
public AaruPacketHeader hdr;
public AaruResSdhci res;
}
2019-10-14 01:02:25 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdGetDeviceType
2019-10-14 01:02:25 +01:00
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2019-10-14 01:02:25 +01:00
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResGetDeviceType
2019-10-14 01:02:25 +01:00
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public DeviceType device_type;
2019-10-14 01:02:25 +01:00
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdGetSdhciRegisters
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResGetSdhciRegisters
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
[MarshalAs(UnmanagedType.U1)]
public bool isSdhci;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] csd;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] cid;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] ocr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] scr;
public uint csd_len;
public uint cid_len;
public uint ocr_len;
public uint scr_len;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdGetUsbData
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResGetUsbData
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
[MarshalAs(UnmanagedType.U1)]
public bool isUsb;
public ushort descLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65536)]
public byte[] descriptors;
public ushort idVendor;
public ushort idProduct;
2019-10-18 23:41:58 +01:00
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string manufacturer;
2019-10-18 23:41:58 +01:00
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string product;
2019-10-18 23:41:58 +01:00
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string serial;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdGetFireWireData
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResGetFireWireData
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
[MarshalAs(UnmanagedType.U1)]
public bool isFireWire;
public uint idModel;
public uint idVendor;
public ulong guid;
2019-10-18 23:41:58 +01:00
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string vendor;
2019-10-18 23:41:58 +01:00
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string model;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdGetPcmciaData
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
}
2019-10-26 17:14:58 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResGetPcmciaData
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
[MarshalAs(UnmanagedType.U1)]
public bool isPcmcia;
public ushort cis_len;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65536)]
public byte[] cis;
}
2019-10-26 15:47:36 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdClose
2019-10-26 15:47:36 +01:00
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2019-10-26 15:47:36 +01:00
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketCmdAmIRoot
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
2020-02-27 22:42:21 +00:00
public struct AaruPacketResAmIRoot
{
2020-02-27 22:42:21 +00:00
public AaruPacketHeader hdr;
2020-02-29 18:03:35 +00:00
public uint am_i_root;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruPacketMultiCmdSdhci
{
public AaruPacketHeader hdr;
public ulong cmd_count;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruPacketCmdReOpen
{
public AaruPacketHeader hdr;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruPacketCmdOsRead
{
public AaruPacketHeader hdr;
public ulong offset;
public uint length;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct AaruPacketResOsRead
{
public AaruPacketHeader hdr;
public int errno;
public uint duration;
}
}