Beispiel #1
0
        /// <summary>
        /// Get the preferred plmn list asynchronously.
        /// </summary>
        /// <since_tizen> 4 </since_tizen>
        /// <returns>List of NetworkPreferredPlmnInfo.</returns>
        /// <privilege>http://tizen.org/privilege/telephony</privilege>
        /// <feature>http://tizen.org/feature/network.telephony</feature>
        /// <exception cref="System.NotSupportedException">Thrown when feature is not supported.</exception>
        /// <exception cref="System.UnauthorizedAccessException">Thrown when privilege access is denied.</exception>
        /// <exception cref="System.InvalidOperationException">Thrown when network instance is invalid or when method failed due to invalid operation.</exception>
        public Task <IEnumerable <NetworkPreferredPlmnInfo> > GetNetworkPreferredPlmn()
        {
            TaskCompletionSource <IEnumerable <NetworkPreferredPlmnInfo> > task = new TaskCompletionSource <IEnumerable <NetworkPreferredPlmnInfo> >();
            IntPtr id;

            id = (IntPtr)_requestId++;
            _response_map[id] = (IntPtr handle, int result, IntPtr dataResponse, IntPtr key) =>
            {
                Task resultTask = new Task(() =>
                {
                    if (result != (int)TapiError.Success)
                    {
                        Log.Error(TapiUtility.LogTag, "Error occurs during getting the preferred plmn list, " + (TapiError)result);
                        task.SetException(new InvalidOperationException("Error occurs during getting the preferred plmn list, " + (TapiError)result));
                        return;
                    }

                    NetworkPreferredPlmnListStruct plmnStruct       = Marshal.PtrToStructure <NetworkPreferredPlmnListStruct>(dataResponse);
                    IEnumerable <NetworkPreferredPlmnInfo> plmnInfo = NetworkStructConversions.ConvertNetworkPreferredPlmnStruct(plmnStruct);
                    task.SetResult(plmnInfo);
                });

                resultTask.Start();
                resultTask.Wait();
                _response_map.Remove(key);
            };

            int ret = Interop.Tapi.Network.GetNetworkPreferredPlmn(_handle, _response_map[id], id);

            if (ret != (int)TapiError.Success)
            {
                Log.Error(TapiUtility.LogTag, "Failed to get the preferred plmn list, Error: " + (TapiError)ret);
                TapiUtility.ThrowTapiException(ret, _handle, "http://tizen.org/privilege/telephony");
            }

            return(task.Task);
        }
Beispiel #2
0
        /// <summary>
        /// Get the neighboring cell info asynchronously.
        /// </summary>
        /// <since_tizen> 4 </since_tizen>
        /// <returns>Instance of NetworkNeighboringCell.</returns>
        /// <privilege>http://tizen.org/privilege/telephony</privilege>
        /// <feature>http://tizen.org/feature/network.telephony</feature>
        /// <exception cref="System.NotSupportedException">Thrown when feature is not supported.</exception>
        /// <exception cref="System.UnauthorizedAccessException">Thrown when privilege access is denied.</exception>
        /// <exception cref="System.InvalidOperationException">Thrown when network instance is invalid or when method failed due to invalid operation.</exception>
        public Task <NetworkNeighboringCell> GetNeighborCellNetwork()
        {
            TaskCompletionSource <NetworkNeighboringCell> task = new TaskCompletionSource <NetworkNeighboringCell>();
            IntPtr id;

            id = (IntPtr)_requestId++;
            _response_map[id] = (IntPtr handle, int result, IntPtr dataResponse, IntPtr key) =>
            {
                Task resultTask = new Task(() =>
                {
                    if (result != (int)TapiError.Success)
                    {
                        Log.Error(TapiUtility.LogTag, "Error occurs during getting the neigboring cell info, " + (TapiError)result);
                        task.SetException(new InvalidOperationException("Error occurs during getting the neigboring cell info, " + (TapiError)result));
                        return;
                    }

                    NetworkNeighboringCellStruct cellStruct = Marshal.PtrToStructure <NetworkNeighboringCellStruct>(dataResponse);
                    NetworkNeighboringCell cell             = NetworkStructConversions.ConvertNeighborCellStruct(cellStruct);
                    task.SetResult(cell);
                });

                resultTask.Start();
                resultTask.Wait();
                _response_map.Remove(key);
            };

            int ret = Interop.Tapi.Network.GetNetworkNeighborCell(_handle, _response_map[id], id);

            if (ret != (int)TapiError.Success)
            {
                Log.Error(TapiUtility.LogTag, "Failed to get the neigboring cell info, Error: " + (TapiError)ret);
                TapiUtility.ThrowTapiException(ret, _handle, "http://tizen.org/privilege/telephony");
            }

            return(task.Task);
        }
