Brendan,


I am just using the ‘examples’ C/C++ builds.  I have not used the python 
modules.



I would think editing the CMake file would remove the need for the –D flag.



I have had very good luck running a B205 USB-3 on a RPi-4-8GB.  Only a couple 
of dependencies to install, which were documented on the Ettus UHD website.



I did create a RAM-Drive, since the 8 GByte RAM has room for that.  And I am 
able to reliably record above 20 Msps with the ‘wire format’ at 16-bit complex 
I&Q.  (No real reason to do 32-float, since the native samples are 16-bit I&Q 
in the FPGA on the B205, right?)



I use the ‘host examples’ in the latest 4.x version of UHD.  And they are 
pretty easy to modify.  I have adapted for things like using the 1-PPS, and 
doing times receive and transmit.



Ken



From: Brendan Horsfield [mailto:brendan.horsfi...@vectalabs.com]
Sent: Sunday, April 4, 2021 01:35
To: Clark (US), Kenneth C <kenneth.c.cla...@boeing.com>
Cc: usrp-users@lists.ettus.com; patchvonbr...@gmail.com
Subject: [EXTERNAL] Re: [USRP-users] Re: Problem with interfacing Raspberry Pi 
4 to USRP B210 with Python API



        EXT email: be mindful of links/attachments.




Thanks Ken.  As you suggested, I added -DCMAKE_EXE_LINKER_FLAGS="-latomic" to 
the CMake call.



The good news is that the UHD build & installation process completed 
successfully.



The bad news is that when I try to import the uhd module in Python3, I get the 
following error:



pi@raspberrypi:~ $ python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import uhd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3/dist-packages/uhd/__init__.py", line 10, in 
<module>
    from . import types
  File "/usr/local/lib/python3/dist-packages/uhd/types.py", line 10, in <module>
    from . import libpyuhd as lib
ImportError: /usr/local/lib/libuhd.so.4.0.0: undefined symbol: 
__atomic_fetch_add_8
>>>



Did you encounter this problem too?



I guess the next step is to hack the "CMakeLists.txt" files as per the link you 
sent me.  Just to clarify one point first:  If I modify the CMakeLists.txt 
files, do I still need to include -DCMAKE_EXE_LINKER_FLAGS="-latomic" in the 
CMake call?



Thanks,

Brendan.







On Sat, Apr 3, 2021 at 10:29 PM Clark (US), Kenneth C 
<kenneth.c.cla...@boeing.com<mailto:kenneth.c.cla...@boeing.com>> wrote:


   I had the same problem build UHD on RPi4

   Answer here:
   https://gitlab.kitware.com/cmake/cmake/-/issues/21174

   Add to CMake call:
   -DCMAKE_EXE_LINKER_FLAGS="-latomic"

   Regards,

   Ken


   -----Original Message-----
   From: 
usrp-users-requ...@lists.ettus.com<mailto:usrp-users-requ...@lists.ettus.com> 
[mailto:usrp-users-requ...@lists.ettus.com<mailto:usrp-users-requ...@lists.ettus.com>]
   Sent: Saturday, April 3, 2021 11:13
   To: usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>
   Subject: [EXTERNAL] USRP-users Digest, Vol 128, Issue 7

   EXT email: be mindful of links/attachments.



   Send USRP-users mailing list submissions to
           usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>

   To subscribe or unsubscribe via email, send a message with subject or body 
'help' to
           
usrp-users-requ...@lists.ettus.com<mailto:usrp-users-requ...@lists.ettus.com>

   You can reach the person managing the list at
           
usrp-users-ow...@lists.ettus.com<mailto:usrp-users-ow...@lists.ettus.com>

   When replying, please edit your Subject line so it is more specific than 
"Re: Contents of USRP-users digest..."

   Today's Topics:

      1. Re: Problem with interfacing Raspberry Pi 4 to USRP B210 with Python 
API
         (Brendan Horsfield)
      2. Re: Intermittent problem with GPS synchronization for multiple E310 
units
         (Ofer Saferman)


   ----------------------------------------------------------------------

   Message: 1
   Date: Sat, 3 Apr 2021 21:07:59 +1000
   From: Brendan Horsfield 
<brendan.horsfi...@vectalabs.com<mailto:brendan.horsfi...@vectalabs.com>>
   Subject: [USRP-users] Re: Problem with interfacing Raspberry Pi 4 to
           USRP B210 with Python API
   To: Marcus D Leech <patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   Cc: USRP-users@lists.ettus.com<mailto:USRP-users@lists.ettus.com>
   Message-ID:
           
