|
6 | 6 |
|
7 | 7 | #include "basic_types.h" |
8 | 8 | #include "rtl8812a_recv.h" |
| 9 | + |
| 10 | +#include <string.h> |
9 | 11 | #include <vector> |
10 | 12 |
|
| 13 | +struct _phy_status_rpt_8812 { |
| 14 | + /* DWORD 0*/ |
| 15 | + u8 gain_trsw[2]; /*path-A and path-B {TRSW, gain[6:0] }*/ |
| 16 | + u8 chl_num_LSB; /*channel number[7:0]*/ |
| 17 | + u8 chl_num_MSB : 2; /*channel number[9:8]*/ |
| 18 | + u8 sub_chnl : 4; /*sub-channel location[3:0]*/ |
| 19 | + u8 r_RFMOD : 2; /*RF mode[1:0]*/ |
| 20 | + |
| 21 | + /* DWORD 1*/ |
| 22 | + u8 pwdb_all; /*CCK signal quality / OFDM pwdb all*/ |
| 23 | + s8 cfosho[2]; /*DW1 byte 1 DW1 byte2 CCK AGC report and CCK_BB_Power / |
| 24 | + OFDM path-A and path-B short CFO*/ |
| 25 | + /*this should be checked again because the definition of 8812 and 8814 |
| 26 | + * is different*/ |
| 27 | + /* u8 r_cck_rx_enable_pathc:2; cck rx enable pathc[1:0]*/ |
| 28 | + /* u8 cck_rx_path:4; cck rx path[3:0]*/ |
| 29 | + u8 resvd_0 : 6; |
| 30 | + u8 bt_RF_ch_MSB : 2; /*8812A:2'b0 8814A: bt rf channel keep[7:6]*/ |
| 31 | + u8 ant_div_sw_a : 1; /*8812A: ant_div_sw_a 8814A: 1'b0*/ |
| 32 | + u8 ant_div_sw_b : 1; /*8812A: ant_div_sw_b 8814A: 1'b0*/ |
| 33 | + u8 bt_RF_ch_LSB : 6; /*8812A: 6'b0 8814A: bt rf |
| 34 | + channel keep[5:0]*/ |
| 35 | + s8 cfotail[2]; /*DW2 byte 1 DW2 byte 2 path-A and path-B CFO tail*/ |
| 36 | + u8 PCTS_MSK_RPT_0; /*PCTS mask report[7:0]*/ |
| 37 | + u8 PCTS_MSK_RPT_1; /*PCTS mask report[15:8]*/ |
| 38 | + |
| 39 | + /* DWORD 3*/ |
| 40 | + s8 rxevm[2]; /*DW3 byte 1 DW3 byte 2 stream 1 and stream 2 RX EVM*/ |
| 41 | + s8 rxsnr[2]; /*DW3 byte 3 DW4 byte 0 path-A and path-B RX SNR*/ |
| 42 | + |
| 43 | + /* DWORD 4*/ |
| 44 | + u8 PCTS_MSK_RPT_2; /*PCTS mask report[23:16]*/ |
| 45 | + u8 PCTS_MSK_RPT_3 : 6; /*PCTS mask report[29:24]*/ |
| 46 | + u8 pcts_rpt_valid : 1; /*pcts_rpt_valid*/ |
| 47 | + u8 resvd_1 : 1; /*1'b0*/ |
| 48 | + s8 rxevm_cd[2]; /*DW 4 byte 3 DW5 byte 0 8812A: 16'b0 8814A: stream 3 |
| 49 | + and stream 4 RX EVM*/ |
| 50 | + |
| 51 | + /* DWORD 5*/ |
| 52 | + u8 csi_current[2]; /*DW5 byte 1 DW5 byte 2 8812A: stream 1 and 2 CSI |
| 53 | + 8814A: path-C and path-D RX SNR*/ |
| 54 | + u8 gain_trsw_cd[2]; /*DW5 byte 3 DW6 byte 0 path-C and path-D {TRSW, |
| 55 | + gain[6:0] }*/ |
| 56 | + |
| 57 | + /* DWORD 6*/ |
| 58 | + s8 sigevm; /*signal field EVM*/ |
| 59 | + u8 antidx_antc : 3; /*8812A: 3'b0 8814A: antidx_antc[2:0]*/ |
| 60 | + u8 antidx_antd : 3; /*8812A: 3'b0 8814A: antidx_antd[2:0]*/ |
| 61 | + u8 dpdt_ctrl_keep : 1; /*8812A: 1'b0 8814A: dpdt_ctrl_keep*/ |
| 62 | + u8 GNT_BT_keep : 1; /*8812A: 1'b0 8814A: GNT_BT_keep*/ |
| 63 | + u8 antidx_anta : 3; /*antidx_anta[2:0]*/ |
| 64 | + u8 antidx_antb : 3; /*antidx_antb[2:0]*/ |
| 65 | + u8 hw_antsw_occur : 2; /*1'b0*/ |
| 66 | +}; |
| 67 | + |
11 | 68 | FrameParser::FrameParser(Logger_t logger) : _logger{logger} {} |
12 | 69 |
|
13 | 70 | static rx_pkt_attrib rtl8812_query_rx_desc_status(uint8_t *pdesc) { |
@@ -119,8 +176,12 @@ std::vector<Packet> FrameParser::recvbuf2recvframe(std::span<uint8_t> ptr) { |
119 | 176 | pattrib.drvinfo_sz + RXDESC_SIZE, |
120 | 177 | pattrib.pkt_len)}); |
121 | 178 |
|
122 | | - ret.back().RxAtrib.rssi[0] = pbuf[RXDESC_SIZE]; |
123 | | - ret.back().RxAtrib.rssi[1] = pbuf[RXDESC_SIZE + 1]; |
| 179 | + struct _phy_status_rpt_8812 driver_data; |
| 180 | + memcpy(static_cast<void*>(&driver_data), pbuf.data() + RXDESC_SIZE, sizeof(driver_data)); |
| 181 | + ret.back().RxAtrib.rssi[0] = driver_data.gain_trsw[0]; |
| 182 | + ret.back().RxAtrib.rssi[1] = driver_data.gain_trsw[1]; |
| 183 | + ret.back().RxAtrib.snr[0] = driver_data.rxsnr[0]; |
| 184 | + ret.back().RxAtrib.snr[1] = driver_data.rxsnr[1]; |
124 | 185 | } else { |
125 | 186 | /* pkt_rpt_type == TX_REPORT1-CCX, TX_REPORT2-TX RTP,HIS_REPORT-USB HISR |
126 | 187 | * RTP */ |
|
0 commit comments