Exemplo n.º 1
0
        public void LoadCrossbarSources(string deviceName, ComboBox cbxCrossbarInput)
        {
            DoCrossbarOperation(
                deviceName,
                delegate(IAMCrossbar crossbar)
            {
                if (crossbar != null)
                {
                    Trace.WriteLine("Found Crossbar");

                    settings.UsesTunerCrossbar = true;
                    settings.Save();

                    int connectedInputPin       = -1;
                    int videoDecoderOutPinIndex = FindVideoDecoderOutputPin(crossbar);
                    cbxCrossbarInput.Enabled    = videoDecoderOutPinIndex != -1;
                    if (videoDecoderOutPinIndex != -1)
                    {
                        crossbar.get_IsRoutedTo(videoDecoderOutPinIndex, out connectedInputPin);
                    }

                    int outputPinsCount;
                    int inputPinsCount;
                    int hr = crossbar.get_PinCounts(out outputPinsCount, out inputPinsCount);
                    DsError.ThrowExceptionForHR(hr);

                    for (int i = 0; i < inputPinsCount; i++)
                    {
                        int relatedIndex;
                        PhysicalConnectorType connectorType;
                        hr = crossbar.get_CrossbarPinInfo(true, i, out relatedIndex, out connectorType);
                        if (hr == 0)
                        {
                            Trace.WriteLine(string.Format("Crossbar Input Pin {0}: {1}", i, GetPhysicalPinName(connectorType)));

                            if (IsVideoPin(connectorType))
                            {
                                int addedIdnex = cbxCrossbarInput.Items.Add(
                                    new CrossbarPinEntry()
                                {
                                    PinIndex = i,
                                    PinName  = GetPhysicalPinName(connectorType)
                                }
                                    );

                                if (connectedInputPin == i)
                                {
                                    cbxCrossbarInput.SelectedIndex = addedIdnex;
                                }
                            }
                        }
                    }

                    cbxCrossbarInput.Enabled = true;
                }
                else
                {
                    UpdateNoCrossbarSettings(cbxCrossbarInput);

                    settings.UsesTunerCrossbar = false;
                    settings.Save();
                }
            }
                );
        }