xref: /openwifi/README.md (revision 94c4a85fc6fc1e25c6529319d15fce23c5999bed)
10df4ca4dSimoerman# openwifi
22ee67178SXianjun Jiao<img src="./openwifi-arch.jpg" width="900">
32ee67178SXianjun Jiao
438f76c01SJiao Xianjun**openwifi:** Linux mac80211 compatible full-stack IEEE802.11/Wi-Fi design based on SDR (Software Defined Radio).
52ee67178SXianjun Jiao
6525f977bSJiao XianjunThis repository includes Linux driver and software. [openwifi-hw](https://github.com/open-sdr/openwifi-hw) repository has the FPGA design.
7525f977bSJiao Xianjun
8525f977bSJiao Xianjun[[Project document](doc)], [[Quick start](#Quick-start)], [[Application notes](doc/app_notes)]
92ee67178SXianjun Jiao
1091e80ec1SJiao Xianjun[[Videos](#Videos)] [[Papers](#Papers)] [openwifi [maillist](https://lists.ugent.be/wws/subscribe/openwifi)] [[Cite openwifi project](#Cite-openwifi-project)]
112ee67178SXianjun Jiao
122c8fb6e0SJiao XianjunOpenwifi code has dual licenses. AGPLv3 is the opensource license. For non-opensource license, please contact [email protected]. Openwifi project also leverages some 3rd party modules. It is user's duty to check and follow licenses of those modules according to the purpose/usage. You can find [an example explanation from Analog Devices](https://github.com/analogdevicesinc/hdl/blob/master/LICENSE) for this compound license conditions. [[How to contribute]](https://github.com/open-sdr/openwifi/blob/master/CONTRIBUTING.md).
132ee67178SXianjun Jiao
142ee67178SXianjun Jiao**Features:**
152ee67178SXianjun Jiao
16*94c4a85fSJiao Xianjun- 802.11a/g/n [[IEEE 802.11n (Wi-Fi 4)](doc/app_notes/ieee80211n.md)]
17b73660adSXianjun Jiao- 20MHz bandwidth; 70 MHz to 6 GHz frequency range
18b73660adSXianjun Jiao- Mode tested: Ad-hoc; Station; AP, Monitor
19b73660adSXianjun Jiao- DCF (CSMA/CA) low MAC layer in FPGA (10us SIFS is achieved)
20b73660adSXianjun Jiao- Configurable channel access priority parameters:
21b73660adSXianjun Jiao  - duration of RTS/CTS, CTS-to-self
22b73660adSXianjun Jiao  - SIFS/DIFS/xIFS/slot-time/CW/etc
23b73660adSXianjun Jiao- Time slicing based on MAC address
24b73660adSXianjun Jiao- Easy to change bandwidth and frequency:
25b73660adSXianjun Jiao  - 2MHz for 802.11ah in sub-GHz
26b73660adSXianjun Jiao  - 10MHz for 802.11p/vehicle in 5.9GHz
27f71252c5SXianjun Jiao- CSI (Channel State Information, freq offset, equalizer to computer) [[CSI notes](doc/app_notes/csi.md)]
285deb8d18SXianjun Jiao- IQ capture (real-time AGC, RSSI, IQ sample to computer) [[IQ notes](doc/app_notes/iq.md)][[IQ notes for dual antenna](doc/app_notes/iq_2ant.md)]
29b73660adSXianjun Jiao- On roadmap: **802.11ax**
302ee67178SXianjun Jiao
31b73660adSXianjun Jiao**Performance (AP: openwifi at channel 44, client: TL-WDN4200 N900 USB Dongle):**
32b73660adSXianjun Jiao- AP --> client: 30.6Mbps(TCP), 38.8Mbps(UDP)
33b73660adSXianjun Jiao- client --> AP: 17.0Mbps(TCP), 21.5Mbps(UDP)
342ee67178SXianjun Jiao
35b73660adSXianjun Jiao**Supported SDR platforms:** (Check [Porting guide](#Porting-guide) for your new board if it isn't in the list)
362ee67178SXianjun Jiao
37e9c84001SJiao Xianjunboard_name|board combination|status|SD card img
386e8c8cf8SJiao Xianjun-------|-------|----|----
3996b0c790SJiao Xianjunzc706_fmcs2|Xilinx ZC706 dev board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.1.0-taiyuan-6-32bit.img.xz)
4096b0c790SJiao Xianjunzed_fmcs2|Xilinx zed board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.1.0-taiyuan-6-32bit.img.xz)
4196b0c790SJiao Xianjunadrv9364z7020|ADRV9364-Z7020 + ADRV1CRR-BOB|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.1.0-taiyuan-6-32bit.img.xz)
4296b0c790SJiao Xianjunadrv9361z7035|ADRV9361-Z7035 + ADRV1CRR-BOB/FMC|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.1.0-taiyuan-6-32bit.img.xz)
4396b0c790SJiao Xianjunzc702_fmcs2|Xilinx ZC702 dev board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.1.0-taiyuan-6-32bit.img.xz)
4496b0c790SJiao Xianjunzcu102_fmcs2|Xilinx ZCU102 dev board + FMCOMMS2/3/4|Done|[64bit img](https://users.ugent.be/~xjiao/openwifi-1.1.0-taiyuan-6-64bit.img.xz)
451e5bb50eSJiao Xianjunzcu102_9371|Xilinx ZCU102 dev board + ADRV9371|Future|Future
469e696164SXianjun Jiao
47b73660adSXianjun Jiao- board_name is used to identify FPGA design in openwifi-hw/boards/
48b73660adSXianjun Jiao- Don't have any boards? Or you like JTAG boot instead of SD card? Check our test bed [w-iLab.t](https://doc.ilabt.imec.be/ilabt/wilab/tutorials/openwifi.html) tutorial.
492ee67178SXianjun Jiao
50b73660adSXianjun Jiao[[Quick start](#Quick-start)]
51b73660adSXianjun Jiao[[Basic operations](#Basic-operations)]
52b73660adSXianjun Jiao[[Update FPGA](#Update-FPGA)]
53b73660adSXianjun Jiao[[Update Driver](#Update-Driver)]
54b73660adSXianjun Jiao[[Update sdrctl](#Update-sdrctl)]
55b73660adSXianjun Jiao[[Easy Access and etc](#Easy-Access-and-etc)]
562ee67178SXianjun Jiao
57b73660adSXianjun Jiao[[Build openwifi Linux img from scratch](#Build-openwifi-Linux-img-from-scratch)]
58b73660adSXianjun Jiao[[Special note for 11b](#Special-note-for-11b)]
59b73660adSXianjun Jiao[[Porting guide](#Porting-guide)]
6016091198SJiao Xianjun
6116091198SJiao Xianjun[[Project document](doc)]
6216091198SJiao Xianjun[[Application notes](doc/app_notes)]
632ee67178SXianjun Jiao
64b73660adSXianjun Jiao## Quick start
656e8c8cf8SJiao Xianjun- Burn openwifi board specific img file (from the table) into a SD card ("Open With Disk Image Writer". Or "dd" command after unzip). The SD card has two partitions: BOOT and rootfs. You need to config the **correct files in the BOOT partition** according to the **board you have** by operation on your computer:
66febc5adfSXianjun Jiao  - Copy files in **openwifi/board_name** to the base directory of BOOT partiton.
67febc5adfSXianjun Jiao  - Copy **openwifi/zynqmp-common/Image** (zcu102 board) or **openwifi/zynq-common/uImage** (other boards) to the base directory of BOOT partiton
689d56afc0SJiao Xianjun- Connect two antennas to RXA/TXA ports. Config the board to SD card boot mode (check the board manual). Insert the SD card to the board. Power on.
699d56afc0SJiao Xianjun- Login to the board from your PC (PC Ethernet should have IP 192.168.10.1) with password **openwifi**.
702ee67178SXianjun Jiao  ```
712ee67178SXianjun Jiao  ssh [email protected]
722ee67178SXianjun Jiao  ```
739d56afc0SJiao Xianjun- On board, run openwifi AP and the on board webserver
749d56afc0SJiao Xianjun  ```
759d56afc0SJiao Xianjun  ~/openwifi/fosdem.sh
769d56afc0SJiao Xianjun  ```
779d56afc0SJiao Xianjun- After you see the "openwifi" SSID on your device (Phone/Laptop/etc), connect it. Browser to 192.168.13.1 on your deivce, you should see the webpage hosted by the webserver on board.
789d56afc0SJiao Xianjun  - Note 1: If your device doesn't support 5GHz (ch44), please change the **hostapd-openwifi.conf** on board and re-run fosdem.sh.
799d56afc0SJiao Xianjun  - Note 2: After ~2 hours, the Viterbi decoder will halt (Xilinx Evaluation License). Just power cycle the board if it happens. (If output of "./sdrctl dev sdr0 get reg rx 20" is always the same, it means the decoder halts)
809d56afc0SJiao Xianjun- To give the Wi-Fii client internet access, configure routing/NAT **on the PC**:
81b73660adSXianjun Jiao  ```
82b73660adSXianjun Jiao  sudo sysctl -w net.ipv4.ip_forward=1
832ee67178SXianjun Jiao  sudo iptables -t nat -A POSTROUTING -o ethY -j MASQUERADE
842ee67178SXianjun Jiao  sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX
85b73660adSXianjun Jiao  ```
86b73660adSXianjun Jiao  **ethX** is the PC NIC name connecting the board. **ethY** is the PC NIC name connecting internet.
872ee67178SXianjun Jiao
88b73660adSXianjun Jiao  If you want, uncommenting "net.ipv4.ip_forward=1" in /etc/sysctl.conf to make IP forwarding persistent on PC.
8922dd0cc4SXianjun Jiao- To monitor **real-time CSI (Chip State Information)**, such as timestamp, frequency offset, channel state, equalizer, please refer to [[CSI notes](doc/app_notes/csi.md)].
90b73660adSXianjun Jiao
91b73660adSXianjun Jiao## Basic operations
92b73660adSXianjun JiaoThe board actually is an Linux/Ubuntu computer which is running **hostapd** to offer Wi-Fi AP functionality over the Wi-Fi Network Interface (NIC). The NIC is implemented by openwifi-hw FPGA design. We use the term **"On board"** to indicate that the commands should be executed after ssh login to the board. **"On PC"** means the commands should run on PC.
93b73660adSXianjun Jiao- Bring up the openwifi NIC sdr0:
94b73660adSXianjun Jiao  ```
95635261bcSJiao Xianjun  service network-manager stop
96b73660adSXianjun Jiao  cd ~/openwifi && ./wgd.sh
97b73660adSXianjun Jiao  ```
98b73660adSXianjun Jiao- Use openwifi as client to connect other AP (Change wpa-connect.conf on board firstly):
99b73660adSXianjun Jiao  ```
1002ee67178SXianjun Jiao  route del default gw 192.168.10.1
101b73660adSXianjun Jiao  wpa_supplicant -i sdr0 -c wpa-connect.conf &
1022ee67178SXianjun Jiao  dhclient sdr0
1032ee67178SXianjun Jiao  ```
104b73660adSXianjun Jiao- Use openwifi in ad-hoc mode: Please check **sdr-ad-hoc-up.sh** and **sdr-ad-hoc-join.sh**.
105b73660adSXianjun Jiao- Use openwifi in monitor mode: Please check **monitor_ch.sh**.
106b73660adSXianjun Jiao- The Linux native Wi-Fi tools/Apps (iwconfig/ifconfig/iwlist/iw/hostapd/wpa_supplicant/etc) can run over openwifi NIC in the same way as commercial Wi-Fi chip.
107b73660adSXianjun Jiao- **sdrctl** is a dedicated tool to access openwifi driver/FPGA, please check doc directory for more information.
108b73660adSXianjun Jiao
109b73660adSXianjun Jiao## Update FPGA
110b73660adSXianjun Jiao
111b73660adSXianjun JiaoSince the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to udpate the fpga bitstream on board.
112b73660adSXianjun Jiao
11389ac92c2SJiao Xianjun- Install Vivado/SDK 2018.3 (If you don't need to generate new FPGA bitstream, WebPack version without license is enough)
114b73660adSXianjun Jiao- Setup environment variables (use absolute path):
1152ee67178SXianjun Jiao  ```
1162ee67178SXianjun Jiao  export XILINX_DIR=your_Xilinx_directory
1172ee67178SXianjun Jiao  export OPENWIFI_DIR=your_openwifi_directory
118b73660adSXianjun Jiao  export BOARD_NAME=your_board_name
1192ee67178SXianjun Jiao  ```
120b73660adSXianjun Jiao- Get the latest FPGA bitstream from openwifi-hw, generate BOOT.BIN and transfer it on board via ssh channel:
1212ee67178SXianjun Jiao  ```
122b73660adSXianjun Jiao  $OPENWIFI_DIR/user_space/get_fpga.sh $OPENWIFI_DIR
123febc5adfSXianjun Jiao
124febc5adfSXianjun Jiao  For Zynq 7000:
125b73660adSXianjun Jiao  $OPENWIFI_DIR/user_space/boot_bin_gen.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME
126febc5adfSXianjun Jiao
127febc5adfSXianjun Jiao  For Zynq MPSoC (like zcu102 board):
128febc5adfSXianjun Jiao  $OPENWIFI_DIR/user_space/boot_bin_gen_zynqmp.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME
129febc5adfSXianjun Jiao
130b73660adSXianjun Jiao  scp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME/output_boot_bin/BOOT.BIN [email protected]:
1312ee67178SXianjun Jiao  ```
132b73660adSXianjun Jiao- On board: Put the BOOT.BIN into the BOOT partition.
1332ee67178SXianjun Jiao  ```
134b73660adSXianjun Jiao  mount /dev/mmcblk0p1 /mnt
135b73660adSXianjun Jiao  cp ~/BOOT.BIN /mnt
136b73660adSXianjun Jiao  umount /mnt
13789e3e0fbSXianjun Jiao  ```
138b73660adSXianjun Jiao  **Power cycle** the board to load new FPGA bitstream.
1392ee67178SXianjun Jiao
140b73660adSXianjun Jiao## Update Driver
1412ee67178SXianjun Jiao
142b73660adSXianjun JiaoSince the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to udpate the driver on board.
143b73660adSXianjun Jiao- Prepare Analog Devices Linux kernel source code (only need to run once):
1442ee67178SXianjun Jiao  ```
145febc5adfSXianjun Jiao  $OPENWIFI_DIR/user_space/prepare_kernel.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT
146febc5adfSXianjun Jiao  (For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64)
1472ee67178SXianjun Jiao  ```
148b73660adSXianjun Jiao- Compile the latest openwifi driver
1492ee67178SXianjun Jiao  ```
150febc5adfSXianjun Jiao  $OPENWIFI_DIR/driver/make_all.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT
151febc5adfSXianjun Jiao  (For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64)
1522ee67178SXianjun Jiao  ```
153b73660adSXianjun Jiao- Copy the driver files to the board via ssh channel
1542ee67178SXianjun Jiao  ```
155b73660adSXianjun Jiao  scp `find $OPENWIFI_DIR/driver/ -name \*.ko` [email protected]:openwifi/
156b73660adSXianjun Jiao  ```
157b73660adSXianjun Jiao  Now you can use **wgd.sh** on board to load the new openwifi driver.
1589e8d5e4aSJiao Xianjun
159b73660adSXianjun Jiao## Update sdrctl
160b73660adSXianjun Jiao- Copy the sdrctl source files to the board via ssh channel
161b73660adSXianjun Jiao  ```
16234a68b64SJiao Xianjun  scp `find $OPENWIFI_DIR/user_space/sdrctl_src/ -name \*` [email protected]:openwifi/sdrctl_src/
163b73660adSXianjun Jiao  ```
164b73660adSXianjun Jiao- Compile the sdrctl **on board**:
165b73660adSXianjun Jiao  ```
166b73660adSXianjun Jiao  cd ~/openwifi/sdrctl_src/ && make && cp sdrctl ../ && cd ..
167b73660adSXianjun Jiao  ```
168b73660adSXianjun Jiao## Easy Access and etc
1699e8d5e4aSJiao Xianjun
170b73660adSXianjun Jiao- FPGA and driver on board update scripts
171b73660adSXianjun Jiao  - Setup [ftp server](https://help.ubuntu.com/lts/serverguide/ftp-server.html) on PC, allow anonymous and change ftp root directory to $OPENWIFI_DIR.
172b73660adSXianjun Jiao  - On board:
173b73660adSXianjun Jiao  ```
174b73660adSXianjun Jiao  ./sdcard_boot_update.sh $BOARD_NAME
1759e8d5e4aSJiao Xianjun  (Above command downloads uImage, BOOT.BIN and devicetree.dtb, then copy them into boot partition. Remember to power cycle)
1769e8d5e4aSJiao Xianjun  ./wgd.sh remote
1779e8d5e4aSJiao Xianjun  (Above command downloads driver files, and brings up sdr0)
178b73660adSXianjun Jiao  ```
179b73660adSXianjun Jiao- Access the board disk/rootfs like a disk:
180b73660adSXianjun Jiao   - On PC: "File manager --> Connect to Server...", input: sftp://[email protected]/root
181b73660adSXianjun Jiao   - Input password "openwifi"
1829e8d5e4aSJiao Xianjun
183b73660adSXianjun Jiao## Build openwifi Linux img from scratch
18496b42376STotalCaesar659- Download [2019_R1-2020_02_04.img.xz](https://swdownloads.analog.com/cse/2019_R1-2020_02_04.img.xz) from [Analog Devices Wiki](https://wiki.analog.com/resources/tools-software/linux-software/zynq_images). Burn it to a SD card.
185b73660adSXianjun Jiao- Insert the SD card to your Linux PC. Find out the mount point (that has two sub directories BOOT and rootfs), and setup environment variables (use absolute path):
1862ee67178SXianjun Jiao  ```
187b73660adSXianjun Jiao  export SDCARD_DIR=sdcard_mount_point
188b73660adSXianjun Jiao  export XILINX_DIR=your_Xilinx_directory
189b73660adSXianjun Jiao  export OPENWIFI_DIR=your_openwifi_directory
190b73660adSXianjun Jiao  export BOARD_NAME=your_board_name
191b73660adSXianjun Jiao  ```
192b73660adSXianjun Jiao- Run script to update SD card:
193b73660adSXianjun Jiao  ```
194b73660adSXianjun Jiao  $OPENWIFI_DIR/user_space/update_sdcard.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME $SDCARD_DIR
195b73660adSXianjun Jiao  ```
1969d56afc0SJiao Xianjun- Config your board to SD card boot mode (check the board manual). Insert the SD card to the board. Power on.
1979d56afc0SJiao Xianjun- Login to the board from your PC (PC Ethernet should have IP 192.168.10.1) with one time password **analog**.
1989d56afc0SJiao Xianjun  ```
1999d56afc0SJiao Xianjun  ssh [email protected]
2009d56afc0SJiao Xianjun  ```
2019d56afc0SJiao Xianjun- Setup routing/NAT **on the PC** for your board -- this internet connection is **important** for post installation/config.
2029d56afc0SJiao Xianjun  ```
2039d56afc0SJiao Xianjun  sudo sysctl -w net.ipv4.ip_forward=1
2049d56afc0SJiao Xianjun  sudo iptables -t nat -A POSTROUTING -o ethY -j MASQUERADE
2059d56afc0SJiao Xianjun  sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX
2069d56afc0SJiao Xianjun  ```
2079d56afc0SJiao Xianjun  **ethX** is the PC NIC name connecting the board. **ethY** is the PC NIC name connecting internet.
2089d56afc0SJiao Xianjun
2099d56afc0SJiao Xianjun  If you want, uncommenting "net.ipv4.ip_forward=1" in /etc/sysctl.conf to make IP forwarding persistent on PC.
2109d56afc0SJiao Xianjun- Run **one time** script on board to complete post installation/config (After this, password becomes **openwifi**)
2119d56afc0SJiao Xianjun  ```
2129d56afc0SJiao Xianjun  cd ~/openwifi && ./post_config.sh
2139d56afc0SJiao Xianjun  ```
2149d56afc0SJiao Xianjun- Now you can start from [Quick start](#Quick-start) (Skip the image download and burn step)
2152ee67178SXianjun Jiao
216b73660adSXianjun Jiao## Special note for 11b
217e17fdc17Smmehari
218e17fdc17SmmehariOpenwifi only applies OFDM as its modulation scheme and as a result, it is not backward compatible with 802.11b clients or modes of operation. This is usually the case during beacon transmission, connection establishment, and robust communication.
219e17fdc17Smmehari
220e17fdc17SmmehariAs a solution to this problem, openwifi can be fully controlled only if communicating with APs/clients instantiated using hostapd/wpa_supplicant userspace programs respectively.
221e17fdc17Smmehari
222e17fdc17SmmehariFor hostapd program, 802.11b rates can be suppressed using configuration commands (i.e. supported_rates, basic_rates) and an example configuration file is provided (i.e. hostapd-openwifi.conf). One small caveat to this one comes from fullMAC Wi-Fi cards as they must implement the *NL80211_TXRATE_LEGACY* NetLink handler at the device driver level.
223e17fdc17Smmehari
224e17fdc17SmmehariOn the other hand, the wpa_supplicant program on the client side (commercial Wi-Fi dongle/board) cannot suppress 802.11b rates out of the box in 2.4GHz band, so there will be an issue when connecting openwifi (OFDM only). A patched wpa_supplicant should be used at the client side.
225e17fdc17Smmehari```
226b1633ad3SJiao Xianjunsudo apt-get install libssl1.0-dev
227b73660adSXianjun Jiao$OPENWIFI_DIR/user_space/build_wpa_supplicant_wo11b.sh $OPENWIFI_DIR
228e17fdc17Smmehari```
229b73660adSXianjun Jiao## Porting guide
230e17fdc17Smmehari
23179c6c40fSJiao XianjunThis section explains the porting work by showing the differences between openwifi and Analog Devices reference design. openwifi is based on 4fea7c5 (2019 r1) of [HDL Reference Designs](https://github.com/analogdevicesinc/hdl).
232b73660adSXianjun Jiao- Open the fmcomms2 + zc706 reference design at hdl/projects/fmcomms2/zc706 (Please read Analog Devices help)
233b73660adSXianjun Jiao- Open the openwifi design zc706_fmcs2 at openwifi-hw/boards/zc706_fmcs2 (Please read openwifi-hw repository)
234b73660adSXianjun Jiao- "Open Block Design", you will see the differences between openwifi and the reference design. Both in "diagram" and in "Address Editor".
235b73660adSXianjun Jiao- The address/interrupts of FPGA blocks hooked to the ARM bus should be put/aligned to the devicetree file openwifi/kernel_boot/boards/zc706_fmcs2/devicetree.dts. Linux will parse the devicetree.dtb when booting to know information of attached deivce (FPGA blocks in our case).
236b73660adSXianjun Jiao- We use dtc command to get devicetree.dts converted from devicetree.dtb in [Analog Devices Linux image](https://wiki.analog.com/resources/tools-software/linux-software/zynq_images), then do modification according to what we have added/modified to the reference design.
237b73660adSXianjun Jiao- Please learn the script in [[Build openwifi Linux img from scratch](#Build-openwifi-Linux-img-from-scratch)] to understand how we generate devicetree.dtb, BOOT.BIN and Linux kernel uImage and put them together to build the full SD card image.
238b73660adSXianjun Jiao
23991e80ec1SJiao Xianjun## Videos
24091e80ec1SJiao Xianjun
241b7d79983SJiao XianjunDemo [[youtube](https://youtu.be/NpjEaszd5u4)], [[link for CHN user](https://www.zhihu.com/zvideo/1280659393378041856)]
24291e80ec1SJiao Xianjun
2435129e388SJiao XianjunFOSDEM2020 [[youtube](https://youtu.be/Mq48cGthk7M)], [[link for CHN user](https://www.zhihu.com/zvideo/1280673506397425664)]
24491e80ec1SJiao Xianjun
2455129e388SJiao XianjunLow latency for gaming and introduction [[youtube](https://youtu.be/Notn9X482LI)], [[link for CHN user](https://www.zhihu.com/zvideo/1273823153371385856)]
246dc888ed5SJiao Xianjun
2476d5ae27cSJiao XianjunCSI (Channel State Information) [[twitter](https://twitter.com/i/status/1314207380561780738)], [[link for CHN user](https://www.zhihu.com/zvideo/1297662571618148352)]
24891e80ec1SJiao Xianjun
24991e80ec1SJiao Xianjun## Papers
25091e80ec1SJiao Xianjun
25122dd0cc4SXianjun Jiao- [openwifi: a free and open-source IEEE802.11 SDR implementation on SoC](https://www.orca-project.eu/wp-content/uploads/sites/4/2020/03/openwifi-vtc-antwerp-PID1249076.pdf)
252a58209b3SJiao Xianjun- [csi murder](https://ans.unibs.it/projects/csi-murder/)
25391e80ec1SJiao Xianjun
25491e80ec1SJiao XianjunOpenwifi was born in [ORCA project](https://www.orca-project.eu/) (EU's Horizon2020 programme under agreement number 732174).
25591e80ec1SJiao Xianjun
256b73660adSXianjun Jiao## Cite openwifi project
25744dff4bdSJiao Xianjun
25844dff4bdSJiao XianjunAny use of openwifi project which results in a publication should include a citation via (bibtex example):
25944dff4bdSJiao Xianjun```
26044dff4bdSJiao Xianjun@electronic{openwifigithub,
26144dff4bdSJiao Xianjun            author = {Xianjun, Jiao and Wei, Liu and Michael, Mehari},
26244dff4bdSJiao Xianjun            title = {open-source IEEE802.11/Wi-Fi baseband chip/FPGA design},
26344dff4bdSJiao Xianjun            url = {https://github.com/open-sdr/openwifi},
26444dff4bdSJiao Xianjun            year = {2019},
26544dff4bdSJiao Xianjun}
26644dff4bdSJiao Xianjun```
267