Beispiel #3
0
        /// <summary>
        /// Sends a request to do manual search for the available networks and provides the Network List to the user asynchronously.
        /// </summary>
        /// <since_tizen> 4 </since_tizen>
        /// <returns>Instance of NetworkPlmnList.</returns>
        /// <privilege>http://tizen.org/privilege/telephony.admin</privilege>
        /// <privlevel>platform</privlevel>
        /// <feature>http://tizen.org/feature/network.telephony</feature>
        /// <exception cref="System.NotSupportedException">Thrown when feature is not supported.</exception>
        /// <exception cref="System.UnauthorizedAccessException">Thrown when privilege access is denied.</exception>
        /// <exception cref="System.InvalidOperationException">Thrown when network instance is invalid or when method failed due to invalid operation.</exception>
        public Task <NetworkPlmnList> SearchNetwork()
        {
            TaskCompletionSource <NetworkPlmnList> task = new TaskCompletionSource <NetworkPlmnList>();
            IntPtr id;

            id = (IntPtr)_requestId++;
            _response_map[id] = (IntPtr handle, int result, IntPtr dataResponse, IntPtr key) =>
            {
                Task resultTask = new Task(() =>
                {
                    if (result != (int)TapiError.Success)
                    {
                        Log.Error(TapiUtility.LogTag, "Error occurs during manual search for the available networks, " + (TapiError)result);
                        task.SetException(new InvalidOperationException("Error occurs during manual search for the available networks, " + (TapiError)result));
                        return;
                    }

                    NetworkPlmnListStruct listStruct = Marshal.PtrToStructure <NetworkPlmnListStruct>(dataResponse);
                    NetworkPlmnList plmnClass        = NetworkStructConversions.ConvertNetworkPlmnListStruct(listStruct);
                    task.SetResult(plmnClass);
                });

                resultTask.Start();
                resultTask.Wait();
                _response_map.Remove(key);
            };

            int ret = Interop.Tapi.Network.SearchNetwork(_handle, _response_map[id], id);

            if (ret != (int)TapiError.Success)
            {
                Log.Error(TapiUtility.LogTag, "Failed to do manual search for the available networks, Error: " + (TapiError)ret);
                TapiUtility.ThrowTapiException(ret, _handle, "http://tizen.org/privilege/telephony.admin");
            }

            return(task.Task);
        }
