mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Implemente remote Get FireWire Data packet.
This commit is contained in:
@@ -576,66 +576,80 @@ namespace DiscImageChef.Devices
|
|||||||
|
|
||||||
#region FireWire
|
#region FireWire
|
||||||
|
|
||||||
if (PlatformId == PlatformID.Linux)
|
if (!(remote is null))
|
||||||
{
|
{
|
||||||
if (devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
|
if (remote.GetFirewireData(out firewireVendor, out firewireModel,
|
||||||
devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
|
out firewireGuid, out var remoteFireWireVendorName, out var remoteFireWireModelName))
|
||||||
devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
|
|
||||||
{
|
{
|
||||||
var devPath = devicePath.Substring(5);
|
IsFireWire = true;
|
||||||
if (Directory.Exists("/sys/block/" + devPath))
|
FireWireVendorName = remoteFireWireVendorName;
|
||||||
{
|
FireWireModelName = remoteFireWireModelName;
|
||||||
var resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
|
|
||||||
resolvedLink = "/sys" + resolvedLink.Substring(2);
|
|
||||||
if (!string.IsNullOrEmpty(resolvedLink))
|
|
||||||
while (resolvedLink.Contains("firewire"))
|
|
||||||
{
|
|
||||||
resolvedLink = Path.GetDirectoryName(resolvedLink);
|
|
||||||
if (!File.Exists(resolvedLink + "/model") || !File.Exists(resolvedLink + "/vendor") ||
|
|
||||||
!File.Exists(resolvedLink + "/guid")) continue;
|
|
||||||
|
|
||||||
var fwSr = new StreamReader(resolvedLink + "/model");
|
|
||||||
var fwTemp = fwSr.ReadToEnd();
|
|
||||||
uint.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
|
|
||||||
out firewireModel);
|
|
||||||
fwSr.Close();
|
|
||||||
|
|
||||||
fwSr = new StreamReader(resolvedLink + "/vendor");
|
|
||||||
fwTemp = fwSr.ReadToEnd();
|
|
||||||
uint.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
|
|
||||||
out firewireVendor);
|
|
||||||
fwSr.Close();
|
|
||||||
|
|
||||||
fwSr = new StreamReader(resolvedLink + "/guid");
|
|
||||||
fwTemp = fwSr.ReadToEnd();
|
|
||||||
ulong.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
|
|
||||||
out firewireGuid);
|
|
||||||
fwSr.Close();
|
|
||||||
|
|
||||||
if (File.Exists(resolvedLink + "/model_name"))
|
|
||||||
{
|
|
||||||
fwSr = new StreamReader(resolvedLink + "/model_name");
|
|
||||||
FireWireModelName = fwSr.ReadToEnd().Trim();
|
|
||||||
fwSr.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (File.Exists(resolvedLink + "/vendor_name"))
|
|
||||||
{
|
|
||||||
fwSr = new StreamReader(resolvedLink + "/vendor_name");
|
|
||||||
FireWireVendorName = fwSr.ReadToEnd().Trim();
|
|
||||||
fwSr.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
IsFireWire = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: Implement for other operating systems
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IsFireWire = false;
|
if (PlatformId == PlatformID.Linux)
|
||||||
|
{
|
||||||
|
if (devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
|
||||||
|
devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
|
||||||
|
devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
var devPath = devicePath.Substring(5);
|
||||||
|
if (Directory.Exists("/sys/block/" + devPath))
|
||||||
|
{
|
||||||
|
var resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
|
||||||
|
resolvedLink = "/sys" + resolvedLink.Substring(2);
|
||||||
|
if (!string.IsNullOrEmpty(resolvedLink))
|
||||||
|
while (resolvedLink.Contains("firewire"))
|
||||||
|
{
|
||||||
|
resolvedLink = Path.GetDirectoryName(resolvedLink);
|
||||||
|
if (!File.Exists(resolvedLink + "/model") ||
|
||||||
|
!File.Exists(resolvedLink + "/vendor") ||
|
||||||
|
!File.Exists(resolvedLink + "/guid")) continue;
|
||||||
|
|
||||||
|
var fwSr = new StreamReader(resolvedLink + "/model");
|
||||||
|
var fwTemp = fwSr.ReadToEnd();
|
||||||
|
uint.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
|
||||||
|
out firewireModel);
|
||||||
|
fwSr.Close();
|
||||||
|
|
||||||
|
fwSr = new StreamReader(resolvedLink + "/vendor");
|
||||||
|
fwTemp = fwSr.ReadToEnd();
|
||||||
|
uint.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
|
||||||
|
out firewireVendor);
|
||||||
|
fwSr.Close();
|
||||||
|
|
||||||
|
fwSr = new StreamReader(resolvedLink + "/guid");
|
||||||
|
fwTemp = fwSr.ReadToEnd();
|
||||||
|
ulong.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
|
||||||
|
out firewireGuid);
|
||||||
|
fwSr.Close();
|
||||||
|
|
||||||
|
if (File.Exists(resolvedLink + "/model_name"))
|
||||||
|
{
|
||||||
|
fwSr = new StreamReader(resolvedLink + "/model_name");
|
||||||
|
FireWireModelName = fwSr.ReadToEnd().Trim();
|
||||||
|
fwSr.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (File.Exists(resolvedLink + "/vendor_name"))
|
||||||
|
{
|
||||||
|
fwSr = new StreamReader(resolvedLink + "/vendor_name");
|
||||||
|
FireWireVendorName = fwSr.ReadToEnd().Trim();
|
||||||
|
fwSr.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
IsFireWire = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: Implement for other operating systems
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IsFireWire = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion FireWire
|
#endregion FireWire
|
||||||
|
|||||||
@@ -632,7 +632,7 @@ namespace DiscImageChef.Devices.Remote
|
|||||||
product = null;
|
product = null;
|
||||||
serial = null;
|
serial = null;
|
||||||
|
|
||||||
var cmdPkt = new DicPacketCmdGetSdhciRegisters
|
var cmdPkt = new DicPacketCmdGetUsbData
|
||||||
{
|
{
|
||||||
hdr = new DicPacketHeader
|
hdr = new DicPacketHeader
|
||||||
{
|
{
|
||||||
@@ -706,7 +706,79 @@ namespace DiscImageChef.Devices.Remote
|
|||||||
public bool GetFirewireData(out uint idVendor, out uint idProduct,
|
public bool GetFirewireData(out uint idVendor, out uint idProduct,
|
||||||
out ulong guid, out string vendor, out string model)
|
out ulong guid, out string vendor, out string model)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException("Getting FireWire data not yet implemented...");
|
idVendor = 0;
|
||||||
|
idProduct = 0;
|
||||||
|
guid = 0;
|
||||||
|
vendor = null;
|
||||||
|
model = null;
|
||||||
|
|
||||||
|
var cmdPkt = new DicPacketCmdGetFireWireData
|
||||||
|
{
|
||||||
|
hdr = new DicPacketHeader
|
||||||
|
{
|
||||||
|
id = Consts.PacketId,
|
||||||
|
len = (uint) Marshal.SizeOf<DicPacketCmdGetFireWireData>(),
|
||||||
|
version = Consts.PacketVersion,
|
||||||
|
packetType = DicPacketType.CommandGetFireWireData
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var buf = Marshal.StructureToByteArrayLittleEndian(cmdPkt);
|
||||||
|
|
||||||
|
var len = _socket.Send(buf, SocketFlags.None);
|
||||||
|
|
||||||
|
if (len != buf.Length)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Could not write to the network...");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hdrBuf = new byte[Marshal.SizeOf<DicPacketHeader>()];
|
||||||
|
|
||||||
|
len = _socket.Receive(hdrBuf, hdrBuf.Length, SocketFlags.Peek);
|
||||||
|
|
||||||
|
if (len < hdrBuf.Length)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Could not read from the network...");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hdr = Marshal.ByteArrayToStructureLittleEndian<DicPacketHeader>(hdrBuf);
|
||||||
|
|
||||||
|
if (hdr.id != Consts.PacketId)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Received data is not a DIC Remote Packet...");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hdr.packetType != DicPacketType.ResponseGetUsbData)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Expected FireWire Data Response Packet, got packet type {0}...",
|
||||||
|
hdr.packetType);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf = new byte[hdr.len];
|
||||||
|
len = _socket.Receive(buf, buf.Length, SocketFlags.None);
|
||||||
|
|
||||||
|
if (len < buf.Length)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Could not read from the network...");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var res = Marshal.ByteArrayToStructureLittleEndian<DicPacketResGetFireWireData>(buf);
|
||||||
|
|
||||||
|
if (!res.isFireWire)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
idVendor = res.idVendor;
|
||||||
|
idProduct = res.idModel;
|
||||||
|
guid = res.guid;
|
||||||
|
vendor = res.vendor;
|
||||||
|
model = res.model;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetPcmciaData(out byte[] cis)
|
public bool GetPcmciaData(out byte[] cis)
|
||||||
|
|||||||
Reference in New Issue
Block a user