public static IDeviceFactory CreateAndroidUsbDeviceFactory(
     this FilterDeviceDefinition filterDeviceDefinition,
     UsbManager usbManager,
     Context context,
     ILoggerFactory loggerFactory = null,
     GetConnectedDeviceDefinitionsAsync getConnectedDeviceDefinitionsAsync = null,
     GetUsbInterfaceManager getUsbInterfaceManager = null,
     ushort?readBufferSize          = null,
     ushort?writeBufferSize         = null,
     IAndroidFactory androidFactory = null,
     Func <AndroidUsbDevice, IUsbPermissionBroadcastReceiver> getUsbPermissionBroadcastReceiver = null
     ) =>
 CreateAndroidUsbDeviceFactory(
     new ReadOnlyCollection <FilterDeviceDefinition>(new List <FilterDeviceDefinition> {
     filterDeviceDefinition
 }),
     usbManager,
     context,
     loggerFactory,
     getConnectedDeviceDefinitionsAsync,
     getUsbInterfaceManager,
     readBufferSize,
     writeBufferSize,
     androidFactory,
     getUsbPermissionBroadcastReceiver);
 public UsbPermissionBroadcastReceiver(
     UsbManager manager,
     usbDevice device,
     Context context,
     IAndroidFactory androidFactory,
     ILogger logger = null)
 {
     _Manager        = manager ?? throw new ArgumentNullException(nameof(manager));
     _Device         = device ?? throw new ArgumentNullException(nameof(device));
     _Context        = context ?? throw new ArgumentNullException(nameof(context));
     _logger         = logger ?? NullLogger.Instance;
     _androidFactory = androidFactory;
 }
Пример #3
0
        public AndroidUsbInterfaceManager(
            UsbManager usbManager,
            int deviceNumberId,
            IAndroidFactory androidFactory,
            Func <usbDevice, IUsbPermissionBroadcastReceiver> usbPermissionBroadcastReceiver,
            ILoggerFactory loggerFactory = null,
            ushort?readBufferLength      = null,
            ushort?writeBufferLength     = null) : base(loggerFactory)
        {
            ReadBufferSizeProtected  = readBufferLength;
            WriteBufferSizeProtected = writeBufferLength;
            UsbManager      = usbManager ?? throw new ArgumentNullException(nameof(usbManager));
            DeviceNumberId  = deviceNumberId;
            _androidFactory = androidFactory;
            _getUsbPermissionBroadcastReceiver = usbPermissionBroadcastReceiver;

            Logger.LogInformation("read buffer size: {readBufferLength} writeBufferLength {writeBufferLength}", readBufferLength, writeBufferLength);
        }
Пример #4
0
 public AndroidUsbInterface(
     UsbInterface usbInterface,
     UsbDeviceConnection usbDeviceConnection,
     IAndroidFactory androidFactory,
     ILogger logger         = null,
     ushort?readBufferSize  = null,
     ushort?writeBufferSize = null,
     int?timeout            = null,
     Func <UsbDeviceConnection, SetupPacket, byte[], int?, Task <TransferResult> > performControlTransferAsync = null)
     : base(
         performControlTransferAsync != null ?
         //A func was passed in
         new PerformControlTransferAsync((sb, data, c) => performControlTransferAsync(usbDeviceConnection, sb, data, timeout)) :
         //Use the default
         new PerformControlTransferAsync((sb, data, c) => PerformControlTransferAndroid(usbDeviceConnection, sb, data, timeout, c)),
         logger,
         readBufferSize,
         writeBufferSize)
 {
     UsbInterface         = usbInterface ?? throw new ArgumentNullException(nameof(usbInterface));
     _UsbDeviceConnection = usbDeviceConnection ?? throw new ArgumentNullException(nameof(usbDeviceConnection));
     _androidFactory      = androidFactory;
     _timeout             = timeout;
 }
        public static IDeviceFactory CreateAndroidUsbDeviceFactory(
            this IEnumerable <FilterDeviceDefinition> filterDeviceDefinitions,
            UsbManager usbManager,
            Context context,
            ILoggerFactory loggerFactory = null,
            GetConnectedDeviceDefinitionsAsync getConnectedDeviceDefinitionsAsync = null,
            GetUsbInterfaceManager getUsbInterfaceManager = null,
            ushort?readBufferSize          = null,
            ushort?writeBufferSize         = null,
            IAndroidFactory androidFactory = null,
            Func <AndroidUsbDevice, IUsbPermissionBroadcastReceiver> getUsbPermissionBroadcastReceiver = null
            )
        {
            if (usbManager == null)
            {
                throw new ArgumentNullException(nameof(usbManager));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            loggerFactory ??= NullLoggerFactory.Instance;

#if __ANDROID__
            androidFactory ??= new AndroidFactory();

            getUsbPermissionBroadcastReceiver ??= new Func <AndroidUsbDevice, IUsbPermissionBroadcastReceiver>((ud) =>
                                                                                                               new UsbPermissionBroadcastReceiver(
                                                                                                                   usbManager,
                                                                                                                   ud,
                                                                                                                   context,
                                                                                                                   androidFactory,
                                                                                                                   loggerFactory.CreateLogger <UsbPermissionBroadcastReceiver>()));
#else
            if (androidFactory == null)
            {
                throw new ArgumentNullException(nameof(androidFactory));
            }

            if (getUsbPermissionBroadcastReceiver == null)
            {
                throw new ArgumentNullException(nameof(getUsbPermissionBroadcastReceiver));
            }
#endif

            getConnectedDeviceDefinitionsAsync ??= (cancellationToken) =>
            {
                return(Task.FromResult <IEnumerable <ConnectedDeviceDefinition> >
                       (
                           new ReadOnlyCollection <ConnectedDeviceDefinition>
                           (
                               usbManager
                               .DeviceList
                               .Select(kvp => kvp.Value)
                               .Where
                               (
                                   d => filterDeviceDefinitions
                                   .FirstOrDefault
                                   (
                                       f =>
                                       (!f.VendorId.HasValue || f.VendorId.Value == d.VendorId) &&
                                       (!f.ProductId.HasValue || f.ProductId.Value == d.ProductId)
                                   ) != null
                               )
                               .Select(AndroidUsbInterfaceManager.GetAndroidDeviceDefinition)
                               .ToList()
                           )
                       ));
            };

            getUsbInterfaceManager ??= (a, cancellationToken) => Task.FromResult <IUsbInterfaceManager>(
                new AndroidUsbInterfaceManager(
                    usbManager,
                    //TODO: throw a validation message
                    int.Parse(a, IntParsingCulture),
                    androidFactory,
                    getUsbPermissionBroadcastReceiver,
                    loggerFactory,
                    readBufferSize,
                    writeBufferSize
                    ));

            return(UsbDeviceFactoryExtensions.CreateUsbDeviceFactory(getConnectedDeviceDefinitionsAsync, getUsbInterfaceManager, loggerFactory));
        }