<calnmz8wg3gqnkaomrhhcbpagttfubm3fkmzjhcwhuaghrlu...@mail.gmail.com<mailto:calnmz8wg3gqnkaomrhhcbpagttfubm3fkmzjhcwhuaghrlu...@mail.gmail.com>>
   Content-Type: multipart/alternative;
           boundary="000000000000dc3aeb05bf0f7ace"

   Hi Marcus,

   I have tried your suggestion, but unfortunately without success:

   Per your advice, I have edited the file "cmake.lwt" in the folder 
/usr/local/lib/python3.7/dist-packages/pybombs/templates to include the option 
"-DENABLE_PYTHON_API=ON" in the calls to cmake.  The modified commands are as 
follows:

   configure: cmake .. -DENABLE_PYTHON_API=ON 
-DCMAKE_BUILD_TYPE=$cmakebuildtype -DCMAKE_INSTALL_PREFIX=$prefix $config_opt 
-Wno-dev
   configure_static: cmake .. -DENABLE_PYTHON_API=ON 
-DCMAKE_BUILD_TYPE=$cmakebuildtype -DCMAKE_INSTALL_PREFIX=$prefix 
-DENABLE_STATIC_LIBS=True $config_opt

   I removed the previous UHD installation and re-ran "pybombs install uhd", 
but the end result was much the same:  the installation process completed 
without errors, but the Python API was not included in the installation.

   QUESTION 1:  Can you tell me if PyBOMBS actually builds the UHD driver from 
source, or does it simply copy a pre-compiled binary onto my system?  The 
reason I ask is that PyBOMBS is quite quick to install the UHD driver, whereas 
the non-PyBOMBS approach is VERY slow (i.e. around 60 minutes to get to 53%, at 
which point it crashes out with an error).

   QUESTION 2:  This whole process feels more difficult than it should be.
   Why isn't the Python API installed with the UHD driver by default?  Would I 
be better off using another language (like C++) to control the USRP?

   Thanks,
   Brendan.



   On Fri, Apr 2, 2021 at 11:25 PM Marcus D Leech 
<patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   wrote:

   > Perhaps look at the PyBombs recipe for your platform—there’s probably
   > a compiler flag that needs to be set that you’re missing, but I don’t
   > know what that is.
   >
   > Also, in general, you don’t need to become root to compile and build
   > code—only needed during the “make install”
   >
   >
   >
   > Sent from my iPhone
   >
   > On Apr 2, 2021, at 7:19 AM, Brendan Horsfield <
   > brendan.horsfi...@vectalabs.com<mailto:brendan.horsfi...@vectalabs.com>> 
wrote:
   >
   > 
   > Hi Folks,
   >
   > I would like to interface my Raspberry Pi 4 to a USRP B210 via the
   > Python API.  This requires the UHD driver to be built from source.
   > Unfortunately, whenever I try this I encounter some errors that stop
   > the build process in its tracks.
   >
   > Details of the error are as follows:
   >
   > [ 53%] Linking CXX executable test_clock_synch
   > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to
   > `__atomic_compare_exchange_8'
   > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to
   > `__atomic_load_8'
   > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to
   > `__atomic_store_8'
   > /usr/bin/ld: ../lib/libuhd.so.4.0.0: undefined reference to
   > `__atomic_fetch_add_8'
   > collect2: error: ld returned 1 exit status
   > make[2]: *** [examples/CMakeFiles/test_clock_synch.dir/build.make:95:
   > examples/test_clock_synch] Error 1
   > make[1]: *** [CMakeFiles/Makefile2:1039:
   > examples/CMakeFiles/test_clock_synch.dir/all] Error 2
   > make: *** [Makefile:163: all] Error 2
   >
   > The process I have been using is as follows:
   >
   > STEP 1:  INSTALL DEPENDENCIES
   > sudo apt-get install libboost-all-dev libusb-1.0-0-dev doxygen
   > python3-docutils python3-mako python3-numpy python3-requests
   > python3-ruamel.yaml python3-setuptools cmake build-essential
   >
   > STEP 2:  BUILD UHD DRIVER FROM SOURCE
   > cd /home/pi
   > mkdir workarea-uhd
   > cd workarea-uhd
   > git clone https://github.com/EttusResearch/uhd
   > cd uhd
   > git checkout v4.0.0.0
   > cd host
   > mkdir build
   > cd build
   > sudo cmake -DNEON_SIMD_ENABLE=OFF -DENABLE_PYTHON_API=ON ../ sudo make
   > --->  (ERRORS OCCUR DURING "MAKE" PROCESS)
   >
   > My system configuration is as follows:
   > Hardware: Raspberry Pi 4 Model B Rev 1.4
   > OS: Raspbian GNU/Linux 10 (buster) (32-bit, armv7l) Ettus USRP B210
   >
   > Does anyone know what the problem could be, and how I can resolve it?
   >
   > One final note:  Using PyBOMBS, I was able to successfully build &
   > install the UHD driver and connect to the USRP.  Unfortunately the
   > PyBOMBS build does not include the Python API, which is what I really
   > want.  Is there a different version of the PyBOMBS build that includes the 
