2013-08-07 56 views
1

默认情况下,在ath5k中启用快速帧。 (http://wireless.kernel.org/en/users/Drivers/ath5k) 我发现它禁用它如何在ath5k无线驱动程序中禁用快速帧

#define AR5K_EEPROM_FF_DIS(_v)  (((_v) >> 2) & 0x1 

问题是什么我用它做的宏? 我是否用

替换
#define AR5K_EEPROM_FF_DIS(_v) 1 

我是否编译它传递一些参数?

位移表达式让我困惑。是_v一个变量?

问题是关于如何处理驱动程序中的这些宏更一般。我也在其他代码中看到过它们,并且总是感到困惑。

+1

它不是一个正则表达式,它是一个位移 –

+0

你是对的,这是一个速度错误。 虽然我仍然有困惑。 – adkalkan

+0

我并不是故意粗鲁,但对于刚刚开始学习C的人来说,这似乎是一项相当大胆的任务。从C书开始,通过练习可能会更好。如果你不是真的想学C,但是想要用现有的linux模块破解,你可以试试在linux无线邮件列表上提问。我不确定他们会特别容忍初学者的问题,但你可以随时尝试...... – simonc

回答

0

好吧,我尝试用一​​个简单的例子来解释

#include <stdio.h> 

/* Just for print in binary mode */ 
char *chartobin(unsigned char c) 
{ 
    static char a[9]; 
    int i; 

    for (i = 0; i < 8; i++) 
      a[7 - i] = (c & (1 << i)) == (1 << i) ? '1' : '0'; 
    a[8] = '\0'; 
    return a; 
} 

int main(void) 
{ 
    unsigned char u = 0xf; 

    printf("%s\n", chartobin(u)); 
    u >>= 2; // Shift bits 2 positions (to the right) 
    printf("%s\n", chartobin(u));  
    printf("%s\n", chartobin(u & 0x1)); // Check if the last bit is on 

    return 0; 
} 

输出:

00001111 
00000011 
00000001 

难道我更换#define AR5K_EEPROM_FF_DIS(_v) 1上述行?

Nooooo !!

如果你的0xb代替0xf初始化u你:

00001011 
00000010 
00000000 

正如你可以看到(((_v) >> 2) & 0x1 != 1

0

快速帧未启用或ath5k使用。这是一种功能,允许卡一次发送多个帧(将其视为早期版本的11n frame aggregation),该功能在MadWiFi及其专有驱动程序上实现,并且只能与支持该卡的接入点一起使用。你看到的是在设备的EEPROM中存有一个标志,指示驱动程序是否可以使用快速帧,你引用的宏只是检查是否设置了该标志。您可以修改头文件始终返回1,但这没有任何区别,驱动程序从不使用该信息。

相关问题