mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2025-02-17 00:16:20 +01:00
Some file stream changes
This commit is contained in:
parent
1876d0a3a3
commit
3f190bb4bb
@ -391,6 +391,11 @@ namespace DS4Windows
|
|||||||
{
|
{
|
||||||
if (ds4Input == null)
|
if (ds4Input == null)
|
||||||
{
|
{
|
||||||
|
if (!hDevice.IsFileStreamOpen())
|
||||||
|
{
|
||||||
|
hDevice.OpenFileStream(inputReport.Length);
|
||||||
|
}
|
||||||
|
|
||||||
Console.WriteLine(MacAddress.ToString() + " " + System.DateTime.UtcNow.ToString("o") + "> start");
|
Console.WriteLine(MacAddress.ToString() + " " + System.DateTime.UtcNow.ToString("o") + "> start");
|
||||||
sendOutputReport(true); // initialize the output report
|
sendOutputReport(true); // initialize the output report
|
||||||
ds4Output = new Thread(performDs4Output);
|
ds4Output = new Thread(performDs4Output);
|
||||||
|
@ -83,6 +83,25 @@ namespace DS4Windows
|
|||||||
IsExclusive = isExclusive;
|
IsExclusive = isExclusive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OpenFileStream(int reportSize)
|
||||||
|
{
|
||||||
|
if (fileStream == null && !safeReadHandle.IsInvalid)
|
||||||
|
{
|
||||||
|
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, reportSize, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsFileStreamOpen()
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
if (fileStream != null)
|
||||||
|
{
|
||||||
|
result = !fileStream.SafeFileHandle.IsInvalid && !fileStream.SafeFileHandle.IsClosed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public void CloseDevice()
|
public void CloseDevice()
|
||||||
{
|
{
|
||||||
if (!IsOpen) return;
|
if (!IsOpen) return;
|
||||||
@ -140,6 +159,7 @@ namespace DS4Windows
|
|||||||
NativeMethods.HidP_GetCaps(preparsedDataPointer, ref capabilities);
|
NativeMethods.HidP_GetCaps(preparsedDataPointer, ref capabilities);
|
||||||
NativeMethods.HidD_FreePreparsedData(preparsedDataPointer);
|
NativeMethods.HidD_FreePreparsedData(preparsedDataPointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HidDeviceCapabilities(capabilities);
|
return new HidDeviceCapabilities(capabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,19 +171,25 @@ namespace DS4Windows
|
|||||||
{
|
{
|
||||||
fileStream.Close();
|
fileStream.Close();
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException) { }
|
||||||
{
|
catch (OperationCanceledException) { }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fileStream = null;
|
fileStream = null;
|
||||||
Console.WriteLine("Close fs");
|
Console.WriteLine("Close fs");
|
||||||
if (safeReadHandle != null && !safeReadHandle.IsInvalid)
|
if (safeReadHandle != null && !safeReadHandle.IsInvalid)
|
||||||
{
|
{
|
||||||
safeReadHandle.Close();
|
try
|
||||||
Console.WriteLine("Close sh");
|
{
|
||||||
|
if (!safeReadHandle.IsClosed)
|
||||||
|
{
|
||||||
|
safeReadHandle.Close();
|
||||||
|
Console.WriteLine("Close sh");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
safeReadHandle = null;
|
safeReadHandle = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,6 +219,7 @@ namespace DS4Windows
|
|||||||
return ReadStatus.ReadError;
|
return ReadStatus.ReadError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReadStatus ReadFile(byte[] inputBuffer)
|
public ReadStatus ReadFile(byte[] inputBuffer)
|
||||||
{
|
{
|
||||||
if (safeReadHandle == null)
|
if (safeReadHandle == null)
|
||||||
@ -223,6 +250,7 @@ namespace DS4Windows
|
|||||||
safeReadHandle = OpenHandle(_devicePath, true);
|
safeReadHandle = OpenHandle(_devicePath, true);
|
||||||
if (fileStream == null && !safeReadHandle.IsInvalid)
|
if (fileStream == null && !safeReadHandle.IsInvalid)
|
||||||
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, inputBuffer.Length, true);
|
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, inputBuffer.Length, true);
|
||||||
|
|
||||||
if (!safeReadHandle.IsInvalid && fileStream.CanRead)
|
if (!safeReadHandle.IsInvalid && fileStream.CanRead)
|
||||||
{
|
{
|
||||||
Task<ReadStatus> readFileTask = new Task<ReadStatus>(() => ReadWithFileStreamTask(inputBuffer));
|
Task<ReadStatus> readFileTask = new Task<ReadStatus>(() => ReadWithFileStreamTask(inputBuffer));
|
||||||
@ -261,9 +289,6 @@ namespace DS4Windows
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ReadStatus.ReadError;
|
return ReadStatus.ReadError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user