PYIW_KE_PROTOCOL,
PYIW_KE_QUALITY,
PYIW_KE_BITRATE,
- PYIW_KE_AP_MAC
+ PYIW_KE_AP_MAC,
+ PYIW_KE_LEVEL,
+ PYIW_KE_NOISE,
+ PYIW_KE_TXPOWER
} WirelessInterfaceKeyEnum;
typedef struct {
- WirelessInterfaceKeyEnum keys[2];
- PyObject* objs[2];
+ WirelessInterfaceKeyEnum keys[3];
+ PyObject* objs[3];
int num;
} WirelessInterfaceScanData;
"protocol",
"quality",
"bitrate",
- "ap_mac"
+ "ap_mac",
+ "level",
+ "noise",
+ "txpower"
};
int WirelessInterfaceNumKeys(void) {
"- frequency [double]: The GHz freq level.\n"
"- protocol [string]: The name representing A, B, or G WiFi.\n"
"- quality [int ]: Signal quality, 1-100%.\n"
+ "- level [int ]: Signal level (dBm).\n"
+ "- noise [int ]: Noise level (dBm).\n"
+ "- txpower [int ]: Transmit power (dBm).\n"
"- bitrate [int ]: Number of BPS; 1:1 ratio.\n"
"- ap_mac [string]: The address of the current AP.\n\n"
"--- EXAMPLE USAGE --------------------------------------\n\n"
"i", wi->info.bitrate.value
);
+ /* TXPOWER */
+ else if(!strncmp(key, "txpower", 7)) return Py_BuildValue(
+ "i", wi->info.txpower.value
+ );
+
/* QUALITY */
else if(!strncmp(key, "quality", 7)) return Py_BuildValue(
"i", wi->info.stats.qual.qual
);
+ /* LEVEL */
+ else if(!strncmp(key, "level", 5)) return Py_BuildValue(
+ "i", wi->info.stats.qual.level - 0x100
+ );
+
+ /* NOISE */
+ else if(!strncmp(key, "noise", 5)) return Py_BuildValue(
+ "i", wi->info.stats.qual.noise - 0x100
+ );
+
/* AP_MAC */
else if(!strncmp(key, "ap_mac", 6)) {
/* iw_pr_ether(buf, wi->info.ap_addr.sa_data); */
return 0;
}
+ case SIOCGIWTXPOW: {
+ data->keys[0] = PYIW_KE_TXPOWER;
+ data->objs[0] = Py_BuildValue("i", event->u.txpower.value);
+ data->num = 1;
+
+ return 0;
+ }
+
case IWEVQUAL: {
data->keys[0] = PYIW_KE_QUALITY;
+ data->keys[1] = PYIW_KE_LEVEL;
+ data->keys[2] = PYIW_KE_NOISE;
data->objs[0] = Py_BuildValue("i", event->u.qual.qual);
- data->num = 1;
+ data->objs[1] = Py_BuildValue("i", event->u.qual.level - 0x100);
+ data->objs[2] = Py_BuildValue("i", event->u.qual.noise - 0x100);
+ data->num = 3;
return 0;
}