Example #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);
                    }
                }
            }
        }
Example #2
0
 /// <summary>
 /// Callback from driver when CI status changes
 /// </summary>
 /// <param name="slot">Slot</param>
 /// <param name="State">Status</param>
 /// <param name="lpszMessage">Message</param>
 /// <param name="pParam">Context pointer</param>
 public void OnCiState(byte slot, KNCCiSlotStatus State, String lpszMessage, IntPtr pParam)
 {
     lock (this)
     {
         m_ciState = State; // remember in instance
         if (m_ciState == KNCCiSlotStatus.Ready)
         {
             m_waitTimeout = 0; // allow one new retry
         }
         Log.Log.Debug("KNC: card {0} CI State: {1} {2}", m_iDeviceIndex, lpszMessage, State);
     }
 }
Example #3
0
 /// <summary>
 /// Callback from driver when CI status changes
 /// </summary>
 /// <param name="slot">Slot</param>
 /// <param name="State">Status</param>
 /// <param name="lpszMessage">Message</param>
 /// <param name="pParam">Context pointer</param>
 public void OnCiState(byte slot, KNCCiSlotStatus State, String lpszMessage, IntPtr pParam)
 {
   lock (this)
   {
     m_ciState = State; // remember in instance
     if (m_ciState == KNCCiSlotStatus.Ready)
     {
       m_waitTimeout = 0; // allow one new retry
     }
     Log.Log.Debug("KNC: card {0} CI State: {1} {2}", m_iDeviceIndex, lpszMessage, State);
   }
 }
Example #4
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);
          }
        }
      }
    }