Python API?
   >
   > Thanks & Regards,
   > Brendan.
   >
   >
   >
   > _______________________________________________
   > USRP-users mailing list -- 
usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To unsubscribe
   > send an email to 
usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>
   >
   >
   -------------- next part --------------
   A message part incompatible with plain text digests has been removed ...
   Name: not available
   Type: text/html
   Size: 5624 bytes
   Desc: not available

   ------------------------------

   Message: 2
   Date: Sat, 3 Apr 2021 14:12:35 +0300
   From: Ofer Saferman <o...@navigicom.com<mailto:o...@navigicom.com>>
   Subject: [USRP-users] Re: Intermittent problem with GPS
           synchronization for multiple E310 units
   To: usrp-users 
<usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>>
   Message-ID:
           
<CACDReSwXUvJ8_LimfVOn4StHQEGhNntY-nCSv0aYdBsX=at...@mail.gmail.com<mailto:at...@mail.gmail.com>>
   Content-Type: multipart/alternative;
           boundary="000000000000566d1705bf0f8b0e"

   Hello Philip,

   Thank you for the explanation.
   What would you suggest?
   opkg exists. There must be a way to install ntpd without needing to rebuild 
the image.
   Maybe use pybombs or other methods?
   git also works. Maybe download a different package manager and compile it?

   It seems that Marcus pointed out a great benefit of E310 units running gpsd, 
but without ntpd system clock can't sync and it seems that this feature can 
vastly simplify gps synchronization among E310 units.

   I would be very grateful if anybody can suggest a solution to install ntpd 
on E310 units running UHD 3.15 SD-card image.

   Regards,
   Ofer Saferman.

   On Sat, Apr 3, 2021 at 10:30 AM 
<usrp-users-requ...@lists.ettus.com<mailto:usrp-users-requ...@lists.ettus.com>> 
wrote:

   > Send USRP-users mailing list submissions to
   >         usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>
   >
   > To subscribe or unsubscribe via email, send a message with subject or
   > body 'help' to
   >         
usrp-users-requ...@lists.ettus.com<mailto:usrp-users-requ...@lists.ettus.com>
   >
   > You can reach the person managing the list at
   >         
usrp-users-ow...@lists.ettus.com<mailto:usrp-users-ow...@lists.ettus.com>
   >
   > When replying, please edit your Subject line so it is more specific
   > than "Re: Contents of USRP-users digest..."Today's Topics:
   >
   >    1. Re: Intermittent problem with GPS synchronization for multiple
   > E310 units
   >       (Philip Balister)
   >
   >
   >
   > ---------- Forwarded message ----------
   > From: Philip Balister <phi...@balister.org<mailto:phi...@balister.org>>
   > To: Ofer Saferman <o...@navigicom.com<mailto:o...@navigicom.com>>, "Marcus 
D. Leech" <
   > patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   > Cc: Rob Kossler <rkoss...@nd.edu<mailto:rkoss...@nd.edu>>, usrp-users
   > <usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>>
   > Bcc:
   > Date: Fri, 2 Apr 2021 10:09:43 -0400
   > Subject: [USRP-users] Re: Intermittent problem with GPS
   > synchronization for multiple E310 units On 4/2/21 7:17 AM, Ofer
   > Saferman wrote:
   > > Marcus Hi,
   > >
   > > Your suggestion below to install ntpd does not work.
   > > The image does not include it. Although the old thread says
   > > otherwise I think it refers to an older UHD release that did include 
