/// <summary> /// constructor for enabling technotrend ci /// </summary> /// <param name="tunerFilter">tunerfilter</param> public TechnoTrendAPI(IBaseFilter tunerFilter) { m_deviceID = 0; m_slot = 0; m_ciStatus = 0; m_caErrorCount = 0; m_waitTimeout = 0; m_ciSlotAvailable = false; m_slotStatus = TTCiSlotStatus.SlotUnknownState; m_tunerFilter = tunerFilter; ptrPmt = Marshal.AllocCoTaskMem(1024); // buffer for handling pmt _ptrDataInstance = Marshal.AllocCoTaskMem(1024); // buffer for diseqc messages // detect card type DetectCardType(); // if unknown exit if (m_deviceType == TTApiDeviceCat.UNKNOWN) return; // enumerate device id for opening hw GetDeviceID(); // OpenCI OpenCI(); }
/// <summary> /// callback from driver for CI slot status /// </summary> /// <param name="Context">Can be used for a context pointer in the calling application. This parameter can be NULL.</param> /// <param name="nSlot">Is the Slot ID.</param> /// <param name="nStatus"></param> /// <param name="csInfo"></param> public unsafe void onSlotChange( IntPtr Context, byte nSlot, byte nStatus, SlotInfo* csInfo ) { try { m_slotStatus = (TTCiSlotStatus)nStatus; Log.Log.Debug("TechnoTrend: slot {0} changed", nSlot); if (csInfo != null) { Log.Log.Debug("TechnoTrend: CI status:{0} ", m_slotStatus); if (csInfo->pMenuTitleString != null) { Log.Log.Debug("TechnoTrend: CI text :{0} ", Marshal.PtrToStringAnsi(csInfo->pMenuTitleString)); } for (int i = 0; i < csInfo->wNoOfCaSystemIDs; ++i) { Log.Log.Debug("TechnoTrend: ca system id :{0:X} ", csInfo->pCaSystemIDs[i]); } } } catch (Exception) { Log.Log.Debug("TechnoTrend: OnSlotChange() exception"); } }