/// <summary>
        /// Sends the diseq command.
        /// </summary>
        /// <param name="channel">The channel.</param>
        /// <param name="parameters">The channels scanning parameters.</param>
        public void SendDiseqCommand(ScanParameters parameters, DVBSChannel channel)
        {
            if (_isGenPix == false)
            {
                return;
            }
            Log.Log.Debug("SendDiseqc: {0},{1}", parameters.ToString(), channel.ToString());

            //bit 0	(1)	: 0=low band, 1 = hi band
            //bit 1 (2) : 0=vertical, 1 = horizontal
            //bit 3 (4) : 0=satellite position A, 1=satellite position B
            //bit 4 (8) : 0=switch option A, 1=switch option  B
            // LNB    option  position
            // 1        A         A
            // 2        A         B
            // 3        B         A
            // 4        B         B
            int  antennaNr    = BandTypeConverter.GetAntennaNr(channel);
            bool hiBand       = BandTypeConverter.IsHiBand(channel, parameters);
            bool isHorizontal = ((channel.Polarisation == Polarisation.LinearH) ||
                                 (channel.Polarisation == Polarisation.CircularL));
            byte cmd = 0xf0;

            cmd |= (byte)(hiBand ? 1 : 0);
            cmd |= (byte)((isHorizontal) ? 2 : 0);
            cmd |= (byte)((antennaNr - 1) << 2);

            DISEQC_COMMAND DiseqcCommand = new DISEQC_COMMAND();

            DiseqcCommand.ucMessage[0]    = 0xE0; //framing byte
            DiseqcCommand.ucMessage[1]    = 0x10; //address byte
            DiseqcCommand.ucMessage[2]    = 0x38; //command byte
            DiseqcCommand.ucMessage[3]    = cmd;  //data byte (port group 0)
            DiseqcCommand.ucMessage[4]    = 0;    //Need not fill this up
            DiseqcCommand.ucMessage[5]    = 0;    //Need not fill this up
            DiseqcCommand.ucMessageLength = 4;    //Number of Valid bytes in the Command.

            Marshal.StructureToPtr(DiseqcCommand, _ptrDiseqc, false);
            //get the length of the structure command - usually 7 bytes.
            int len = Marshal.SizeOf(DiseqcCommand);

            string txt = "";

            for (int i = 0; i < len; ++i)
            {
                txt += String.Format("0x{0:X} ", Marshal.ReadByte(_ptrDiseqc, i));
            }
            Log.Log.Debug("GenPix: SendDiseqCommand: {0} with length {1}", txt, len);
            //set the DisEqC command to the tuner pin
            int hr = _propertySet.Set(BdaTunerExtentionProperties, (int)BdaTunerExtension.KSPROPERTY_BDA_DISEQC,
                                      _ptrTempInstance, 32, _ptrDiseqc, len);

            if (hr != 0)
            {
                Log.Log.Info("GenPix: SendDiseqCommand returned: 0x{0:X} - {1}{2}", hr, HResult.GetDXErrorString(hr),
                             DsError.GetErrorText(hr));
            }
        }
Example #2
0
    /// <summary>
    /// Sends the diseq command.
    /// </summary>
    /// <param name="channel">The channel.</param>
    /// <param name="parameters">The channels scanning parameters.</param>
    public void SendDiseqCommand(ScanParameters parameters, DVBSChannel channel)
    {
      if (_isGenPix == false)
        return;
      Log.Log.Debug("SendDiseqc: {0},{1}", parameters.ToString(), channel.ToString());

      //bit 0	(1)	: 0=low band, 1 = hi band
      //bit 1 (2) : 0=vertical, 1 = horizontal
      //bit 3 (4) : 0=satellite position A, 1=satellite position B
      //bit 4 (8) : 0=switch option A, 1=switch option  B
      // LNB    option  position
      // 1        A         A
      // 2        A         B
      // 3        B         A
      // 4        B         B
      int antennaNr = BandTypeConverter.GetAntennaNr(channel);
      bool hiBand = BandTypeConverter.IsHiBand(channel, parameters);
      bool isHorizontal = ((channel.Polarisation == Polarisation.LinearH) ||
                           (channel.Polarisation == Polarisation.CircularL));
      byte cmd = 0xf0;
      cmd |= (byte)(hiBand ? 1 : 0);
      cmd |= (byte)((isHorizontal) ? 2 : 0);
      cmd |= (byte)((antennaNr - 1) << 2);

      DISEQC_COMMAND DiseqcCommand = new DISEQC_COMMAND();
      DiseqcCommand.ucMessage[0] = 0xE0; //framing byte
      DiseqcCommand.ucMessage[1] = 0x10; //address byte
      DiseqcCommand.ucMessage[2] = 0x38; //command byte
      DiseqcCommand.ucMessage[3] = cmd; //data byte (port group 0)
      DiseqcCommand.ucMessage[4] = 0; //Need not fill this up
      DiseqcCommand.ucMessage[5] = 0; //Need not fill this up
      DiseqcCommand.ucMessageLength = 4; //Number of Valid bytes in the Command.

      Marshal.StructureToPtr(DiseqcCommand, _ptrDiseqc, false);
      //get the length of the structure command - usually 7 bytes.
      int len = Marshal.SizeOf(DiseqcCommand);

      string txt = "";
      for (int i = 0; i < len; ++i)
        txt += String.Format("0x{0:X} ", Marshal.ReadByte(_ptrDiseqc, i));
      Log.Log.Debug("GenPix: SendDiseqCommand: {0} with length {1}", txt, len);
      //set the DisEqC command to the tuner pin
      int hr = _propertySet.Set(BdaTunerExtentionProperties, (int)BdaTunerExtension.KSPROPERTY_BDA_DISEQC,
                                _ptrTempInstance, 32, _ptrDiseqc, len);
      if (hr != 0)
      {
        Log.Log.Info("GenPix: SendDiseqCommand returned: 0x{0:X} - {1}{2}", hr, HResult.GetDXErrorString(hr),
                     DsError.GetErrorText(hr));
      }
    }