Personally, when I first looked at code examples and the protocol, I was fairly confused. Terms like metis, ozy, alex etc. were all alien to me. I think it helps to understand that the HPSDR protocol 1 evolved from USB hardware and hardware modules associated with this. See
here if you haven't already.
As a result of this, a lot of the functions in code I found were named around these modules. Looking at the pihpsdr or linhpsdr code you will see it is not a simple library call to get the IQ, but once you study the code and understand it, it does make sense. It just takes effort.
There is an additional layer to add to this, the HPSDR protocol document talks in the control bytes C0, C1 etc. The HL2 protocol page you found present the address map slightly differently. I have a piece of paper with a hand drawn table to convert between the ADDR on the wiki and the C0 etc. bytes for my own quick reference.
I attempted to write some C++ code a few years ago that had some abstraction. I never finished it, but I have just uploaded my code here:
It might provide a starting point for you if you want to go down a C++ route. I adapted the code for this:
Again, I am only suggesting this for reference, not as a finished product/library. I must credit (and do in my code/licence)
N5EG for a lot of this code. You will also notice N5EG used some C code from G0ORX too.
I'm not sure if the HL2 watchdog timer is on by default in gateware now, but if it isn't, I tripped up by not sending a steady stream of packets to the HL2 and stopped get IQ data.
Good luck and don't expect working code in 5 minutes.
73 Matthew M5EVT.