Exemplo n.º 1
0
        public async Task FinishTune()
        {
            await Task.Run(() =>
            {
                try
                {
                    TunedChannels.Clear();

                    _actualTuningDVBTType = -1;
                    _actualTunningChannel = -1;

                    State = TuneState.Ready;
                }
                catch (Exception ex)
                {
                    _loggingService.Error(ex);
                }
                finally
                {
                    OnPropertyChanged(nameof(TuningLabel));
                    OnPropertyChanged(nameof(AutomaticTuningProgress));
                    OnPropertyChanged(nameof(TuningFinished));
                    OnPropertyChanged(nameof(TunedChannels));
                    OnPropertyChanged(nameof(AddChannelsVisible));
                }
            });
        }
Exemplo n.º 2
0
        private async Task Tune(long freq, long bandWidth, int dvbtTypeIndex)
        {
            try
            {
//#if DEBUG
//                await Task.Delay(1000);

//                var channel = new DVBTChannel();
//                channel.PIDs = "0,16,17";
//                channel.ProgramMapPID = 5000;
//                channel.Name = "Channel name";
//                channel.ProviderName = "Multiplex";
//                channel.Frequency = freq;
//                channel.Bandwdith = bandWidth;
//                channel.Number = String.Empty;
//                channel.DVBTType = dvbtTypeIndex;
//                channel.Type = ServiceTypeEnum.DigitalTelevisionService;

//                TunedChannels.Add(channel);

//                Device.BeginInvokeOnMainThread(() =>
//                {
//                    SelectedChannel = channel;
//                });
//#endif


                var tuneResult = await _driver.TuneEnhanced(freq, bandWidth, dvbtTypeIndex);

                switch (tuneResult.Result)
                {
                case SearchProgramResultEnum.Error:
                    _loggingService.Debug("Search error");

                    SignalStrengthProgress = 0;
                    return;

                case SearchProgramResultEnum.NoSignal:
                    _loggingService.Debug("No signal");

                    SignalStrengthProgress = 0;
                    return;

                case SearchProgramResultEnum.OK:

                    SignalStrengthProgress = tuneResult.SignalPercentStrength / 100.0;
                    break;
                }

                var searchMapPIDsResult = await _driver.SearchProgramMapPIDs(false);

                switch (searchMapPIDsResult.Result)
                {
                case SearchProgramResultEnum.Error:
                    _loggingService.Debug("Search error");

                    return;

                case SearchProgramResultEnum.NoSignal:
                    _loggingService.Debug("No signal");

                    return;

                case SearchProgramResultEnum.NoProgramFound:
                    _loggingService.Debug("No program found");

                    return;
                }

                var mapPIDs = new List <long>();
                var mapPIDToServiceDescriptor = new Dictionary <long, ServiceDescriptor>();

                foreach (var sd in searchMapPIDsResult.ServiceDescriptors)
                {
                    mapPIDs.Add(sd.Value);
                    mapPIDToServiceDescriptor.Add(sd.Value, sd.Key);
                }
                _loggingService.Debug($"Program MAP PIDs found: {String.Join(",", mapPIDs)}");


                if (TuningAborted)
                {
                    _loggingService.Debug($"Tuning aborted");
                    return;
                }

                // searching PIDs

                var searchProgramPIDsResult = await _driver.SearchProgramPIDs(mapPIDs);

                switch (searchProgramPIDsResult.Result)
                {
                case SearchProgramResultEnum.Error:
                    _loggingService.Debug($"Error scanning Map PIDs");
                    break;

                case SearchProgramResultEnum.NoSignal:
                    _loggingService.Debug("No signal");
                    break;

                case SearchProgramResultEnum.NoProgramFound:
                    _loggingService.Debug("No program found");
                    break;

                case SearchProgramResultEnum.OK:

                    var totalChannelsAddedCount = 0;

                    foreach (var kvp in searchProgramPIDsResult.PIDs)
                    {
                        var pids        = string.Join(",", kvp.Value);
                        var sDescriptor = mapPIDToServiceDescriptor[kvp.Key];

                        var ch = new DVBTChannel();
                        ch.PIDs          = pids;
                        ch.ProgramMapPID = kvp.Key;
                        ch.Name          = sDescriptor.ServiceName;
                        ch.ProviderName  = sDescriptor.ProviderName;
                        ch.Frequency     = freq;
                        ch.Bandwdith     = bandWidth;
                        ch.Number        = String.Empty;
                        ch.DVBTType      = dvbtTypeIndex;
                        ch.Type          = (ServiceTypeEnum)sDescriptor.ServisType;

                        TunedChannels.Add(ch);

                        Device.BeginInvokeOnMainThread(() =>
                        {
                            SelectedChannel = ch;
                        });

                        _loggingService.Debug($"Found channel \"{sDescriptor.ServiceName}\"");

                        // automatically adding new tuned channel if does not exist
                        if (!ConfigViewModel.ChannelExists(_channels, ch.Frequency, ch.ProgramMapPID))
                        {
                            ch.Number = ConfigViewModel.GetNextChannelNumber(_channels).ToString();

                            _channels.Add(ch);

                            await _channelService.SaveChannels(_channels);

                            totalChannelsAddedCount++;
                        }
                    }

                    if (totalChannelsAddedCount > 0)
                    {
                        if (totalChannelsAddedCount > 1)
                        {
                            MessagingCenter.Send($"{totalChannelsAddedCount} channels saved", BaseViewModel.MSG_ToastMessage);
                        }
                        else
                        {
                            MessagingCenter.Send($"Channel saved", BaseViewModel.MSG_ToastMessage);
                        }
                    }

                    break;
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Exemplo n.º 3
0
        private async Task Tune()
        {
            _loggingService.Info($"Tuning");

            State = TuneState.TuningInProgress;

            TunedChannels.Clear();


            _channels = await _channelService.LoadChannels();

            if (_channels == null)
            {
                _channels = new ObservableCollection <DVBTChannel>();
            }

            OnPropertyChanged(nameof(TuningLabel));
            OnPropertyChanged(nameof(AutomaticTuningProgress));

            TuningAborted = false;

            try
            {
                if (ManualTuning)
                {
                    long freq      = Convert.ToInt64(TuneFrequency) * 1000000;
                    long bandWidth = TuneBandwidth * 1000000;

                    var ch = Convert.ToInt32((Convert.ToInt64(TuneFrequency) - 474 + 8 * 21) / 8);

                    _actualTunningChannel = ch;
                    _actualTuningDVBTType = 0;

                    OnPropertyChanged(nameof(TuningLabel));

                    if (DVBTTuning)
                    {
                        await Tune(freq, bandWidth, 0);
                    }

                    _actualTuningDVBTType = 1;
                    OnPropertyChanged(nameof(TuningLabel));

                    if (DVBT2Tuning)
                    {
                        await Tune(freq, bandWidth, 1);
                    }
                }
                else
                {
                    await AutomaticTune();
                }

                State = TuneState.TuneFinishedOK;
            }
            catch (Exception ex)
            {
                State = TuneState.TuneFailed;
            }
            finally
            {
                OnPropertyChanged(nameof(TuningFinished));
                OnPropertyChanged(nameof(TunedChannels));
                OnPropertyChanged(nameof(AddChannelsVisible));

                OnPropertyChanged(nameof(TuningLabel));
                OnPropertyChanged(nameof(AutomaticTuningProgress));
            }
        }