ntpd.
   > > Any accurate instructions on how to install it anyway?
   > > Maybe opkg should be configured to access another repository?
   > > Doing: opkg list | grep ntpd, does not yield anything useful so it
   > > is not just a question of typing it correctly.
   >
   > As far as I know, no image has been setup to use package feeds.
   >
   > I know ntpd worked in release4 images, pretty sure the newer image was
   > redone and things have been left out that used to be there.
   >
   > Philip
   >
   > >
   > > Regards,
   > > Ofer Saferman
   > >
   > > On Thu, Apr 1, 2021 at 4:34 PM Marcus D. Leech
   > > <patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   > > wrote:
   > >
   > >> On 04/01/2021 06:00 AM, Ofer Saferman wrote:
   > >>
   > >> Hello Marcus,
   > >>
   > >> I am working on E310 with the latest UHD-3.15 SD card image.
   > >> It seems not to include ntpd that is required to synchronize system
   > >> time to GPS time.
   > >> Any idea how to install it on the E310?
   > >>
   > >> Regards,
   > >> Ofer Saferman
   > >>
   > >> sudo opkg install ntpd
   > >>
   > >> should work, but it has been a while since I installed any packages
   > >> on
   > my
   > >> E310.
   > >>
   > >> The E310 is based on OpenEmbedded Linux, so all the info about
   > installing
   > >> and managing packages on OpenEmbedded apply.
   > >>
   > >>
   > >>
   > >> On Wed, Mar 31, 2021 at 11:40 PM Marcus D Leech <
   > patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   > >> wrote:
   > >>
   > >>> Just use gettimeofday() or any of the myriad subtle variants
   > >>> available
   > in
   > >>> boost to get you the Linux system time, and use that in a call to
   > >>> set_time_next_pps().
   > >>>
   > >>> The fact that all your E310s will be running GPSD means they’ll be
   > >>> adjusting system time appropriately and they’ll all agree on what
   > >>> time
   > it
   > >>> is, depending on the level of precision you need.
   > >>>
   > >>> Sent from my iPhone
   > >>>
   > >>> On Mar 31, 2021, at 3:50 PM, Ofer Saferman 
<o...@navigicom.com<mailto:o...@navigicom.com>> wrote:
   > >>>
   > >>> 
   > >>> Thank you Rob. Your suggestions are always helpful. I will look
   > >>> into using gps_gpgga.
   > >>> Thank you Marcus. I am already adding one, per other examples
   > >>> posted
   > here
   > >>> and sync_to_gps example. Can you please comment how I can benefit
   > >>> from
   > the
   > >>> fact that E310 units use gpsd in Linux?
   > >>>
   > >>> Regards,
   > >>> Ofer Saferman
   > >>>
   > >>> On Wed, Mar 31, 2021 at 10:13 PM Marcus D Leech <
   > patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   > >>> wrote:
   > >>>
   > >>>>
   > >>>>
   > >>>> Sent from my iPhone
   > >>>>
   > >>>> On Mar 31, 2021, at 2:22 PM, Rob Kossler 
<rkoss...@nd.edu<mailto:rkoss...@nd.edu>> wrote:
   > >>>>
   > >>>> 
   > >>>> Hi Ofer,
   > >>>> Take a look at the Ettus source code gps_ctrl.cpp.  In
   > >>>> particular,
   > look
   > >>>> at the get_sentence() usage which in the case of "gps_time" waits
   > >>>> for
   > the
   > >>>> next occurrence (wait=true),  but for the others does not wait.
   > >>>> But
   > this
   > >>>> doesn't fully explain the behavior you are seeing.  If you do the
   > following:
   > >>>> 1) wait for PPS time to change
   > >>>> 2) read the "gps_time" sensor
   > >>>> 3) set_time_next_pps (use the value you just read)
   > >>>>
   > >>>> Add 1 to the time you just read before calling set_time_next_pps.
   > >>>>
   > >>>>
   > >>>> It should still work because the "gps_time" command should just
   > >>>> wait until the next PPS.  I guess it depends upon how
   > >>>> "synchronized" are
   > the
   > >>>> received NMEA string with the PPS edge.  Step 1 above waits for
   > >>>> the
   > PPS
   > >>>> edge, but maybe the NMEA string arrives 0.1 secs before or after
   > that.  I
   > >>>> don't really know.  Perhaps you need to switch to using "gps_gpgga"
   > such
   > >>>> that there is no additional wait added and also perhaps you
   > >>>> should
   > add step
   > >>>> 1B which would be just a fixed delay of perhaps 0.4 secs so that
   > >>>> you
   > will
   > >>>> read the NMEA string in between the PPS edges.
   > >>>> Rob
   > >>>>
   > >>>> On Wed, Mar 31, 2021 at 1:22 PM Rob Kossler 
