Add packets for list devices.

This commit is contained in:
2019-10-12 22:34:27 +01:00
parent 083517b8ed
commit b655b617c8
3 changed files with 35 additions and 8 deletions

View File

@@ -31,29 +31,41 @@
// ****************************************************************************/ // ****************************************************************************/
using System; using System;
using System.Runtime.InteropServices;
using DiscImageChef.CommonTypes.Interop; using DiscImageChef.CommonTypes.Interop;
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID; using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
namespace DiscImageChef.Devices namespace DiscImageChef.Devices
{ {
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct DeviceInfo public struct DeviceInfo
{ {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string Path; public string Path;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Vendor; public string Vendor;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Model; public string Model;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Serial; public string Serial;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Bus; public string Bus;
public bool Supported;
[MarshalAs(UnmanagedType.U1)] public bool Supported;
} }
public partial class Device public partial class Device
{ {
public static DeviceInfo[] ListDevices() public static DeviceInfo[] ListDevices()
{ {
switch(DetectOS.GetRealPlatformID()) switch (DetectOS.GetRealPlatformID())
{ {
case PlatformID.Win32NT: return Windows.ListDevices.GetList(); case PlatformID.Win32NT: return Windows.ListDevices.GetList();
case PlatformID.Linux: return Linux.ListDevices.GetList(); case PlatformID.Linux: return Linux.ListDevices.GetList();
case PlatformID.FreeBSD: return FreeBSD.ListDevices.GetList(); case PlatformID.FreeBSD: return FreeBSD.ListDevices.GetList();
default: default:
throw new InvalidOperationException($"Platform {DetectOS.GetRealPlatformID()} not yet supported."); throw new InvalidOperationException($"Platform {DetectOS.GetRealPlatformID()} not yet supported.");

View File

@@ -2,6 +2,8 @@ namespace DiscImageChef.Devices.Remote
{ {
public enum DicPacketType : byte public enum DicPacketType : byte
{ {
Hello = 1 Hello = 1,
CommandListDevices = 2,
ResponseListDevices = 3
} }
} }

View File

@@ -2,7 +2,7 @@ using System.Runtime.InteropServices;
namespace DiscImageChef.Devices.Remote namespace DiscImageChef.Devices.Remote
{ {
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct DicPacketHeader public struct DicPacketHeader
{ {
public ulong id; public ulong id;
@@ -12,10 +12,10 @@ namespace DiscImageChef.Devices.Remote
public DicPacketType packetType; public DicPacketType packetType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] spare; public readonly byte[] spare;
} }
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct DicPacketHello public struct DicPacketHello
{ {
public DicPacketHeader hdr; public DicPacketHeader hdr;
@@ -29,7 +29,7 @@ namespace DiscImageChef.Devices.Remote
public byte maxProtocol; public byte maxProtocol;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] spare; public readonly byte[] spare;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sysname; public string sysname;
@@ -40,4 +40,17 @@ namespace DiscImageChef.Devices.Remote
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string machine; public string machine;
} }
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct DicPacketCommandListDevices
{
public DicPacketHeader hdr;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct DicPacketResponseListDevices
{
public readonly DicPacketHeader hdr;
public readonly ushort devices;
}
} }