From 7cfb6db48a80ba34411d91214218aa9bddfdb607 Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@openairinterface.org>
Date: Thu, 27 Apr 2023 13:52:12 +0200
Subject: [PATCH] Update scope (Xforms, Qt) documentation and list in
 doc/README.md

---
 doc/README.md                |  1 +
 openair1/PHY/TOOLS/readme.md | 67 +++++++++++++++++++++++++++++-------
 2 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/doc/README.md b/doc/README.md
index 4e881b7a4b..91101d18ba 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -94,6 +94,7 @@ The other SDRs (AW2S, LimeSDR, ...) have no READMEs.
 
 ## Special-purpose libraries
 
+- OAI has two scopes, one based on Xforms, one on Qt5, described in [this README](../openair1/PHY/TOOLS/readme.md)
 - OAI comes with an integrated [telnet server](../common/utils/telnetsrv/DOC/telnethelp.md) to monitor and control
 - OAI comes with an integrated [web server](../common/utils/websrv/DOC/websrv.md)
 
diff --git a/openair1/PHY/TOOLS/readme.md b/openair1/PHY/TOOLS/readme.md
index 18fc178c30..626a43a780 100644
--- a/openair1/PHY/TOOLS/readme.md
+++ b/openair1/PHY/TOOLS/readme.md
@@ -1,31 +1,74 @@
-## xForms-based Scope
-To use the scope, run the xNB or the UE with option "-d"
+# xForms-based Scope
 
-Usage in gdb
-In gdb, when you break, you can refresh immediatly the scope view by calling the display function.
-The first paramter is the graph context, nevertheless we keep the last value for a dirty call in gdb (so you can use '0')
+## How to run and troubleshooting
+
+To compile OAI, build with scope support:
+```
+./build_oai --build-lib nrscope ...
+```
+
+To use the scope, run the xNB or the UE with option `-d`. If you receive the
+error
+```
+In fl_initialize() [flresource.c:995]: 5G-gNB-scope: Can't open display :0
+In fl_bgn_form() [forms.c:347]: Missing or failed call of fl_initialize()
+```
+you can allow root to open X windows:
+```
+xhost +si:localuser:root
+```
+
+### Usage in gdb with Scope enabled
+
+In gdb, when you break, you can refresh immediately the scope view by calling the display function.
+The first parameter is the graph context, nevertheless we keep the last value for a dirty call in gdb (so you can use '0')
 
 Example with no variable known
+```
 phy_scope_nrUE(0, PHY_vars_UE_g[0][0], 0, 0, 0)
-
+```
 or
+```
 phy_scope_gNB(0, phy_vars_gnb, phy_vars_ru, UE_id)
+```
 
 # Qt-based Scope
-## Building Instuctions
-For the new qt-based scopo designed for NR, please consider the following:
+
+## Building Instructions
+For the new qt-based scope designed for NR, please consider the following:
 
 1. run the gNB or the UE with the option '--dqt'.
-2. make sure to install the Qt5 packages before running the scope. Otherwise, the scope will NOT be displayed!
-3. if you need only to build the new scope, then add 'nrqtscope' after the '--lib-build' option. So, the complete
-   command would be
+2. make sure to install the Qt5 packages before running the scope. Otherwise, the scope will NOT be displayed! Note that Qt6 does NOT work.
+3. To build the new scope, add 'nrqtscope' after the '--build-lib' option. So, the complete command would be
 
    ```
    ./build_oai --gNB -w USRP --nrUE --build-lib nrqtscope
    ```
 
 ## New Features
+
 1. New KPIs for both gNB and UE, e.g., BLER, MCS, throughout, and number of scheduled RBs.
-2. For each of the gNB and UE, a main widget is created with a 3x2 grid of sub-widgets, each to dispaly one KPI.
+2. For each of the gNB and UE, a main widget is created with a 3x2 grid of sub-widgets, each to display one KPI.
 3. Each of the sub-widgets has a drop-down list to choose the KPI to show in that sub-widget.
 4. Both of the gNB and UE scopes can be resized using the mouse movement.
+
+## Troubleshoot
+
+Similar as with the Xforms-based scope, you should allow root to open X
+windows:
+```
+xhost +si:localuser:root
+```
+
+Furthermore, if you get the following error (might be followed by a
+segfault)
+```
+QStandardPaths: wrong ownership on runtime directory /run/user/1000, 1000 instead of 0
+```
+You have to set the XDG runtime directory like one of the following options
+(try in order):
+```
+sudo -E XDG_RUNTIME_DIR=/run/user/0 ./nr-softmodem ...
+sudo -E XDG_RUNTIME_DIR=/tmp/runtime-root ./nr-softmodem ...
+sudo -E XDG_RUNTIME_DIR= ./nr-softmodem ...
+```
-- 
2.26.2