Skip to content

Commit 78151cc

Browse files
authored
Merge pull request #32 from IhorNehrutsa/main
Update Cp21xxSerialDriver.cs: Get DSR, CTS, RI, CD
2 parents d912d06 + e631a84 commit 78151cc

1 file changed

Lines changed: 23 additions & 4 deletions

File tree

UsbSerialForAndroid/driver/Cp21xxSerialDriver.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ public class Cp21xxSerialPort : CommonUsbSerialPort
5656
private const int FLUSH_READ_CODE = 0x0a;
5757
private const int FLUSH_WRITE_CODE = 0x05;
5858

59+
// https://developer.android.com/reference/android/hardware/usb/UsbConstants#USB_DIR_IN
60+
private static int REQTYPE_DEVICE_TO_HOST = UsbConstants.UsbTypeVendor | 0; // UsbConstants.USB_DIR_IN;
61+
private static int GET_MODEM_STATUS_REQUEST = 5;
62+
private static int MODEM_STATUS_CTS = 0x10;
63+
private static int MODEM_STATUS_DSR = 0x20;
64+
private static int MODEM_STATUS_RI = 0x40;
65+
private static int MODEM_STATUS_CD = 0x80;
5966
/*
6067
* SILABSER_IFC_ENABLE_REQUEST_CODE
6168
*/
@@ -303,19 +310,31 @@ public override void SetParameters(int baudRate, int dataBits, StopBits stopBits
303310
SetConfigSingle(SILABSER_SET_LINE_CTL_REQUEST_CODE, configDataBits);
304311
}
305312

313+
private int GetStatus()
314+
{
315+
byte[] data = new byte[2];
316+
int result = mConnection.ControlTransfer((UsbAddressing)REQTYPE_DEVICE_TO_HOST, GET_MODEM_STATUS_REQUEST,
317+
0, mPortNumber + 1, data, data.Length, USB_WRITE_TIMEOUT_MILLIS);
318+
if (result != 2)
319+
{
320+
throw new IOException("Get modem status failed: result=" + result);
321+
}
322+
return data[0];
323+
}
324+
306325
public override bool GetCD()
307326
{
308-
return false;
327+
return (GetStatus() & MODEM_STATUS_CD) != 0;
309328
}
310329

311330
public override bool GetCTS()
312331
{
313-
return false;
332+
return (GetStatus() & MODEM_STATUS_CTS) != 0;
314333
}
315334

316335
public override bool GetDSR()
317336
{
318-
return false;
337+
return (GetStatus() & MODEM_STATUS_DSR) != 0;
319338
}
320339

321340
public override bool GetDTR()
@@ -329,7 +348,7 @@ public override void SetDTR(bool value)
329348

330349
public override bool GetRI()
331350
{
332-
return false;
351+
return (GetStatus() & MODEM_STATUS_RI) != 0;
333352
}
334353

335354
public override bool GetRTS()

0 commit comments

Comments
 (0)