Maui安卓系统上USB串口通讯

Maui安卓系统上USB串口通讯

  1. 增加usb设备权限设置
    参考项目添加配置,库源码,安卓14以上需要注意

  2. 搜索USB串口设备

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    Android.App.Activity act = Platform.CurrentActivity;
    Android.Hardware.Usb.UsbManager manager = (Android.Hardware.Usb.UsbManager)act.GetSystemService(Android.Content.Context.UsbService);
    var table = Hoho.Android.UsbSerial.Driver.UsbSerialProber.DefaultProbeTable;
    table.AddProduct(0x1b4f, 0x0008, typeof(Hoho.Android.UsbSerial.Driver.CdcAcmSerialDriver)); // IOIO OTG
    table.AddProduct(0x09D8, 0x0420, typeof(Hoho.Android.UsbSerial.Driver.CdcAcmSerialDriver)); // Elatec TWN4
    
    var prober = new Hoho.Android.UsbSerial.Driver.UsbSerialProber(table);
    var list = prober.FindAllDrivers(manager);
    _UsbDevices.Clear();
    foreach (var item in list)
    {
        _UsbDevices.Add(item);
    }
    
  3. 列出设备串口
    选择其中一个串口_UsbSerialPort

    1
    2
    3
    4
    5
    
    _UsbSerialPorts.Clear();
    foreach (var item in _UsbDevice.Ports)
    {
        _UsbSerialPorts.Add(item);
    }
    
  4. 打开串口

     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
    
    Android.App.Activity act = Platform.CurrentActivity;
    //var portInfo = act.Intent.GetParcelableExtra("PortInfo") as Hoho.Android.UsbSerial.Extensions.UsbSerialPortInfo;
    //int vendorId = portInfo.VendorId;
    //int deviceId = portInfo.DeviceId;
    //int portNumber = portInfo.PortNumber;
    
    Android.Hardware.Usb.UsbManager manager = (Android.Hardware.Usb.UsbManager)act.GetSystemService(Android.Content.Context.UsbService);
    
    //var table = Hoho.Android.UsbSerial.Driver.UsbSerialProber.DefaultProbeTable;
    //table.AddProduct(0x1b4f, 0x0008, typeof(Hoho.Android.UsbSerial.Driver.CdcAcmSerialDriver)); // IOIO OTG
    
    //table.AddProduct(0x09D8, 0x0420, typeof(Hoho.Android.UsbSerial.Driver.CdcAcmSerialDriver)); // Elatec TWN4
    
    //var prober = new Hoho.Android.UsbSerial.Driver.UsbSerialProber(table);
    //var list = prober.FindAllDrivers(manager);
    //var first = list.FirstOrDefault();
    //Hoho.Android.UsbSerial.Driver.UsbSerialPort port = first.Ports[0];
    
    //IDictionary<string, Android.Hardware.Usb.UsbDevice> devicesDictionary = manager.DeviceList;
    
    //Android.Hardware.Usb.UsbDevice dvc = devicesDictionary.ElementAt(0).Value;
    // 获取程序对串口的访问权限
    var permissionGranted = await manager.RequestPermissionAsync(_UsbDevice.Device, act.ApplicationContext);
    if (permissionGranted)
    {
        if (serialInputOutputManager == null)
        {
            serialInputOutputManager = new Hoho.Android.UsbSerial.Extensions.SerialInputOutputManager(_UsbSerialPort)
            {
                BaudRate = 115200,
                DataBits = 8,
                StopBits = Hoho.Android.UsbSerial.Driver.StopBits.One,
                Parity = Hoho.Android.UsbSerial.Driver.Parity.None,
            };
            serialInputOutputManager.DataReceived += (sender, e) => {
    
            };
    
            serialInputOutputManager.ErrorReceived += (sender, e) => {
    
            };
        }
    
        try
        {
            if (!serialInputOutputManager.IsOpen)
            {
                serialInputOutputManager.Open(manager);
            }
        }
        catch (Exception ex)
        {
            return;
        }
    }
    
  5. 写数据

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    try
    {
        byte[] sleepdata = new byte[] { 0xf0, 0x04, 0x10, 0xf1 };
        if (serialInputOutputManager.IsOpen)
        {
            _UsbSerialPort.Write(sleepdata, 200);
        }
    }
    catch (Exception ex)
    {
        return;
    }
    
  6. 关闭串口

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    try
    {
        if (serialInputOutputManager.IsOpen)
        {
            serialInputOutputManager.Close();
        }
    }
    catch (Exception ex)
    {
        return;
    }
    
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy