public STM32SerialPort(UsbDevice device,
                        int portNumber,
                        IUsbSerialDriver driver) : base(device, portNumber)
 {
     Driver             = driver;
     ENABLE_ASYNC_READS = true;
 }
Ejemplo n.º 2
0
        private void WireupUsb(IUsbSerialDriver device)
        {
            UsbManager manager = (UsbManager)GetSystemService(UsbService);

            var port1 = device.Ports[0];

            UsbDeviceConnection connection = manager.OpenDevice(device.Device);

            port1.Open(connection);
            port1.SetParameters(115200, DataBits._8, StopBits._1, Parity.None);

            var buffer = new byte[500];

            Log.Debug("main", "here");

            var timeout = (int)TimeSpan.FromSeconds(1).TotalMilliseconds;

            port1.CtsChanged += Port1_CtsChanged;
            port1.Rts         = true;

            while (true)
            {
                var bytesRead = port1.Read(buffer, timeout);
                if (bytesRead > 0)
                {
                    var str = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                    Log.Debug("card read", str);
                }
                Thread.Sleep(50);
            }
        }
            //public CdcAcmSerialPort(UsbDevice device, int portNumber) : base(device, portNumber)
            //{
            //    mEnableAsyncReads = (Build.VERSION.SdkInt >= BuildVersionCodes.JellyBeanMr1);
            //}

            public CdcAcmSerialPort(UsbDevice device,
                                    int portNumber,
                                    IUsbSerialDriver driver) : base(device, portNumber)
            {
                mEnableAsyncReads =
                    Build.VERSION.SdkInt >= BuildVersionCodes.JellyBeanMr1;
                //mEnableAsyncReads = false;
                Driver = driver;
            }
Ejemplo n.º 4
0
        public virtual IList <IUsbSerialDriver> FindAllDrivers(UsbManager usbManager)
        {
            var result = new List <IUsbSerialDriver>();

            foreach (UsbDevice usbDevice in usbManager.DeviceList.Values)
            {
                IUsbSerialDriver driver = ProbeDevice(usbDevice);
                if (driver != null)
                {
                    result.Add(driver);
                }
            }
            return(result);
        }
