Skip to content

Commit afb0c29

Browse files
authored
Merge pull request #35 from IhorNehrutsa/main
Update Cp21xxSerialDriver.cs
2 parents b448a2c + ca3a5a1 commit afb0c29

1 file changed

Lines changed: 15 additions & 25 deletions

File tree

UsbSerialForAndroid/driver/Cp21xxSerialDriver.cs

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ public class Cp21xxSerialPort : CommonUsbSerialPort
5757
private const int FLUSH_READ_CODE = 0x0a;
5858
private const int FLUSH_WRITE_CODE = 0x05;
5959

60-
private static int GET_MODEM_STATUS_REQUEST = 0x08; // 0x08 Get modem status.
61-
private static int MODEM_STATUS_CTS = 0x10;
62-
private static int MODEM_STATUS_DSR = 0x20;
63-
private static int MODEM_STATUS_RI = 0x40;
64-
private static int MODEM_STATUS_CD = 0x80;
60+
private const int GET_MODEM_STATUS_REQUEST = 0x08; // 0x08 Get modem status.
61+
private const int MODEM_STATUS_CTS = 0x10;
62+
private const int MODEM_STATUS_DSR = 0x20;
63+
private const int MODEM_STATUS_RI = 0x40;
64+
private const int MODEM_STATUS_CD = 0x80;
6565
/*
6666
* SILABSER_IFC_ENABLE_REQUEST_CODE
6767
*/
@@ -86,7 +86,7 @@ public class Cp21xxSerialPort : CommonUsbSerialPort
8686
private UsbEndpoint mReadEndpoint;
8787
private UsbEndpoint mWriteEndpoint;
8888

89-
private IUsbSerialDriver Driver;
89+
private new IUsbSerialDriver Driver;
9090
private string TAG => (Driver as Cp21xxSerialDriver)?.TAG;
9191

9292

@@ -210,28 +210,16 @@ public override int Read(byte[] dest, int timeoutMillis)
210210
public override int Write(byte[] src, int timeoutMillis)
211211
{
212212
int offset = 0;
213+
int writeLength;
214+
int amtWritten;
213215

214216
while (offset < src.Length)
215217
{
216-
int writeLength;
217-
int amtWritten;
218-
219218
lock(mWriteBufferLock) {
220-
byte[] writeBuffer;
221219

222-
writeLength = Math.Min(src.Length - offset, mWriteBuffer.Length);
223-
if (offset == 0)
224-
{
225-
writeBuffer = src;
226-
}
227-
else
228-
{
229-
// bulkTransfer does not support offsets, make a copy.
230-
Buffer.BlockCopy(src, offset, mWriteBuffer, 0, writeLength);
231-
writeBuffer = mWriteBuffer;
232-
}
220+
writeLength = src.Length - offset;
233221

234-
amtWritten = mConnection.BulkTransfer(mWriteEndpoint, writeBuffer, writeLength,
222+
amtWritten = mConnection.BulkTransfer(mWriteEndpoint, src, offset, writeLength,
235223
timeoutMillis);
236224
}
237225
if (amtWritten <= 0)
@@ -313,7 +301,7 @@ private int GetStatus()
313301
{
314302
byte[] data = new byte[1];
315303
int result = mConnection.ControlTransfer((UsbAddressing)REQTYPE_DEVICE_TO_HOST, GET_MODEM_STATUS_REQUEST,
316-
0, mPortNumber, data, data.Length, USB_WRITE_TIMEOUT_MILLIS);
304+
0, 0, data, data.Length, USB_WRITE_TIMEOUT_MILLIS);
317305
if (result != 1)
318306
{
319307
throw new IOException("Get modem status failed: result=" + result);
@@ -338,11 +326,12 @@ public override bool GetDSR()
338326

339327
public override bool GetDTR()
340328
{
341-
return true;
329+
return (GetStatus() & MCR_DTR) != 0;
342330
}
343331

344332
public override void SetDTR(bool value)
345333
{
334+
SetConfigSingle(SILABSER_SET_MHS_REQUEST_CODE, (value ? MCR_DTR : 0) | CONTROL_WRITE_DTR);
346335
}
347336

348337
public override bool GetRI()
@@ -352,11 +341,12 @@ public override bool GetRI()
352341

353342
public override bool GetRTS()
354343
{
355-
return true;
344+
return (GetStatus() & MCR_RTS) != 0;
356345
}
357346

358347
public override void SetRTS(bool value)
359348
{
349+
SetConfigSingle(SILABSER_SET_MHS_REQUEST_CODE, (value ? MCR_RTS : 0) | CONTROL_WRITE_RTS);
360350
}
361351

362352
public override Boolean PurgeHwBuffers(Boolean purgeReadBuffers, Boolean purgeWriteBuffers)

0 commit comments

Comments
 (0)