C#使用SerialPort協定控制USB開關

C#使用SerialPort協定控制USB開關

這篇文章介紹如何使用SerialPort來控制市售的USB開關。

SerialPort Initial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
private SerialPort barcode = null;
private enum BaudRate
{
BO_9600,
BO_19200,
BO_38400,
BO_57600,
BO_115200
};
public bool Init(int comPort, BaudRate baudRate)
{
try
{
var comportName = string.Format(@"COM{0}", comPort);
if (barcode != null && barcode.IsOpen)
{
barcode.Close();
}
barcode = new SerialPort
{
PortName = comportName
};
switch (baudRate)
{
case BaudRate.BO_9600:
barcode.BaudRate = 9600;
break;
case BaudRate.BO_19200:
barcode.BaudRate = 19200;
break;
case BaudRate.BO_38400:
barcode.BaudRate = 38400;
break;
case BaudRate.BO_57600:
barcode.BaudRate = 57600;
break;
case BaudRate.BO_115200:
barcode.BaudRate = 115200;
break;
default:
barcode.BaudRate = 19200;
break;
}
barcode.Parity = Parity.None;
barcode.DataBits = 8;
barcode.StopBits = StopBits.One;
barcode.ReadBufferSize = 1024;
barcode.WriteBufferSize = 1024;

if (!barcode.IsOpen)
{
try
{
barcode.Open();
}
catch (Exception ex)
{
LogUtil.logger.Error(Convert.ToString(ex));
barcode = null;
return false;
}
}
}
catch (Exception ex)
{
LogUtil.logger.Fatal(Convert.ToString(ex));
}
return true;
}

SerialPort Write to USB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private byte[] usbOpen = new byte[] { 0xA0, 0x01, 0x01, 0xA2 };
private byte[] usbClose = new byte[] { 0xA0, 0x01, 0x00, 0xA1 };
public void WriteByteToUsbLcus(bool isOpen)
{
try
{
if (barcode == null || barcode.IsOpen == false)
return;

if (isOpen)
{
barcode.Write(usbOpen, 0, usbOpen.Length);
}
else
{
barcode.Write(usbClose, 0, usbClose.Length);
}
}
catch (Exception ex)
{
LogUtil.logger.Fatal(Convert.ToString(ex));
}
}