From 621f9a4ff96faa8e727d294b3f2a61d05fd06cdb Mon Sep 17 00:00:00 2001 From: Sergei Makarenkov Date: Sun, 18 Dec 2016 17:17:29 +0300 Subject: [PATCH] Place signal quality and per antenna rssi into radiotap header --- core/rtw_recv.c | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/core/rtw_recv.c b/core/rtw_recv.c index 0b7a283..635bc61 100644 --- a/core/rtw_recv.c +++ b/core/rtw_recv.c @@ -4000,11 +4000,33 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe, u8 hdr_buf[64] = {0}; u16 rt_len = 8; + u32 tmp_32bit; + int i; /* create header */ rtap_hdr = (struct ieee80211_radiotap_header *)&hdr_buf[0]; rtap_hdr->it_version = PKTHDR_RADIOTAP_VERSION; + if(pHalData->NumTotalRFPath>0) { + rtap_hdr->it_present |= (1<NumTotalRFPath>1) { + tmp_32bit = (1<NumTotalRFPath-1; i++) { + memcpy(&hdr_buf[rt_len], &tmp_32bit, 4); + rt_len += 4; + } + } + tmp_32bit = (1<tsfl) { u64 tmp_64bit; @@ -4097,18 +4119,22 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe, rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE); hdr_buf[rt_len] = 0; rt_len += 1; - - /* Signal Quality */ - rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_LOCK_QUALITY); - hdr_buf[rt_len] = pattrib->phy_info.SignalQuality; - rt_len += 1; #endif + rt_len++; // alignment + /* Signal Quality */ + rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_LOCK_QUALITY); + tmp_16bit = cpu_to_le16(pattrib->phy_info.SignalQuality); + memcpy(&hdr_buf[rt_len], &tmp_16bit, 2); + rt_len += 2; +#if 0 /* Antenna */ rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_ANTENNA); - hdr_buf[rt_len] = 0; /* pHalData->rf_type; */ + hdr_buf[rt_len] = pHalData->rf_type; rt_len += 1; + rt_len++; // alignment +#endif /* RX flags */ rtap_hdr->it_present |= (1 << IEEE80211_RADIOTAP_RX_FLAGS); #if 0 @@ -4214,6 +4240,13 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe, rt_len += 2; } + for(i=0; iNumTotalRFPath; i++) { + hdr_buf[rt_len] = pattrib->phy_info.RxPwr[i]; + rt_len ++; + hdr_buf[rt_len] = i; + rt_len ++; + } + /* push to skb */ pskb = (_pkt *)buf; if (skb_headroom(pskb) < rt_len) {