示例#1
0
        /// <summary>
        /// Opens the CI API
        /// </summary>
        public void OpenCI()
        {
            // HW Enable (always?) succeeds
            if (KNCBDA_HW_Enable(m_iDeviceIndex, m_tunerFilter) == 0)
            {
                Log.Log.Debug("KNC: card {0} HW Enable failed", m_iDeviceIndex);
            }

            m_callbacks                = new KNCCiCallbacks();
            m_callbacks.onCiMenu       = OnCiMenu;
            m_callbacks.onCiMenuChoice = OnCiMenuChoice;
            m_callbacks.onCiState      = OnCiState;
            m_callbacks.onCloseDisplay = OnCiCloseDisplay;
            m_callbacks.onOpenDisplay  = OnCiOpenDisplay;
            m_callbacks.onRequest      = OnCiRequest;
            m_callbacks.pParam         = 0;

            unsafe
            {
                // prepare structure to be passed as pointer
                Marshal.StructureToPtr(m_callbacks, ptrCallback, false);
                if (KNCBDA_CI_Enable(m_iDeviceIndex, m_tunerFilter, ptrCallback) != 0)
                {
                    ////CI_HW_Enable seems to always succeed ?!
                    //if (KNCBDA_CI_HW_Enable(m_iDeviceIndex, true) == 0)
                    //  Log.Log.Debug("KNC: card {0} CI HW enable FAILED!", m_iDeviceIndex);

                    // CI Enable succeeds always, only if CAM isReady there is a slot/CAM
                    if (KNCBDA_CI_IsReady(m_iDeviceIndex) != 0)
                    {
                        Log.Log.Debug("KNC: card {0} CI slot enabled successfully", m_iDeviceIndex);

                        // remember CAM is present
                        m_bCAM_present = true;
                        // init state to ready (callbacks are only done when changing, so expect it's ready first)
                        m_ciState = KNCCiSlotStatus.Ready;

                        StringBuilder nameBuffer = new StringBuilder(100);
                        if (KNCBDA_CI_GetName(m_iDeviceIndex, nameBuffer, (uint)nameBuffer.MaxCapacity) != 0)
                        {
                            Log.Log.Debug("KNC: card {0} CAM Type: {1}", m_iDeviceIndex, nameBuffer);
                        }
                        else
                        {
                            Log.Log.Debug("KNC: CI_GetName failed.");
                        }
                    }
                    else
                    {
                        Log.Log.Debug("KNC: card {0} detected without CAM", m_iDeviceIndex);
                    }
                }
            }
        }
示例#2
0
    /// <summary>
    /// Opens the CI API
    /// </summary>
    public void OpenCI()
    {
      // HW Enable (always?) succeeds
      if (KNCBDA_HW_Enable(m_iDeviceIndex, m_tunerFilter) == 0)
      {
        Log.Log.Debug("KNC: card {0} HW Enable failed", m_iDeviceIndex);
      }

      m_callbacks = new KNCCiCallbacks();
      m_callbacks.onCiMenu = OnCiMenu;
      m_callbacks.onCiMenuChoice = OnCiMenuChoice;
      m_callbacks.onCiState = OnCiState;
      m_callbacks.onCloseDisplay = OnCiCloseDisplay;
      m_callbacks.onOpenDisplay = OnCiOpenDisplay;
      m_callbacks.onRequest = OnCiRequest;
      m_callbacks.pParam = 0;

      unsafe
      {
        // prepare structure to be passed as pointer
        Marshal.StructureToPtr(m_callbacks, ptrCallback, false);
        if (KNCBDA_CI_Enable(m_iDeviceIndex, m_tunerFilter, ptrCallback) != 0)
        {
          ////CI_HW_Enable seems to always succeed ?!
          //if (KNCBDA_CI_HW_Enable(m_iDeviceIndex, true) == 0)
          //  Log.Log.Debug("KNC: card {0} CI HW enable FAILED!", m_iDeviceIndex);

          // CI Enable succeeds always, only if CAM isReady there is a slot/CAM
          if (KNCBDA_CI_IsReady(m_iDeviceIndex) != 0)
          {
            Log.Log.Debug("KNC: card {0} CI slot enabled successfully", m_iDeviceIndex);

            // remember CAM is present
            m_bCAM_present = true;
            // init state to ready (callbacks are only done when changing, so expect it's ready first)
            m_ciState = KNCCiSlotStatus.Ready;

            StringBuilder nameBuffer = new StringBuilder(100);
            if (KNCBDA_CI_GetName(m_iDeviceIndex, nameBuffer, (uint)nameBuffer.MaxCapacity) != 0)
              Log.Log.Debug("KNC: card {0} CAM Type: {1}", m_iDeviceIndex, nameBuffer);
            else
              Log.Log.Debug("KNC: CI_GetName failed.");
          }
          else
          {
            Log.Log.Debug("KNC: card {0} detected without CAM", m_iDeviceIndex);
          }
        }
      }
    }