internal LinuxDeviceEndpoint(EndpointDescriptor descriptor, string hidrawPath)
        {
            this.descriptor = descriptor;
            var hidrawMatch = hidrawRegex.Match(hidrawPath);

            if (hidrawMatch.Success)
            {
                this.hidrawPath = $"/dev/{hidrawMatch.Groups[1].Value}";
            }
            else
            {
                throw new Exception("Endpoint is not an hidraw endpoint.");
            }

            var fd = open(this.hidrawPath, oflag.RDWR);

            if (fd > 0)
            {
                var res = ioctl(fd, HIDIOCGRDESCSIZE, out var len);
                if (res < 0)
                {
                    throw CreateNativeException();
                }

                base.InputReportLength = len;
            }
        }
Example #2
0
 public static EndpointHandler Create <TRequest, TResponse>(IPredicateHandler languagePredicateHandler, CompositionHost host,
                                                            ILogger logger, EndpointDescriptor item,
                                                            IEnumerable <Lazy <IRequestHandler, OmniSharpLanguage> > handlers,
                                                            Lazy <EndpointHandler <UpdateBufferRequest, object> > updateBufferHandler,
                                                            IEnumerable <Plugin> plugins)
 {
     return(new EndpointHandler <TRequest, TResponse>(languagePredicateHandler, host, logger, item, handlers.Where(x => x.Metadata.EndpointName == item.EndpointName), updateBufferHandler, plugins));
 }
Example #3
0
        public List <EndpointDescriptor> GetEndpointDescriptorList()
        {
            endpointDescriptorList.Clear();
            List <EndpointDescriptor> buffer = new List <EndpointDescriptor>();

            Connect();

            MySqlCommand cmd = connection.CreateCommand();

            cmd.CommandText = "SELECT * FROM endpoint_descriptor ORDER BY endpoint_descriptor_id";

            HtaMySqlDataReader reader = null;

            try
            {
                reader = new HtaMySqlDataReader(cmd.ExecuteReader());
            }
            catch
            {
                MessageBox.Show("Datenbankfehler.", "", MessageBoxButton.OK);
                return(buffer);
            }

            while (reader.Read())
            {
                EndpointDescriptor newEndpointType = ReadEndpointDescriptor(reader);
                buffer.Add(newEndpointType);
            }

            Disconnect();

            foreach (EndpointDescriptor ep in buffer)
            {
                EndpointDescriptor elementToAdd = null;

                if (ep.ParentId > 0)
                {
                    if (buffer.Any(item => item.Id == ep.ParentId))
                    {
                        EndpointDescriptor parent = buffer.First(item => item.Id == ep.ParentId);
                        parent.ChildList.Add(ep);
                        ep.Parent    = parent;
                        elementToAdd = parent;
                    }
                }
                else
                {
                    elementToAdd = ep;
                }

                if (!endpointDescriptorList.Any(item => item.Id == elementToAdd.Id))
                {
                    endpointDescriptorList.Add(elementToAdd);
                }
            }

            return(endpointDescriptorList);
        }
Example #4
0
        public NodeGraphConnector(EndpointDescriptor descriptor, NodeGraphView p_view, ConnectorType type)
        {
            this.m_Name        = String.Empty;
            this.m_oParentNode = null;

            this.m_oView           = p_view;
            this.m_oConnectorType  = type;
            this.m_iConnectorIndex = descriptor.index;
        }
Example #5
0
        public int SaveEndpointDescriptor(EndpointDescriptor EndpointDescriptor)
        {
            Connect();

            string cmdPrefix = "";
            string cmdSuffix = "";
            string cmdText   = "";

            if (EndpointDescriptor.Id > 0)
            {
                cmdPrefix = "UPDATE endpoint_descriptor SET";
                cmdSuffix = $" WHERE endpoint_descriptor_id = {EndpointDescriptor.Id}";
            }
            else
            {
                cmdPrefix = "INSERT INTO endpoint_descriptor SET";
            }

            cmdText = cmdPrefix + " endpoint_descriptor_name = ?endpoint_descriptor_name, abbreviation = ?abbreviation, parent_id = ?parent_id, endpoint_descriptor_dimension = ?endpoint_descriptor_dimension" + cmdSuffix;

            MySqlCommand cmd = connection.CreateCommand();

            cmd.CommandText = cmdText;

            cmd.Parameters.AddWithValue("?endpoint_descriptor_name", EndpointDescriptor.Name);
            cmd.Parameters.AddWithValue("?abbreviation", EndpointDescriptor.Abbreviation);
            if (EndpointDescriptor.ParentId > 0)
            {
                cmd.Parameters.AddWithValue("?parent_id", EndpointDescriptor.ParentId);
            }
            else
            {
                cmd.Parameters.AddWithValue("?parent_id", null);
            }
            cmd.Parameters.AddWithValue("?endpoint_descriptor_dimension", EndpointDescriptor.Dimension.ToString().ToLower());

            int rowCount = cmd.ExecuteNonQuery();

            Disconnect();

            if (rowCount > 0)
            {
                if (cmd.LastInsertedId > 0)
                {
                    return(Convert.ToInt32(cmd.LastInsertedId));
                }
                else
                {
                    return(EndpointDescriptor.Id);
                }
            }
            else
            {
                return(EndpointDescriptor.Id);
            }
        }
