如何在Linux无线电设备驱动程序中验证无线电频率?

时间:2013-08-26 00:23:03

标签: c linux radio video4linux

我知道无符号数永远不会小于0,也不需要测试它。 但我想避免调谐器的伪频率。

/* freqKHz is in KHz (duh) */   
void videoinput_set_tuner_freq( videoinput_t *vidin, int freqKHz )
{
        unsigned long frequency = freqKHz;

        if( videoinput_has_tuner( vidin ) ) {
            if( frequency < 0 ) {
                /* Ignore bogus frequencies. */
                return;
        }

        frequency *= 16;

        vidin->tunerlow = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 1 : 0;

        if( !vidin->tunerlow ) {
            frequency /= 1000; /* switch to MHz */
        }

        ...
}

是否有可能以另一种方式进行此检查(可能有限制)?

  

想出一个更好的“虚假”频率定义,这个频率不可能存在。

如果数字驱动器自调谐后未发生变化,则不会设置频率。 模拟调谐器驱动器对数字驱动器节省的频率一无所知。 使用video4linux代码设置频率时,硬件会发生变化但是 数字驱动程序的状态不会更新。

1 个答案:

答案 0 :(得分:0)

1正在转换

unsigned long frequency = freqKHz;

执行签名检查

if( freqKHz < 0 ) {  // note: freqKHz
  /* Ignore bogus frequencies. */
  return;

2根据您的申请,随后检查合理的界限也是一种良好做法。当然,最低限度的检查可以与上述结合起来。

if((frequency < MinFreq ) || (( frequency > MaxFreq ) {
  /* Ignore bogus frequencies. */
  return;

3推荐四舍五入转换:

frequency = (frequency + 1000/2) / 1000; /* switch to MHz */