Ejemplo n.º 5
0
        public async Task <bool> ConnectDevice(ISerialDevice device, Action <byte[]> receivedDataAction)
        {
            _receivedDataAction = receivedDataAction ?? throw new ArgumentNullException(nameof(receivedDataAction));
            var connectDevice = device as SerialDevice;

            if (connectDevice == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            bool result = false;

            IUsbSerialDriver driver = connectDevice.Driver;

            if (await _usbManager.RequestPermissionAsync(driver.Device, _context))
            {
                _connectedPortManager = new PortManager(driver.Ports[0])
                {
                    BaudRate = 115200,
                    DataBits = DataBits.Eight,
                    StopBits = StopBits.One,
                    Parity   = Parity.None,
                };

                _connectedPortManager.DataReceived += (sender, args) =>
                {
                    if (args?.Data?.Any() ?? false)
                    {
                        _receivedDataAction?.Invoke(args.Data);
                    }
                };

                _connectedPortManager.ErrorReceived += (sender, args) =>
                {
                    Debugger.Break(); //To look at args
                    Debug.WriteLine($"An error occurred on the serial device: {(args?.ExceptionObject as Exception)?.ToString() ?? "(unknown)"}");
                };

                _connectedPortManager.Run(_usbManager);
                result = true;
            }

            return(result);
        }
Ejemplo n.º 6
0
        private void StartBotClicked(object sender, EventArgs e)
        {
            serialAttached = true;
            manager        = (UsbManager)GetSystemService(Context.UsbService);
            driver         = UsbSerialProber.DefaultProber.FindAllDrivers(manager)[0];
            port           = driver.Ports[0];
            var connection = manager.OpenDevice(driver.Device);

            port.Open(connection);
            port.SetParameters(9600, 8, StopBits.One, Parity.None);

            ip = text.Text;

            Thread t = new Thread(x => tcpCommunication());

            t.Start();
            udp = new UDPCommunication(ip, 4815);
            mc.start();
        }
Ejemplo n.º 7
0
        /**
         * Finds and builds all possible {@link UsbSerialDriver UsbSerialDrivers}
         * from the currently-attached {@link UsbDevice} hierarchy. This method does
         * not require permission from the Android USB system, since it does not
         * open any of the devices.
         *
         * @param usbManager
         * @return a list, possibly empty, of all compatible drivers
         */
        public List <IUsbSerialDriver> FindAllDrivers(UsbManager usbManager)
        {
            List <IUsbSerialDriver> result = new List <IUsbSerialDriver>();

            var deviceList = usbManager.DeviceList;
            var values     = deviceList.Values;

            foreach (UsbDevice usbDevice in values)
            {
                IUsbSerialDriver driver = ProbeDevice(usbDevice);
                if (driver != null)
                {
                    result.Add(driver);
                }
                else
                {
                    usbDevice.Dispose();//richard: dispose unused UsbDevice to avoid GREF leak
                }
            }

            ((Java.Lang.Object)values).Dispose(); //richard: avoid GREF leak
            ((Java.Lang.Object)deviceList).Dispose();
            return(result);
        }
Ejemplo n.º 8
0
        protected override void OnResume()
        {
            base.OnResume();

            #region USB adatkapcsoalt beállítása

            //Először elkérjük a komplett USB managert
            this.m_UsbManager = GetSystemService(Context.UsbService) as UsbManager;

            //Megkeressük a legelső (egyetlen) USB eszközt
            List <IUsbSerialDriver> devices = FindAllDriversAsync(this.m_UsbManager);

            IUsbSerialDriver hardware = devices.FirstOrDefault();
            if (hardware != null)
            {
                this.m_SerialPort = hardware.Ports.FirstOrDefault();
                if (this.m_SerialPort != null)
                {
                    //Ha találtunk eszközt, hozzáférést érünk az eszközhöz
                    PendingIntent pi = PendingIntent.GetBroadcast(this, 0, new Intent("ACTION_USB_PERMISSION"), 0);
                    this.m_UsbManager.RequestPermission(this.m_SerialPort.Driver.Device, pi);
                    //if(task.Result == true)
                    {
                        //Ha megkaptuk a hozzáférést akkor megynitjuk az eszközt mint sorosport
                        this.m_SerialIO = new SerialInputOutputManager(this.m_SerialPort)
                        {
                            BaudRate = 9600,
                            DataBits = 8,
                            StopBits = StopBits.One,
                            Parity   = Parity.None,
                        };

                        this.m_SerialIO.DataReceived += (sender, e) =>
                        {
                            this.RunOnUiThread(() =>
                            {
                                this.OnReceiveSerialData(e.Data);
                            });
                        };

                        this.m_SerialIO.ErrorReceived += (sender, e) =>
                        {
                            this.RunOnUiThread(() =>
                            {
                                var intent = new Intent(this, typeof(MainActivity));
                                StartActivity(intent);
                            });
                        };

                        try
                        {
                            this.m_SerialIO.Open(this.m_UsbManager);

                            this.m_Web.EvaluateJavascript("ext_stateChanged('OK')", null);
                            return;
                        }
                        catch (Java.IO.IOException e)
                        {
                            this.m_Web.EvaluateJavascript("ext_stateChanged('ERROR')", null);
                            return;
                        }
                    }
                }
            }

            this.m_Web.EvaluateJavascript("ext_stateChanged('Unknown')", null);
            #endregion
        }
 public FtdiSerialPort(UsbDevice device,
                       int portNumber,
                       IUsbSerialDriver driver) : base(device, portNumber)
 {
     Driver = driver;
 }
        public static bool InterfaceConnect(string port, object parameter)
        {
            if (_usbPort != null)
            {
                return(true);
            }
            try
            {
                _connectPort      = port;
                _connectParameter = parameter;

                if (!(parameter is ConnectParameterType connectParameter))
                {
                    return(false);
                }

                if (!port.StartsWith(PortId, StringComparison.OrdinalIgnoreCase))
                {
                    InterfaceDisconnect();
                    return(false);
                }

                List <IUsbSerialDriver> availableDrivers = GetDriverList(connectParameter.UsbManager);
                if (availableDrivers.Count <= 0)
                {
                    InterfaceDisconnect();
                    return(false);
                }

                string portData  = port.Remove(0, PortId.Length);
                int    portIndex = -1;
                if ((portData.Length > 0) && (portData[0] == ':'))
                {     // special id
                    if (portData.StartsWith(":SER=", StringComparison.OrdinalIgnoreCase))
                    { // serial number
                        string id    = portData.Remove(0, 5);
                        int    index = 0;
                        foreach (IUsbSerialDriver serialDriver in availableDrivers)
                        {
                            if (serialDriver.Ports[0] != null && string.Compare(serialDriver.Ports[0].Serial, id, StringComparison.Ordinal) == 0)
                            {
                                portIndex = index;
                                break;
                            }
                            index++;
                        }
                    }
                }
                else
                {
                    portIndex = Convert.ToInt32(port.Remove(0, PortId.Length));
                }

                if ((portIndex < 0) || (portIndex >= availableDrivers.Count))
                {
                    InterfaceDisconnect();
                    return(false);
                }
                IUsbSerialDriver    driver     = availableDrivers[portIndex];
                UsbDeviceConnection connection = connectParameter.UsbManager.OpenDevice(driver.Device);
                if (connection == null)
                {
                    InterfaceDisconnect();
                    return(false);
                }
                if (driver.Ports.Count < 1)
                {
                    InterfaceDisconnect();
                    return(false);
                }
                _usbPort = driver.Ports[0];
                _usbPort.Open(connection);
                _usbPort.SetParameters(9600, 8, StopBits.One, Parity.None);
                if (_usbPort is FtdiSerialDriver.FtdiSerialPort ftdiPort)
                {
                    ftdiPort.LatencyTimer = LatencyTime;
                    if (ftdiPort.LatencyTimer != LatencyTime)
                    {
                        InterfaceDisconnect();
                        return(false);
                    }
                }
                _currentWordLength = 8;
                _currentParity     = EdInterfaceObd.SerialParity.None;

                _usbPort.DTR = false;
                _usbPort.RTS = false;
                lock (QueueLock)
                {
                    ReadQueue.Clear();
                }

                _serialIoManager = new SerialInputOutputManager(_usbPort);
                _serialIoManager.DataReceived += (sender, e) =>
                {
                    lock (QueueLock)
                    {
                        foreach (byte value in e.Data)
                        {
                            ReadQueue.Enqueue(value);
                        }
                        DataReceiveEvent.Set();
                    }
                };
                _serialIoManager.Start(UsbBlockSize);
                if (_currentBaudRate != 0 && _currentWordLength != 0)
                {
                    if (InterfaceSetConfig(EdInterfaceObd.Protocol.Uart, _currentBaudRate, _currentWordLength, _currentParity, false) != EdInterfaceObd.InterfaceErrorResult.NoError)
                    {
                        InterfaceDisconnect();
                        return(false);
                    }
                    InterfaceSetDtr(_currentDtr);
                    InterfaceSetRts(_currentRts);
                }
                Ediabas?.LogString(EdiabasNet.EdLogLevel.Ifh, "Connected");
                _reconnectRequired = false;
            }
            catch (Exception)
            {
                InterfaceDisconnect();
                return(false);
            }
            return(true);
        }
Ejemplo n.º 11
0
 public SerialDevice(IUsbSerialDriver driver)
 {
     _driver = driver ?? throw new ArgumentNullException(nameof(driver));
 }
Ejemplo n.º 12
0
        public void OnClick(View v)
        {
            if (v.Id == btn_Connect.Id)
            {
                manager = (UsbManager)GetSystemService(UsbService);
                IList <IUsbSerialDriver> availableDrivers = UsbSerialProber.DefaultProber.FindAllDrivers(manager);
                if (availableDrivers.Count == 0)
                {
                    tv_Info.Append("No devices found");
                }
                else
                {
                    // Open a connection to the first available driver.

                    PendingIntent mPermissionIntent = PendingIntent.GetBroadcast(this, 0, Intent.SetAction("ACTION_USB_PERMISSION"), 0);
                    driver = availableDrivers[0];
                    manager.RequestPermission(driver.Device, mPermissionIntent);

                    connection = manager.OpenDevice(driver.Device);
                    if (connection == null)
                    {
                        tv_Info.Append("You probably need to call UsbManager.requestPermission(driver.getDevice(), ..)");
                    }
                    else
                    {
                        port = driver.Ports[0];
                        tv_Info.Append("Connected to USB");

                        port.Open(connection);
                        port.SetParameters(9600, 8, StopBits.One, Parity.None);
                        byte[] bytes = new byte[1024];
                        port.Read(bytes, 1000);
                    }
                }
                ThreadPool.QueueUserWorkItem(delegate(object state) {
                    while (connection != null)
                    {
                        try
                        {
                            byte[] readBuffer = new byte[1024];
                            int message       = port.Read(readBuffer, readBuffer.Length);
                            string input      = Encoding.ASCII.GetString(readBuffer, 0, message);
                            if (input != "")
                            {
                                RunOnUiThread(() => {
                                    tv_Info.Text = input;
                                });
                            }
                        }
                        catch (TimeoutException e)
                        {
                            //                Console.WriteLine(e.ToString());
                        }
                    }
                }, null);
            }
            else if (v.Id == btn_Send.Id)
            {
                try
                {
                    //port.SetParameters(115200, 8, StopBits.One, Parity.None);

                    byte[] buffer       = Encoding.ASCII.GetBytes(et_SendToServer.Text);
                    int    numBytesRead = port.Write(buffer, 1024);
                }
                catch (IOException e)
                {
                    tv_Info.Append(e.ToString());
                }
            }
            else if (v.Id == btn_Disconnect.Id)
            {
                port.Close();
            }
            else if (v.Id == btn_clear.Id)
            {
                tv_Info.Text = null;
            }
        }