Example #6
0
        public static EndpointHandler Factory(IPredicateHandler languagePredicateHandler, CompositionHost host,
                                              ILogger logger, EndpointDescriptor item,
                                              IEnumerable <Lazy <IRequestHandler, OmniSharpLanguage> > handlers,
                                              Lazy <EndpointHandler <UpdateBufferRequest, object> > updateBufferHandler,
                                              IEnumerable <Plugin> plugins)
        {
            var createMethod = typeof(EndpointHandler).GetTypeInfo().DeclaredMethods.First(x => x.Name == nameof(EndpointHandler.Create));

            return((EndpointHandler)createMethod.MakeGenericMethod(item.RequestType, item.ResponseType).Invoke(null, new object[] { languagePredicateHandler, host, logger, item, handlers, updateBufferHandler, plugins }));
        }
        public override Endpoint GetEndpoint(uint index)
        {
            var udev           = udev_new();
            var udevEnumerator = udev_enumerate_new(udev);

            if (udevEnumerator == null)
            {
                throw new UdevException("Failed to create udev enumerator.");
            }

            udev_enumerate_add_match_subsystem(udevEnumerator, "hidraw");
            udev_enumerate_scan_devices(udevEnumerator);

            List <string> endpointPaths = new List <string>();

            for (var entry = udev_enumerate_get_list_entry(udevEnumerator); entry != null; entry = udev_list_entry_get_next(entry))
            {
                var          sysPath       = udev_list_entry_get_name(entry);
                udev_device *hidEndpoint   = udev_device_new_from_syspath(udev, sysPath);
                udev_device *parentDevice  = udev_device_get_parent_with_subsystem_devtype(hidEndpoint, "usb", "usb_device");
                var          parentDevname = udev_device_get_property_value(parentDevice, "DEVNAME");
                if (parentDevname == devname)
                {
                    endpointPaths.Add(sysPath);
                }
            }

            fixed(byte *endpointDescriptors = otherDescriptors)
            {
                var descriptorPtr = (EndpointDescriptor *)endpointDescriptors;

                int currentIndex = 0;

                while (currentIndex < otherDescriptors.Length)
                {
                    EndpointDescriptor descriptor = *descriptorPtr;
                    if (descriptor.bDescriptorType.HasFlag(DescriptorType.Endpoint))
                    {
                        int  endpointNum       = descriptor.bEndpointAddress & 0x0f;
                        bool endpointDirection = (descriptor.bEndpointAddress & (1 << 7)) != 0;
                        if (endpointNum == index)
                        {
                            return(new LinuxDeviceEndpoint(descriptor, endpointPaths[(int)index]));
                        }
                    }
                    currentIndex += descriptor.bLength;
                    descriptorPtr = (EndpointDescriptor *)(endpointDescriptors + currentIndex);
                }
            }

            throw new Exception($"Requested endpoint {index} doesn't exist or is not available.");
        }
Example #8
0
        public bool DeleteEndpointDescriptor(EndpointDescriptor EndpointDescriptor)
        {
            Connect();

            MySqlCommand cmd = connection.CreateCommand();

            cmd.CommandText = $"DELETE FROM endpoint_descriptor WHERE endpoint_descriptor_id={EndpointDescriptor.Id}";
            int rowCount = cmd.ExecuteNonQuery();

            Disconnect();

            return(rowCount > 0);
        }
Example #9
0
        public EndpointDescriptor ReadEndpointDescriptor(HtaMySqlDataReader reader)
        {
            EndpointDescriptor result = new EndpointDescriptor();

            result.Id             = reader.GetInt32("endpoint_descriptor_id");
            result.Name           = reader.GetString("endpoint_descriptor_name");
            result.Abbreviation   = reader.GetString("abbreviation");
            result.Dimension      = (EndpointDimensionType)Enum.Parse(typeof(EndpointDimensionType), reader.GetString("endpoint_descriptor_dimension").ToUpper());
            result.ParentId       = reader.GetInt32("parent_id");
            result.NameEN         = reader.GetString("endpoint_descriptor_shorthand");
            result.AbbreviationEN = reader.GetString("abbreviation_en");

            return(result);
        }
Example #10
0
        public NodeGraphConnector(EndpointDescriptor descriptor, NodeGraphNode p_parent, ConnectorType type)
        {
            this.m_Name = String.Empty;
            if (p_parent != null)
            {
                this.m_oParentNode = p_parent;
            }
            else
            {
                this.m_oParentNode = null;
            }

            this.m_oView           = p_parent.ParentView;
            this.m_oConnectorType  = type;
            this.m_iConnectorIndex = descriptor.index;
        }
Example #11
0
        public static unsafe UsbEndpointInfo FromUsbEndpointDescriptor(EndpointDescriptor descriptor)
        {
            Debug.Assert(descriptor.DescriptorType == (int)DescriptorType.Endpoint, "An endpoint descriptor was expected");

            var value = new UsbEndpointInfo();

            value.Attributes      = descriptor.Attributes;
            value.EndpointAddress = descriptor.EndpointAddress;

            value.RawDescriptors = new byte[descriptor.ExtraLength];
            if (descriptor.ExtraLength > 0)
            {
                Span <byte> extra = new Span <byte>(descriptor.Extra, descriptor.ExtraLength);
                extra.CopyTo(value.RawDescriptors);
            }

            value.Interval      = descriptor.Interval;
            value.MaxPacketSize = descriptor.MaxPacketSize;
            value.Refresh       = descriptor.Refresh;
            value.SyncAddress   = descriptor.SynchAddress;

            return(value);
        }
Example #12
0
 internal LinuxDeviceEndpoint(EndpointDescriptor descriptor, string hidrawPath)
 {
     this.descriptor = descriptor;
     this.hidrawPath = hidrawPath;
 }
Example #13
0
 public int SaveEndpointDescriptor(EndpointDescriptorViewModel endpointDescriptorViewModel)
 {
     return(SaveEndpointDescriptor(EndpointDescriptor.FromViewModel(endpointDescriptorViewModel)));
 }