Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion UsbSerialForAndroid/driver/CdcAcmSerialDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class CdcAcmSerialPort : CommonUsbSerialPort
private static int SET_CONTROL_LINE_STATE = 0x22;
private static int SEND_BREAK = 0x23;

private IUsbSerialDriver Driver;
private new readonly IUsbSerialDriver Driver;

//public CdcAcmSerialPort(UsbDevice device, int portNumber) : base(device, portNumber)
//{
Expand Down
2 changes: 1 addition & 1 deletion UsbSerialForAndroid/driver/Ch34xSerialDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public class Ch340SerialPort : CommonUsbSerialPort
private UsbEndpoint mReadEndpoint;
private UsbEndpoint mWriteEndpoint;

private IUsbSerialDriver Driver;
private new readonly IUsbSerialDriver Driver;
private string TAG => (Driver as Ch34xSerialDriver)?.TAG;

public Ch340SerialPort(UsbDevice device, int portNumber, IUsbSerialDriver driver) : base(device, portNumber)
Expand Down
2 changes: 1 addition & 1 deletion UsbSerialForAndroid/driver/Cp21xxSerialDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public class Cp21xxSerialPort : CommonUsbSerialPort
private UsbEndpoint mReadEndpoint;
private UsbEndpoint mWriteEndpoint;

private new IUsbSerialDriver Driver;
private readonly new IUsbSerialDriver Driver;
private string TAG => (Driver as Cp21xxSerialDriver)?.TAG;


Expand Down
2 changes: 1 addition & 1 deletion UsbSerialForAndroid/driver/FtdiSerialDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ private class FtdiSerialPort : CommonUsbSerialPort
private Boolean rts = false;
private int breakConfig = 0;

private IUsbSerialDriver Driver;
private new readonly IUsbSerialDriver Driver;


private String TAG = typeof (FtdiSerialDriver).Name;
Expand Down
3 changes: 2 additions & 1 deletion UsbSerialForAndroid/driver/ProlificSerialDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ protected enum DeviceType { DEVICE_TYPE_01, DEVICE_TYPE_T, DEVICE_TYPE_HX, DEVIC
Boolean mStopReadStatusThread = false;
private IOException mReadStatusException = null;

private IUsbSerialDriver Driver;
private new readonly IUsbSerialDriver Driver;


private string TAG => (Driver as ProlificSerialDriver)?.TAG;

Expand Down
23 changes: 18 additions & 5 deletions UsbSerialForAndroid/driver/STM32SerialDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public class STM32SerialPort : CommonUsbSerialPort
bool mRts = false;
bool mDtr = false;

IUsbSerialDriver Driver;
private new readonly IUsbSerialDriver Driver;

const int USB_WRITE_TIMEOUT_MILLIS = 5000;

Expand Down Expand Up @@ -141,8 +141,15 @@ public override int Read(byte[] dest, int timeoutMillis)
try
{
request.Initialize(mConnection, mReadEndpoint);
ByteBuffer buf = ByteBuffer.Wrap(dest);
if (!request.Queue(buf, dest.Length))

// wrap not work here
// byte[] is a primitive C# value type and not a Java.Lang.Object reference type
// when you do ByteBuffer.Wrap (dest), Java has no reference to the actual C# byte[], Java will instead make a copy of the bytes.
// ByteBuffer buf = ByteBuffer.Wrap(dest);

ByteBuffer buf = ByteBuffer.AllocateDirect(dest.Length);

if (!request.Queue(buf, buf.Limit()))
throw new IOException("Error queuing request");

UsbRequest response = mConnection.RequestWait();
Expand All @@ -151,7 +158,13 @@ public override int Read(byte[] dest, int timeoutMillis)

int nread = buf.Position();
if (nread > 0)
return nread;
{
// set back buffer position to 0
buf.Rewind();
// copy the bytes back
buf.Get(dest, 0, nread);
return nread;
}

return 0;
}
Expand All @@ -166,7 +179,7 @@ public override int Read(byte[] dest, int timeoutMillis)
{
int readAmt = Math.Min(dest.Length, mReadBuffer.Length);
numBytesRead = mConnection.BulkTransfer(mReadEndpoint, mReadBuffer, readAmt, timeoutMillis);
if(numBytesRead < 0)
if(numBytesRead <= 0)
{
// This sucks: we get -1 on timeout, not 0 as preferred.
// We *should* use UsbRequest, except it has a bug/api oversight
Expand Down