Scan operation with Frontend Service

This page shows how to operate dvb scanner with Frontend Service.

var dvbChannelList = new Array();
var channelInfoSequence = new Array();
var scanSettings = null;
var scanObj = null;
var channelserviceObj;
var queryConditions = new Array();
var requestedProperties = new Array();

ScanSettings = function (toiDvbcScanner)
{
  this.dvbCScanner = toiDvbcScanner;

  this.initialize = function ()
  {
    this.MODULATION_ANY = this.dvbCScanner.MODULATION_ANY;
    this.MODULATION_16_QAM = this.dvbCScanner.MODULATION_16_QAM;
    this.MODULATION_32_QAM = this.dvbCScanner.MODULATION_32_QAM;
    this.MODULATION_64_QAM = this.dvbCScanner.MODULATION_64_QAM;
    this.MODULATION_128_QAM = this.dvbCScanner.MODULATION_128_QAM;
    this.MODULATION_256_QAM = this.dvbCScanner.MODULATION_256_QAM;

    this.STORE_MODE_OVERWRITE = this.dvbCScanner.STORE_MODE_OVERWRITE;
    this.STORE_MODE_UPDATE = this.dvbCScanner.STORE_MODE_UPDATE;
  };

  this.getUpdatedValues = function ()
  {
    // Frequency scan settings
    this.startFrequency = startFrequencyInput.getValue() - 0;
    this.endFrequency = endFrequencyInput.getValue() - 0;
    this.step = stepInput.getValue() - 0;

    // Nit scan settings
    this.networkId = networkIdInput.getValue() - 0;
    this.nitFrequency = nitFrequencyInput.getValue() - 0;

    // Common scan settings
    this.symbolRate = symbolRateInput.getValue() - 0;
  };

  // Common scan settings for option list
  this.getModulation = function ()
  {
    var result;
    var selectedOption = modulationOptionList.getSelectedText();
    switch (selectedOption) {
      case "ANY":
        result = this.MODULATION_ANY;
        break;
      case "16_QAM":
        result = this.MODULATION_16_QAM;
        break;
      case "32_QAM":
        result = this.MODULATION_32_QAM;
        break;
      case "64_QAM":
        result = this.MODULATION_64_QAM;
        break;
      case "128_QAM":
        result = this.MODULATION_128_QAM;
        break;
      case "256_QAM":
        result = this.MODULATION_256_QAM;
        break;
  }
}


  this.getStoreMode = function ()
  {
    var result;
    var selectedOption = storeModeOptionList.getSelectedText();
    DumpLog("selectedOption = " + selectedOption);
    switch (selectedOption) {
      case "OVERWRITE":
        result = this.STORE_MODE_OVERWRITE;
        break;
      case "UPDATE":
        result = this.STORE_MODE_UPDATE;
        break;
      default:
        throw "Exception: unsupported store mode: " + selectedOption;
    }
    return result;
  };

  this.saveSettings = function ()
  {
    this.getUpdatedValues();
    var settings = "startFrequency=" + this.startFrequency + "," +
           "endFrequency=" + this.endFrequency + "," +
           "step=" + this.step + "," +
           "networkId=" + this.networkId + "," +
           "nitFrequency=" + this.nitFrequency + "," +
           "modulation=" + this.getModulation() + "," +
           "symbolRate=" + this.symbolRate + "," +
           "storeMode=" + this.getStoreMode();
    toi.informationService.setObject("dvbCPortalSettings",
       settings, toi.informationService.STORAGE_PERMANENT);
  };
}