<rkoss...@nd.edu<mailto:rkoss...@nd.edu>> wrote:
   > >>>>
   > >>>>> Hi Ofer,
   > >>>>> I don't know why the "gps_time" sensor takes long to read. But,
   > >>>>> can
   > you
   > >>>>> try the other sensors (perhaps there is a "gps_gpgga" sensor?)?
   > >>>>> The
   > time
   > >>>>> is embedded in these as well.
   > >>>>> Rob
   > >>>>>
   > >>>>>
   > >>>>> On Wed, Mar 31, 2021 at 12:21 PM Ofer Saferman
   > >>>>> <o...@navigicom.com<mailto:o...@navigicom.com>>
   > >>>>> wrote:
   > >>>>>
   > >>>>>> Marcus Hi,
   > >>>>>>
   > >>>>>> If the gps_time "sensor" returns a value only once per second
   > >>>>>> how
   > come
   > >>>>>> I manage to read it sometimes in less than 1 second?
   > >>>>>> In my code the situation is worse than the simple example
   > >>>>>> below. It usually takes more than 1 sec. to read it and
   > >>>>>> sometimes even 1.7 or
   > 1.8
   > >>>>>> seconds. I don't understand how the size or complexity of the
   > >>>>>> code
   > affects
   > >>>>>> the time it takes to read gps_time.
   > >>>>>>
   > >>>>>> How to treat your comment about the use of GPSD and good
   > >>>>>> synchronization as it relates to code?
   > >>>>>> Should I not change the time source in code and go through the
   > >>>>>> whole process of synchronization using gps_time?
   > >>>>>> Can I "assume" the systems are synced just by the effect they
   > >>>>>> were connected enough time to a GPS antenna? and then just
   > >>>>>> access their
   > time -
   > >>>>>> radio_ctrl->get_time_last_pps()?
   > >>>>>> How to use this information programmatically?
   > >>>>>>
   > >>>>>> Regards,
   > >>>>>> Ofer Saferman
   > >>>>>>
   > >>>>>>
   > >>>>>> ---------- Forwarded message ----------
   > >>>>>>> From: "Marcus D. Leech" 
