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

r8uurelv  于 11个月前  发布在  Linux
关注(0)|答案(1)|浏览(144)

我知道一个无符号的数字永远不会小于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代码设置频率时,硬件会改变,但数字驱动程序的状态不会更新。

nsc4cvqm

nsc4cvqm1#

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 */

相关问题