Beispiel #4
0
        /// <summary>
        /// Registers a notification callback for notification change events on DBus interface.
        /// </summary>
        /// <param name="id">Notification id for which a callback has to be registered.</param>
        /// <feature>http://tizen.org/feature/network.telephony</feature>
        /// <exception cref="NotSupportedException">Thrown when telephony feature is not supported.</exception>
        /// <exception cref="ArgumentException">Thrown when it is failed due to invalid parameter.</exception>
        /// <exception cref="InvalidOperationException">Thrown when it is failed due to invalid operation.</exception>
        public void RegisterNotiEvent(Notification id)
        {
            _notificationChangedCb = (IntPtr handle, IntPtr notiIdPtr, IntPtr data, IntPtr userData) =>
            {
                if (_notificationChanged != null)
                {
                    string       notiId   = null;
                    object       notiData = null;
                    Notification noti     = default(Notification);
                    if (notiIdPtr != IntPtr.Zero)
                    {
                        notiId = Marshal.PtrToStringAnsi(notiIdPtr);
                        foreach (Notification n in Enum.GetValues(typeof(Notification)))
                        {
                            if (notiId == TapiUtility.ConvertNotiToString(n))
                            {
                                noti = n;
                                break;
                            }
                        }
                    }

                    switch (noti)
                    {
                    case Notification.IdleVoiceCall:
                        CallIdleStatusNotiStruct voiceIdleStatusNoti = Marshal.PtrToStructure <CallIdleStatusNotiStruct>(data);
                        notiData = CallStructConversions.ConvertCallIdleStatusNoti(voiceIdleStatusNoti);
                        break;

                    case Notification.ActiveVoiceCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.HeldVoiceCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.DialingVoiceCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.AlertVoiceCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.IncomingVoiceCall:
                        CallIncomingInfoStruct callIncomingInfo = Marshal.PtrToStructure <CallIncomingInfoStruct>(data);
                        notiData = CallStructConversions.ConvertIncomingCallInfo(callIncomingInfo);
                        break;

                    case Notification.IdleVideoCall:
                        CallIdleStatusNotiStruct videoIdleStatus = Marshal.PtrToStructure <CallIdleStatusNotiStruct>(data);
                        notiData = CallStructConversions.ConvertCallIdleStatusNoti(videoIdleStatus);
                        break;

                    case Notification.ActiveVideoCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.DialingVideoCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.AlertVideoCall:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.IncomingVideoCall:
                        CallIncomingInfoStruct videoIncomingInfo = Marshal.PtrToStructure <CallIncomingInfoStruct>(data);
                        notiData = CallStructConversions.ConvertIncomingCallInfo(videoIncomingInfo);
                        break;

                    case Notification.WaitingCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.ForwardCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.BarredIncomingCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.BarredOutgoingCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.ForwardUnconditionalCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.ForwardConditionalCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.ForwardedCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.HeldCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.ActiveCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.JoinedCallInfo:
                        notiData = (uint)Marshal.ReadInt32(data);
                        break;

                    case Notification.RecCallInfo:
                        CallRecordStruct recordStruct = Marshal.PtrToStructure <CallRecordStruct>(data);
                        notiData = CallStructConversions.ConvertCallRecordStruct(recordStruct);
                        break;

                    case Notification.PrivacyModeCall:
                        notiData = (CallPrivacyMode)Marshal.ReadInt32(data);
                        break;

                    case Notification.OtaspCall:
                        notiData = (CallOtaspStatus)Marshal.ReadInt32(data);
                        break;

                    case Notification.OtapaCall:
                        notiData = (CallOtapaStatus)Marshal.ReadInt32(data);
                        break;

                    case Notification.CallSignalInfo:
                        CallSignalInfoStruct signalInfoStruct = Marshal.PtrToStructure <CallSignalInfoStruct>(data);
                        notiData = CallStructConversions.ConvertCallSignalInfo(signalInfoStruct);
                        break;

                    case Notification.CallSoundPath:
                        notiData = (SoundPath)Marshal.ReadInt32(data);
                        break;

                    case Notification.CallSoundRingbackTone:
                        notiData = (CallSoundRingbackNoti)Marshal.ReadInt32(data);
                        break;

                    case Notification.CallSoundWbamr:
                        notiData = (CallSoundWbamrNoti)Marshal.ReadInt32(data);
                        break;

                    case Notification.CallSoundNoiceReduction:
                        notiData = (CallSoundNoiseReduction)Marshal.ReadInt32(data);
                        break;

                    case Notification.CallSoundClock:
                        int status = Marshal.ReadInt32(data);
                        if (status == 1)
                        {
                            notiData = true;
                        }

                        else if (status == 0)
                        {
                            notiData = false;
                        }

                        break;

                    case Notification.CallPreferredVoiceSubscription:
                        notiData = (CallPreferredVoiceSubscription)Marshal.ReadInt32(data);
                        break;

                    case Notification.CallupgradeRequested:
                        CallUpgradeDowngradeNotiStruct upgradeNotiStruct = Marshal.PtrToStructure <CallUpgradeDowngradeNotiStruct>(data);
                        notiData = CallStructConversions.ConvertCallUpgradeNoti(upgradeNotiStruct);
                        break;

                    case Notification.CallDowngraded:
                        CallUpgradeDowngradeNotiStruct downgradeNotiStruct = Marshal.PtrToStructure <CallUpgradeDowngradeNotiStruct>(data);
                        notiData = CallStructConversions.ConvertCallUpgradeNoti(downgradeNotiStruct);
                        break;

                    case Notification.ModemPower:
                        notiData = (PhonePowerStatus)Marshal.ReadInt32(data);
                        break;

                    case Notification.SimStatus:
                        notiData = (SimCardStatus)Marshal.ReadInt32(data);
                        break;

                    case Notification.SimRefreshed:
                        notiData = (SatCmdQualiRefresh)Marshal.ReadInt32(data);
                        break;

                    case Notification.SatSetupMenu:
                        SatMainMenuInfoStruct mainMenuStruct = Marshal.PtrToStructure <SatMainMenuInfoStruct>(data);
                        notiData = SatStructConversions.ConvertSatMainMenuInfoStruct(mainMenuStruct);
                        break;

                    case Notification.SatDisplayText:
                        SatDisplayTextStruct textStruct = Marshal.PtrToStructure <SatDisplayTextStruct>(data);
                        notiData = SatStructConversions.ConvertSatDisplayTextStruct(textStruct);
                        break;

                    case Notification.SatSelectItem:
                        SatSelectItemStruct itemStruct = Marshal.PtrToStructure <SatSelectItemStruct>(data);
                        notiData = SatStructConversions.ConvertSatSelectItemStruct(itemStruct);
                        break;

                    case Notification.SatGetInKey:
                        SatGetInKeyStruct inKeyStruct = Marshal.PtrToStructure <SatGetInKeyStruct>(data);
                        notiData = SatStructConversions.ConvertSatGetInKeyStruct(inKeyStruct);
                        break;

                    case Notification.SatGetInput:
                        SatGetInputStruct inputStruct = Marshal.PtrToStructure <SatGetInputStruct>(data);
                        notiData = SatStructConversions.ConvertSatGetInputStruct(inputStruct);
                        break;

                    case Notification.SatRefresh:
                        SatRefreshStruct refreshStruct = Marshal.PtrToStructure <SatRefreshStruct>(data);
                        notiData = SatStructConversions.ConvertSatRefreshStruct(refreshStruct);
                        break;

                    case Notification.SatSendSms:
                        SatSendSmsStruct smsStruct = Marshal.PtrToStructure <SatSendSmsStruct>(data);
                        notiData = SatStructConversions.ConvertSatSendSmsStruct(smsStruct);
                        break;

                    case Notification.SatSetupEventList:
                        SatEventListDataStruct eventStruct = Marshal.PtrToStructure <SatEventListDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatEventListStruct(eventStruct);
                        break;

                    case Notification.SatSendDtmf:
                        SatSendDtmfDataStruct dtmfStruct = Marshal.PtrToStructure <SatSendDtmfDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatSendDtmfStruct(dtmfStruct);
                        break;

                    case Notification.SatEndProactiveSession:
                        notiData = (SatCommandType)Marshal.ReadInt32(data);
                        break;

                    case Notification.SatCallControlResult:
                        SatCallCtrlIndDataStruct dataStruct = Marshal.PtrToStructure <SatCallCtrlIndDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatCallCtrlIndDataStruct(dataStruct);
                        break;

                    case Notification.SatMoSmControlResult:
                        SatMoSmsCtrlDataStruct moStruct = Marshal.PtrToStructure <SatMoSmsCtrlDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatMoSmsCtrlDataStruct(moStruct);
                        break;

                    case Notification.SatSetupCall:
                        SatSetupCallDataStruct callDataStruct = Marshal.PtrToStructure <SatSetupCallDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatSetupCallDataStruct(callDataStruct);
                        break;

                    case Notification.SatSendSs:
                        SatSendSsDataStruct ssStruct = Marshal.PtrToStructure <SatSendSsDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatSendSsDataStruct(ssStruct);
                        break;

                    case Notification.SatSetupUssd:
                        SatSetupUssdDataStruct ussdStruct = Marshal.PtrToStructure <SatSetupUssdDataStruct>(data);
                        notiData = SatStructConversions.ConvertSatSetupUssdDataStruct(ussdStruct);
                        break;

                    case Notification.PhonebookStatus:
                        SimPhonebookStatusStruct statusStruct = Marshal.PtrToStructure <SimPhonebookStatusStruct>(data);
                        notiData = PhonebookStructConversions.ConvertSimPhonebookStatusStruct(statusStruct);
                        break;

                    case Notification.PhonebookContactChange:
                        PhonebookContactChangeInfoStruct contactStruct = Marshal.PtrToStructure <PhonebookContactChangeInfoStruct>(data);
                        notiData = PhonebookStructConversions.ConvertPhonebookContactChangeStruct(contactStruct);
                        break;

                    case Notification.NetworkRegistrationStatus:
                        NetworkRegistrationStatusStruct nwStruct = Marshal.PtrToStructure <NetworkRegistrationStatusStruct>(data);
                        notiData = NetworkStructConversions.ConvertNetworkRegistrationStruct(nwStruct);
                        break;

                    case Notification.NetworkCellInfo:
                        NetworkCellNotiStruct notiStruct = Marshal.PtrToStructure <NetworkCellNotiStruct>(data);
                        notiData = NetworkStructConversions.ConvertNetworkCellNotiStruct(notiStruct);
                        break;

                    case Notification.NetworkChange:
                        NetworkChangeNotiStruct changeStruct = Marshal.PtrToStructure <NetworkChangeNotiStruct>(data);
                        notiData = NetworkStructConversions.ConvertNetworkChangeStruct(changeStruct);
                        break;

                    case Notification.NetworkTimeInfo:
                        NetworkTimeNotiStruct timeStruct = Marshal.PtrToStructure <NetworkTimeNotiStruct>(data);
                        notiData = NetworkStructConversions.ConvertNetworkTimeNotiStruct(timeStruct);
                        break;

                    case Notification.NetworkIdentity:
                        NetworkIdentityNotiStruct idStruct = Marshal.PtrToStructure <NetworkIdentityNotiStruct>(data);
                        notiData = NetworkStructConversions.ConvertNetworkIdentityStruct(idStruct);
                        break;

                    case Notification.NetworkSignalStrength:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkEmergencyCallbackMode:
                        notiData = (NetworkEmergencyCallbackMode)Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkDefaultDataSubscription:
                        notiData = (NetworkDefaultDataSubscription)Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkDefaultSubscription:
                        notiData = (NetworkDefaultSubscription)Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkCellId:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkLac:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkTac:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkSystemId:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkNetworkId:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkBsId:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkBsLatitude:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkBsLongitude:
                        notiData = Marshal.ReadInt32(data);
                        break;

                    case Notification.NetworkVolteStatus:
                        NetworkVolteStatusStruct volteStruct = Marshal.PtrToStructure <NetworkVolteStatusStruct>(data);
                        notiData = NetworkStructConversions.ConvertNetworkVolteStruct(volteStruct);
                        break;

                    case Notification.NetworkEpdgStatus:
                        int epdgStatus = Marshal.ReadInt32(data);
                        if (epdgStatus == 1)
                        {
                            notiData = true;
                        }

                        else if (epdgStatus == 0)
                        {
                            notiData = false;
                        }

                        break;

                    case Notification.SsUssd:
                        SsUssdMsgInfoStruct ussdInfoStruct = Marshal.PtrToStructure <SsUssdMsgInfoStruct>(data);
                        notiData = SsStructConversions.ConvertSsMsgStruct(ussdInfoStruct);
                        break;

                    case Notification.SsReleaseComplete:
                        SsReleaseCompleteMsgStruct msgStruct = Marshal.PtrToStructure <SsReleaseCompleteMsgStruct>(data);
                        notiData = SsStructConversions.ConvertReleaseMsgStruct(msgStruct);
                        break;

                    case Notification.SsNotifyForwarding:
                        SsForwardResponseStruct responseStruct = Marshal.PtrToStructure <SsForwardResponseStruct>(data);
                        notiData = SsStructConversions.ConvertForwardRspStruct(responseStruct);
                        break;

                    case Notification.SsNotifyBarring:
                        SsBarringResponseStruct barringStruct = Marshal.PtrToStructure <SsBarringResponseStruct>(data);
                        notiData = SsStructConversions.ConvertBarringRspStruct(barringStruct);
                        break;

                    case Notification.SsNotifyWaiting:
                        SsWaitingResponseStruct waitingStruct = Marshal.PtrToStructure <SsWaitingResponseStruct>(data);
                        notiData = SsStructConversions.ConvertWaitingRspStruct(waitingStruct);
                        break;

                    case Notification.SsNotifyInfo:
                        SsInfoStruct ssInfoStruct = Marshal.PtrToStructure <SsInfoStruct>(data);
                        notiData = SsStructConversions.ConvertInfoStruct(ssInfoStruct);
                        break;

                    case Notification.SmsIncomingMsg:
                        SmsIncomingMsgNotiStruct smsNotiStruct = Marshal.PtrToStructure <SmsIncomingMsgNotiStruct>(data);
                        notiData = SmsStructConversions.ConvertSmsIncomingStruct(smsNotiStruct);
                        break;

                    case Notification.SmsIncomingCbMsg:
                        SmsIncomingCbMsgNotiStruct smsCbStruct = Marshal.PtrToStructure <SmsIncomingCbMsgNotiStruct>(data);
                        notiData = SmsStructConversions.ConvertSmsIncomingCbStruct(smsCbStruct);
                        break;

                    case Notification.SmsIncomingEtwsMsg:
                        SmsIncomingEtwsMsgNotiStruct etwsStruct = Marshal.PtrToStructure <SmsIncomingEtwsMsgNotiStruct>(data);
                        notiData = SmsStructConversions.ConvertSmsIncomingEtwsStruct(etwsStruct);
                        break;

                    case Notification.SmsMemoryStatus:
                        notiData = (SmsMemoryStatus)Marshal.ReadInt32(data);
                        break;

                    case Notification.SmsReady:
                        notiData = (SmsReadyStatus)Marshal.ReadInt32(data);
                        break;

                    case Notification.OemData:
                        OemDataStruct oemStruct = Marshal.PtrToStructure <OemDataStruct>(data);
                        notiData = OemStructConversions.ConvertOemStruct(oemStruct);
                        break;
                    }

                    _notificationChanged(null, new NotificationChangedEventArgs(noti, notiData));
                }
            };

            _notificationChangedCbList.Add(_notificationChangedCb);

            int ret = Interop.Tapi.RegisterNotiEvent(_handle, TapiUtility.ConvertNotiToString(id), _notificationChangedCb, IntPtr.Zero);

            if (ret != (int)TapiError.Success)
            {
                Log.Error(TapiUtility.LogTag, "Failed to register notification event, Error: " + (TapiError)ret);
                TapiUtility.ThrowTapiException(ret, _handle);
            }
        }