// DVB scanner object
DvbScanner = function ()
{
  var opId;
  var frontendService = toi.frontendService;
  this.FrontendId = frontendService.FRONTEND_ID_ANY_FREE;

  try {
     this.dvbCScanner = frontendService.createDvbCScanner(this.FrontendId);
     scanSettings = new ScanSettings(this.dvbCScanner);
     scanSettings.initialize();
     DumpLog("create dvbc scanner succeeded");
  }
  catch (e) {
     DumpLog("create scanner Caught exception:" + e);
  }
  try {
    this.operationManager = toi.frontendService.getOperationManager();
  }
  catch (e) {
     DumpLog("get operation manager for frontend service:" + e);
  }

  // Release the dvb scanner
  this.releaseInstance = function ()
  {
    this.releaseOperation();

    try {
      this.operationManager.removeEventListener(
           this.operationManager.ON_OPERATION_RESULT, this.onOperationResult);
    }
    catch (e) {
      DumpLog("DvbScanner removeEventListener error:" + e);
    }

    try {
      this.dvbCScanner.releaseInstance();
    }
    catch (e) {
      DumpLog("ReleaseInstance: " + e);
    }
  };

  this.releaseOperation = function ()
  {
    try {
      isScanning = false;
      if (opId != null) {
        this.operationManager.releaseOperation(opId);
        opId = null;
      }
    }
    catch (e) {
     DumpLog("release operationManager: " + e);
    }
  };

  this.prepareFrequencyScan = function ()
  {
    try {
      // Make sure do frequency scan only
      this.clear();
      scanSettings.getUpdatedValues();
      var frontendParameters =
             toi.statics.ToiDvbCScannerDvbCFrontendParameters.create
                (scanSettings.getModulation(), scanSettings.symbolRate);
      DumpLog("startFrequency: " + (scanSettings.startFrequency) +
             ", endFrequency: " + (scanSettings.endFrequency) +
             ", step: " + (scanSettings.step) +
             ", modulation: " + (scanSettings.getModulation()) +
             ", symbolRate: " + (scanSettings.symbolRate));
      this.dvbCScanner.addFrequencyScanParameters(
                          frontendParameters,
                          scanSettings.startFrequency,
                          scanSettings.endFrequency,
                          scanSettings.step
                       );
    }
    catch (e) {
      throw ("prepareFrequencyScan: " + e);
    }
  };

  this.prepareNitScan = function ()
  {
    try {
      // Make sure do NIT scan only
      this.clear();
      scanSettings.getUpdatedValues();
      var frontendParameters =
             toi.statics.ToiDvbCScannerDvbCFrontendParameters.create
                (scanSettings.getModulation(), scanSettings.symbolRate);
      DumpLog(
             "nitFrequency: " + (scanSettings.nitFrequency) +
             ", networkId: " + (scanSettings.networkId)
             );
      this.dvbCScanner.addNitScanParametersByNetworkId(
                      frontendParameters,
                      scanSettings.nitFrequency,
                      scanSettings.networkId);
    }
    catch (e) {
      throw ("prepareNitScan: " + e);
    }
  };

  this.startScan = function ()
  {
    try {
      if (opId == null) {
        opId = this.operationManager.createOperation("startScan");
      }
      scanProgress = 0;
      DumpLog("start the dvb scan");
      this.dvbCScanner.startScan(opId, scanSettings.getStoreMode());
    }
    catch (e) {
      DumpLog("startScan error: " + e);
    }
  };

  this.stopScan = function ()
  {
    try {
      DumpLog ("abort the scan");
      if (opId != null) {
        this.operationManager.cancelOperation(opId);
        opId = null;
      }
      scanProgress = 0;
    }
    catch (e) {
      DumpLog("Abort scanner error: " + e);
    }
  };

  this.onOperationResult = function (event)
  {
    if (event.operation.userData == "startScan") {
      scanProgress = event.operation.progress;
      DumpLog("onOperationResult Called");
      for (var i in event.operation.properties) {
        if (event.operation.properties[i].id == 1) {
          DumpLog("onProgress(): the total found services is "
          + event.operation.properties[i].value
          + " (State: "
          + event.operation.state
          + ", Progress: "
          + event.operation.progress
          + ")");
        }
      }
      if (parseInt(event.operation.progress) == 100) {
        scanObj.releaseInstance();
        scanProgress = 0;
      }
    }
  };

  this.operationManager.addEventListener(
     this.operationManager.ON_OPERATION_RESULT,this.onOperationResult);

  this.clear = function ()
  {
    try {
      this.dvbCScanner.clear();
    }
    catch (e) {
      DumpLog("clear() Caught exception:" +e);
    }
  };
}
// End of DVB scanner object



function frequencyScan()
{
  if (!isScanning) {
    VideoPlayer.close();

    try {
      scanObj = new DvbScanner();
      isScanning = true;
    }
    catch (e) {
      DumpLog("createScanner: " + e);
    }

    scanObj.prepareFrequencyScan();
    scanObj.startScan();
  }
  else {
    abort();
  }
}

function nitScan()
{
  if (!isScanning) {
    VideoPlayer.close();

    try {
      scanObj = new DvbScanner();
      isScanning = true;
    }
    catch (e) {
      DumpLog("createScanner: " + e);
    }

    scanObj.prepareNitScan();
    scanObj.startScan();
  }
  else {
    abort();
  }
}

function abort()
{
  if (scanObj != null) {
    scanObj.stopScan();
    scanObj.releaseInstance();
  }
}


function getFrontends()
{
  var frontends = new Array();
  frontends= toi.frontendService.getFrontends();
  var frontendsValue = "";
  for (var i in frontends) {
    frontendsValue += i;
    frontendsValue += "  ";
  }
  frontendListResult.setText(frontendsValue);
}

function getFrontendInfo()
{
  var id = frontendIdInput.getValue();
  try {
    var frontendInfo = toi.frontendService.getFrontendInfo(id);
    showFrontendInfo(frontendInfo);
  }
  catch (e) {
    DumpLog("getFrontendInfo exception:" + e);
    cleanFrontendInfo();
  }
}

function getFrontendInfoBySession()
{
  var id = frontendIdSessionIdInput.getValue();
  try {
    var frontendInfo = toi.frontendService.getFrontendInfoBySession(id);
    showFrontendInfo(frontendInfo);
  }
  catch (e) {
    DumpLog("getFrontendInfoBySession Caught exception:" + e);
    cleanFrontendInfo();
  }
}

function showFrontendInfo(frontendInfo)
{
  var SessionId = frontendInfo.sessionId;
  var IsLocked = frontendInfo.isLocked;
  var SignalNoiseRatio = frontendInfo.signalNoiseRatio;
  var BitErrorRate = frontendInfo.bitErrorRate;
  var UncorrectedBlocks = frontendInfo.uncorrectedBlocks;
  var RFLevel = frontendInfo.rFLevel;
  var CentreFrequency = frontendInfo.centreFrequency;

  var ExtendedProperties = frontendInfo.extendedProperties;
  var ChannelId = getPropertyValue(ExtendedProperties,
    toi.consts.ToiFrontendService.PROPERTY_DERIVED_CHANNEL_ID);
  var SSI = getPropertyValue(ExtendedProperties,
    toi.consts.ToiFrontendService.PROPERTY_SIGNAL_STRENGTH_INDICATOR);
  var Quality = getPropertyValue(ExtendedProperties,
    toi.consts.ToiFrontendService.PROPERTY_SIGNAL_QUALITY_INDICATOR);
}