<patchvonbr...@gmail.com<mailto:patchvonbr...@gmail.com>>
   > >>>>>>> To: usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>
   > >>>>>>> Cc:
   > >>>>>>> Bcc:
   > >>>>>>> Date: Wed, 31 Mar 2021 09:19:20 -0400
   > >>>>>>> Subject: [USRP-users] Re: Intermittent problem with GPS
   > >>>>>>> synchronization for multiple E310 units On 03/31/2021 06:49
   > >>>>>>> AM, Ofer Saferman wrote:
   > >>>>>>>> Hello,
   > >>>>>>>>
   > >>>>>>>> I have a system that uses 4 USRP E310 units.
   > >>>>>>>> Each unit is connected to a GPS antenna.
   > >>>>>>>> Time source is set to gpsdo.
   > >>>>>>>>
   > >>>>>>>> I run the same software remotely on all 4 units from a PC.
   > Software
   > >>>>>>>> runs on the units themselves.
   > >>>>>>>> I print out messages to show if the reference is locked and
   > >>>>>>>> the
   > GPS
   > >>>>>>> is
   > >>>>>>>> locked and also what is the GPS time that each unit was
   > >>>>>>> synchronized to.
   > >>>>>>>> In some cases the units synchronize to the same GPS time and
   > >>>>>>>> in
   > >>>>>>> other
   > >>>>>>>> cases there is 1 second difference between GPS time of
   > >>>>>>>> different
   > >>>>>>> units
   > >>>>>>>> thus causing the units to be unsynchronized.
   > >>>>>>>>
   > >>>>>>>> I was wondering how this was possible.
   > >>>>>>>> The synchronization process (documented by others in the past
   > >>>>>>>> on
   > >>>>>>> the
   > >>>>>>>> mailing list) is:
   > >>>>>>>> * Wait for ref and GPS lock
   > >>>>>>>> * Wait for a pps edge (get_time_last_pps)
   > >>>>>>>> * Read gps_time value
   > >>>>>>>> * Sync system clock to GPS clock on next PPS edge
   > >>>>>>> (set_time_next_pps +
   > >>>>>>>> 1.0 sec)
   > >>>>>>>>
   > >>>>>>>> Something similar is also implemented in the sync_to_gps example.
   > >>>>>>>>
   > >>>>>>>> In order to debug the problem I decided to time the reading
   > >>>>>>>> of the gps_time sensor to see if there is a clue why
   > >>>>>>>> different units miss
   > >>>>>>> the
   > >>>>>>>> PPS edge and lock to a time of the next second.
   > >>>>>>>>
   > >>>>>>>> I was very surprised to find out that it takes between 0.9 to
   > >>>>>>>> 1.2 seconds to read the gps_time sensor.
   > >>>>>>>> This explains exactly why it is difficult to synchronize
   > >>>>>>>> multiple units to the same time instance because if one unit
   > >>>>>>>> takes 0.9
   > >>>>>>> seconds
   > >>>>>>>> to read the sensor and the other unit takes 1.2 seconds to
   > >>>>>>>> read
   > the
   > >>>>>>>> sensor then each unit will lock on a different GPS time 1
   > >>>>>>>> second
   > >>>>>>> apart.
   > >>>>>>>>
   > >>>>>>>> Here is a short software I wrote to time the gps_time sensor
   > >>>>>>> reading:
   > >>>>>>>> ---------------------------------------------------------
   > >>>>>>>> #include <uhd/utils/safe_main.hpp> #include <uhd/device3.hpp>
   > >>>>>>>> //#include <uhd/usrp/multi_usrp.hpp> #include
   > >>>>>>>> <uhd/types/sensors.hpp> #include <boost/program_options.hpp>
   > >>>>>>>> #include <boost/format.hpp> #include <chrono> #include
   > >>>>>>>> <iostream>
   > >>>>>>>>
   > >>>>>>>> namespace po = boost::program_options;
   > >>>>>>>>
   > >>>>>>>> int UHD_SAFE_MAIN(int argc, char *argv[]){
   > >>>>>>>>
   > >>>>>>>> std::string args;
   > >>>>>>>>
   > >>>>>>>>     po::options_description desc("Allowed options");
   > >>>>>>>>     desc.add_options()
   > >>>>>>>>         ("help", "help message") ("args",
   > >>>>>>>> po::value<std::string>(&args)->default_value(""), "device
   > >>>>>>>> address args")
   > >>>>>>>>     ;
   > >>>>>>>>
   > >>>>>>>>     po::variables_map vm;
   > >>>>>>>>     po::store(po::parse_command_line(argc, argv, desc), vm);
   > >>>>>>>>     po::notify(vm);
   > >>>>>>>>
   > >>>>>>>>     //print the help message
   > >>>>>>>>     if (vm.count("help")){
   > >>>>>>>>         std::cout << boost::format("Timinig of gps_time: %s")
   > >>>>>>>> %
   > >>>>>>> desc
   > >>>>>>>> << std::endl;
   > >>>>>>>>         return ~0;
   > >>>>>>>>     }
   > >>>>>>>>
   > >>>>>>>> uhd::device3::sptr usrp = uhd::device3::make(args);
   > >>>>>>>> //uhd::usrp::multi_usrp::sptr usrp =
   > >>>>>>> uhd::usrp::multi_usrp::make(args);
   > >>>>>>>>
   > >>>>>>>> uhd::sensor_value_t gps_time =
   > >>>>>>>>
   > >>>>>>>
   > usrp->get_tree()->access<uhd::sensor_value_t>("/mboards/0/sensors/gps_
   > usrp->time").get();
   > >>>>>>>> //uhd::sensor_value_t gps_time =
   > >>>>>>> usrp->get_mboard_sensor("gps_time", 0);
   > >>>>>>>>
   > >>>>>>>> std::chrono::steady_clock::time_point start_time, end_time;
   > >>>>>>>> std::chrono::duration<double> time_diff; // Default unit for
   > >>>>>>> duration
   > >>>>>>>> is seconds.
   > >>>>>>>>
   > >>>>>>>> for(int ii=0 ; ii<20 ; ii++)
   > >>>>>>>> {
   > >>>>>>>> start_time = std::chrono::steady_clock::now(); gps_time =
   > >>>>>>>>
   > >>>>>>>
   > usrp->get_tree()->access<uhd::sensor_value_t>("/mboards/0/sensors/gps_
   > usrp->time").get();
   > >>>>>>>> //gps_time = usrp->get_mboard_sensor("gps_time", 0); end_time
   > >>>>>>>> = std::chrono::steady_clock::now(); time_diff = end_time -
   > >>>>>>>> start_time;
   > >>>>>>>>
   > >>>>>>>> std::cout << "gps_time[" << (boost::format("%02d") % ii) << "]: "
   > >>>>>>> <<
   > >>>>>>>> int64_t(gps_time.to_int()) << ". Time to read \"gps_time\": "
   > >>>>>>>> <<
   > >>>>>>>> (boost::format("%0.9f") % time_diff.count()) << " seconds" <<
   > >>>>>>> std::endl;
   > >>>>>>>> }
   > >>>>>>>>
   > >>>>>>>>     return 0;
   > >>>>>>>> }
   > >>>>>>>>
   > >>>>>>>
   > ----------------------------------------------------------------------
   > ----------
   > >>>>>>>> Here are the results of one typical run:
   > >>>>>>>> gps_time[00]: 1617183840. Time to read "gps_time":
   > >>>>>>>> 0.884164380
   > >>>>>>> seconds
   > >>>>>>>> gps_time[01]: 1617183841. Time to read "gps_time":
   > >>>>>>>> 0.877966469
   > >>>>>>> seconds
   > >>>>>>>> gps_time[02]: 1617183842. Time to read "gps_time":
   > >>>>>>>> 1.170869661
   > >>>>>>> seconds
   > >>>>>>>> gps_time[03]: 1617183843. Time to read "gps_time":
   > >>>>>>>> 0.882917987
   > >>>>>>> seconds
   > >>>>>>>> gps_time[04]: 1617183844. Time to read "gps_time":
   > >>>>>>>> 1.172120154
   > >>>>>>> seconds
   > >>>>>>>> gps_time[05]: 1617183845. Time to read "gps_time":
   > >>>>>>>> 0.879271985
   > >>>>>>> seconds
   > >>>>>>>> gps_time[06]: 1617183846. Time to read "gps_time":
   > >>>>>>>> 0.878609099
   > >>>>>>> seconds
   > >>>>>>>> gps_time[07]: 1617183847. Time to read "gps_time":
   > >>>>>>>> 1.115639282
   > >>>>>>> seconds
   > >>>>>>>> gps_time[08]: 1617183848. Time to read "gps_time":
   > >>>>>>>> 1.125365551
   > >>>>>>> seconds
   > >>>>>>>> gps_time[09]: 1617183849. Time to read "gps_time":
   > >>>>>>>> 0.843803231
   > >>>>>>> seconds
   > >>>>>>>> gps_time[10]: 1617183850. Time to read "gps_time":
   > >>>>>>>> 1.125065740
   > >>>>>>> seconds
   > >>>>>>>> gps_time[11]: 1617183851. Time to read "gps_time":
   > >>>>>>>> 0.847519817
   > >>>>>>> seconds
   > >>>>>>>> gps_time[12]: 1617183852. Time to read "gps_time":
   > >>>>>>>> 1.121398945
   > >>>>>>> seconds
   > >>>>>>>> gps_time[13]: 1617183853. Time to read "gps_time":
   > >>>>>>>> 0.844371533
   > >>>>>>> seconds
   > >>>>>>>> gps_time[14]: 1617183854. Time to read "gps_time":
   > >>>>>>>> 1.124722726
   > >>>>>>> seconds
   > >>>>>>>> gps_time[15]: 1617183855. Time to read "gps_time":
   > >>>>>>>> 0.845688380
   > >>>>>>> seconds
   > >>>>>>>> gps_time[16]: 1617183856. Time to read "gps_time":
   > >>>>>>>> 1.129568096
   > >>>>>>> seconds
   > >>>>>>>> gps_time[17]: 1617183857. Time to read "gps_time":
   > >>>>>>>> 0.882436229
   > >>>>>>> seconds
   > >>>>>>>> gps_time[18]: 1617183858. Time to read "gps_time":
   > >>>>>>>> 1.168227593
   > >>>>>>> seconds
   > >>>>>>>> gps_time[19]: 1617183859. Time to read "gps_time":
   > >>>>>>>> 0.881948247
   > >>>>>>> seconds
   > >>>>>>>>
   > >>>>>>>
   > ----------------------------------------------------------------------
   > -------------
   > >>>>>>>> In the code you can find commented out the usual way to
   > >>>>>>>> access the sensor using multi_usrp and get_mboard_sensor. The
   > >>>>>>>> results are
   > >>>>>>> quite
   > >>>>>>>> similar.
   > >>>>>>>>
   > >>>>>>>> I wonder if anybody encountered this issue before or
   > >>>>>>>> addressed it
   > >>>>>>> in
   > >>>>>>>> any way.
   > >>>>>>>> I wonder why it takes so much time to get the value of GPS
   > >>>>>>>> time
   > >>>>>>> when
   > >>>>>>>> it is a simple parsing of an NMEA message coming from the GPS
   > >>>>>>> receiver.
   > >>>>>>>>
   > >>>>>>>> I am trying now various tricks to make the software robust
   > >>>>>>>> and
   > >>>>>>> immune
   > >>>>>>>> to this phenomenon. I can report my findings further if I
   > >>>>>>>> succeed
   > >>>>>>> to
   > >>>>>>>> find a workaround if there is any interest.
   > >>>>>>>>
   > >>>>>>>> Can anyone comment on this? Can this be resolved so that the
   > >>>>>>> reading
   > >>>>>>>> of gps_time will be much faster?
   > >>>>>>>> Is there another way to get GPS time faster indirectly? Maybe
   > >>>>>>>> from parsing NMEA messages ourselves?
   > >>>>>>>>
   > >>>>>>>> Regards,
   > >>>>>>>> Ofer Saferman
   > >>>>>>>>
   > >>>>>>> This probably has to do with the way that particular "sensor"
   > >>>>>>> works--the
   > >>>>>>> NMEA time value is only emitted once per second, and the
   > >>>>>>>    code for that sensor has some heuristic for determining
   > >>>>>>> "freshness"
   > >>>>>>> of the value.
   > >>>>>>>
   > >>>>>>> I'll point out that on E310, the system is configured to use
   > >>>>>>> GPSD,
   > so
   > >>>>>>> that the Linux system time across several systems that have
   > >>>>>>> all
   > been
   > >>>>>>>    "listening" to GPS for a while will all be synchronized
   > >>>>>>> quite
   > well.
   > >>>>>>>
   > >>>>>>>
   > >>>>>>>
   > >>>>>>>
   > >>>>>> --
   > >>>>>> This message has been scanned for viruses and dangerous content
   > >>>>>> by *MailScanner* <http://www.mailscanner.info/>, and is
   > >>>>>> believed to be clean.
   > _______________________________________________
   > >>>>>> USRP-users mailing list -- 
usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To
   > >>>>>> unsubscribe send an email to 
usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>
   > >>>>>>
   > >>>>> _______________________________________________
   > >>>> USRP-users mailing list -- 
usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To
   > >>>> unsubscribe send an email to 
usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>
   > >>>>
   > >>>>
   > >>> --
   > >>> This message has been scanned for viruses and dangerous content by
   > >>> *MailScanner* <http://www.mailscanner.info/>, and is believed to
   > >>> be clean.
   > >>>
   > >>>
   > >> --
   > >> This message has been scanned for viruses and dangerous content by
   > >> *MailScanner* <http://www.mailscanner.info/>, and
   > is
   > >> believed to be clean.
   > >>
   > >>
   > >>
   > >
   > >
   > > _______________________________________________
   > > USRP-users mailing list -- 
usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To unsubscribe
   > > send an email to 
usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>
   > > _______________________________________________
   > USRP-users mailing list -- 
usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To unsubscribe
   > send an email to 
usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>
   >

   --
   This message has been scanned for viruses and dangerous content by 
MailScanner, and is believed to be clean.

   -------------- next part --------------
   A message part incompatible with plain text digests has been removed ...
   Name: not available
   Type: text/html
   Size: 27834 bytes
   Desc: not available

   ------------------------------

   Subject: Digest Footer

   _______________________________________________
   USRP-users mailing list -- 
usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> To unsubscribe 
send an email to 
usrp-users-le...@lists.ettus.com<mailto:usrp-users-le...@lists.ettus.com>


   ------------------------------

   End of USRP-users Digest, Vol 128, Issue 7
   ******************************************

_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to