Welcome to the new FlexRadio Community! Please review the new Community Rules and other important new Community information on the Message Board.
If you are having a problem, please refer to the product documentation or check the Help Center for known solutions.
Need technical support from FlexRadio? It's as simple as Creating a HelpDesk ticket.

Help required for SDC Skimmer for Flex

This is a question directed primarily to the Flex developers and/or experts in the Flex API. The reason for the question is to help with the development of Flex compatible software.

Yuri UT4LW is developing SDC to more closely integrate the SDC Skimmer with Flex. Already the SDC Skimmer has many advantages over the VE3NEA skimmer. One of the most important features of SDC, when working with the TCI protocol (Anan, Expert Electronics) is 599 to Panorama.

599 to Panorama tracks stations sending 599 when they are being worked by a DX Station. This shows you on screen where the DX Station is listening. A marker can be defined instead of 599 and enabling both new and old, with different markers, will show graphically how the DX Station is working the pile – moving up or down or random. You will easily anticipate where to call to get your QSO quickly.


An example of usage of SDC with TCI. I was calling and have just worked 6O6O, and made the QSO thanks to SDC sending 599 to the Panorama when the station worked before me sent his report thus showing me where the 6O was listening. This feature helps bust even the largest CW pile-ups.

A beta version of SDC now has this feature implemented. However, it does not work like it does with the TCI protocol. In the SDR software that uses TCI, a new instance of 599 erases the old one. With Flex the old one remains which makes identifying the newest instance a challenge. In TCI, when a DX Spot is sent to the radio for display on the panorama, any previous instance of it is erased. With Flex, I believe anyway, this does not happen. Especially in contests I see multiple Spots on different frequencies for the same station on the Flex panorama.

So, the question: is there or can there be a solution for this? So that a new Spot instance (and ‘599’ is actually just a Spot too) removes any pre-existing instance.

On another tack, I see that right-clicking a Spot allows for a menu to show from which the Spot can be deleted. So, is there an API command that can delete duplicates?

Just as an illustration of SDC beta 599 feature working as it is now, here is an example from the C5C Dxpedition.


The 599 entries with ‘?’ are old ones, the newest is where RA3SS was just worked. The signal HF of him is a station now calling C5C and who works him. A new ‘599’ appeared there and I then called just HF of that for my QSO.

Because of the issue described above, with the new 599 not erasing the last one, the screen gets complicated.


Although this gives a good indication of how high up the band the DXpedition is listening and working stations, it is not easy to identify the new position in the pile that someone is being worked. Therefore, Yuri would like some assistance please if at all possible. 


Thank you de Erik EI4KF.

«13

Answers

  • Alan
    Alan Member ✭✭✭✭

    You asked, "So, the question: is there or can there be a solution for this? So that a new Spot instance (and ‘599’ is just a Spot too) removes any pre-existing instance."

    I assume you want to replace an existing spot with an updated spot. Could you use the "Modify an existing spot using the spot index." command? All sites have an index number; simply edit the spot's index number. You will need to keep track of the index numbers in your code.



    Link to the API WiKi on Spots:


    Alan. WA9WUD

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Erik, in addition to what Alan said, the spots can also be set to time-out after a preset number of seconds. I use this technique to post "out of band" spots when tuning past band edges. I think I used a 5 second timeout on mine.

    This technique might be easier to implement, but is probably not as elegant as what Yuri is trying to do.

    To go the more elegant route, look at the Remove command. If the same index is always used to create a spot, that same index can be used to remove the old one and should serve to keep only one 599 spot active at a time. The index chosen needs to be one that is not likely to occur naturally.

    I am not at my computer right now, so I can't test this, but I think that will work.

  • Erik Carling EI4KF
    Erik Carling EI4KF Member ✭✭✭

    Alan and Len: OK, thank you for taking the time to provide insight into possible solutions. Yuri will see these answers and may have additional questions. He also has to deal with other things and may not be able to respond personally. All help towards SDC, which will in turn enhance the Flex experience on CW, is though very gratefully received.

  • UT4LW
    UT4LW Member ✭✭
    Thanks for the help.
    I didn't use the SmartSDR-API to issue a spot, but did it through the SDR-Bridge program.
    At this time, it is difficult for me to develop SDC-SmartSDR-API interaction without a transceiver.
    SmartSDR-API question: how can I get the receiver frequency (VFOA/VFOB...) and the base frequency of the IQ stream?
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, send the sub pan all command to the API. Parse for display pan and within that status, parse for center= to get the panadapter center frequency in MHz. The panadapters are numbered starting at 0x40000000, so subtract this value from the value in the status to get the panadapter number.

    Here is an example of what the API returns in response to the sub pan all command when only one panadapter is open:

    S17011171|display pan 0x40000000 client_handle=0x5ED130E6 wnb=1 wnb_level=34 wnb_updating=0 band_zoom=0 segment_zoom=0 x_pixels=1355 y_pixels=498 center=14.018500 bandwidth=0.100000 min_dbm=-131.78 max_dbm=-66.77 fps=24 average=70 weighted_average=0 rfgain=0 rxant=ANT1 wide=0 loopa=0 loopb=0 band=20 daxiq_channel=1 waterfall=0x42000000 min_bw=0.004920 max_bw=7.372800 xvtr= pre= ant_list=ANT1,ANT2,RX_A,XVTA

    If the pan or waterfall is scrolled left or right, you will get:

    S5ED130E6|display pan 0x40000000 center=14.017910

    S5ED130E6|display waterfall 0x42000000 center=14.017910

    You will get a status of display pan any time you subscribe or change anything related to the panadapter. In your case, it is the center= that you are looking for. Changes to the panadapter that do not affect the center frequency will not bring back a center=.

  • UT4LW
    UT4LW Member ✭✭
    Thank you, Len! This is a very interesting information!
  • UT4LW
    UT4LW Member ✭✭

    I have the ability to connect to Flex remotely. Can I use SmartSDR TCP/IP API in this mode?

    Where is the SmartSDR TCP/IP API server located?

  • Alan
    Alan Member ✭✭✭✭

    The Flex Radio is the Server

    Alan. WA9WUD

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, yes you can. I have a device (TeensyMaestro) that I connect to the API remotely. I do not understand how to use SmartLink for this, so I use the SoftEhter VPN to connect to my home QTH.

    Here is a diagram of my set up:


  • UT4LW
    UT4LW Member ✭✭

    Thanks for answers!

    I can't find answers to questions like:

    1. How can I specify the parameters (samplerate) and initiate the transmission of an IQ stream over a UDP connection?
    2. What is the structure of datagramm stream in UDP?
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, the UDP data uses the Vita 49 protocol. I am afraid I do not know much more than that about the UDP stream from the radio.

  • Erik Carling EI4KF
    Erik Carling EI4KF Member ✭✭✭

    Hi Yuri, you may already know all this in which case sorry, just providing some links in case they help

    SmartSDR v2.x API (FlexLib) – FlexRadio for the API library

    Developer Program – FlexRadio for the developer program from which I believe you can get direct answers from Flex when needing help with software development.

    Erik.

  • UT4LW
    UT4LW Member ✭✭

    Len, Erik, thank you!

    It is very difficult to understand the pieces of other people's programs.

    Where can I see the full description of the "sub daxiq" command?

  • Erik Carling EI4KF
    Erik Carling EI4KF Member ✭✭✭

    Hi Yuri, doubtless Len is your man with the knowledge but have you seen this?

    TCPIP sub · flexradio/smartsdr-api-docs Wiki · GitHub

    Erik

  • UT4LW
    UT4LW Member ✭✭

    Erik, of course I saw. But this is not enough. In addition, this instruction contains commands that do not work.

  • Erik Carling EI4KF
    Erik Carling EI4KF Member ✭✭✭

    Ok sorry. Maybe Len can answer. Otherwise contact to Flex direct might be best. There is a thread on here that describes some of those errors and their corrections TCP/IP API commands to manipulate RIT and XIT? — FlexRadio Community but you will need to know more than that provides.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, yes the Wiki has some errors in it. I played around, and figured out the command: sub daxiq all.

    The documentation has an underscore in the command name. I am afraid that I don't know how the DAX and DAXIQ commands work.

    Here is what I get when I subscribe to daxiq:

    S69AE8D45|stream 0x20000000 type=dax_iq daxiq_channel=1 pan=0x40000000 daxiq_rate=48000 client_handle=0x295395F6 active=1 ip=192.168.0.24
    S69AE8D45|radio daxiq_capacity=16 daxiq_available=14
    S69AE8D45|stream 0x20000001 type=dax_iq daxiq_channel=2 pan=0x0 daxiq_rate=48000 client_handle=0x295395F6 active=1 ip=192.168.0.24
    S69AE8D45|radio daxiq_capacity=16 daxiq_available=14
    R78|0||
    

    I believe that the IQ data then arrives by UDP in the Vita 49 protocol.

  • UT4LW
    UT4LW Member ✭✭

    Len, thanks! I wrote in support, I expect an answer.

    Question: Is it possible to subscribe to the Smartsdr TCP API to receive the mailing list of the main sets of the receiver:

    RX frequency,

    TX frequency,

    Split

    ?

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, you would do a sub slice to get that information.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Oh, I should mention that pressing the Split button in the SmardSDR screen or Maestro just opens a second slice and sets it to TX and active status. Nothing about it being split comes back from the API. The Split button just automates the actions needed use the rig in split mode.

  • UT4LW
    UT4LW Member ✭✭

    Ok, thanks, Len! I hope that in the text of the notification I will find the parameters I need.

    The next question: what commands I can change the frequency, split... of the receiver?

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    HI Yuri, it is the tune command in the slice.

    TCPIP slice · flexradio/smartsdr-api-docs Wiki (github.com)

    You will need to know which slice in the split that you want to control, so you will have to put some thought as to how you are keeping track of everything. If you expect the user to enter split using the split button in SmartSDR or a Maestro, then the active slice (with TX set) is the one to control.

  • UT4LW
    UT4LW Member ✭✭

    Len, thank you very much. You give links to useful information!

  • UT4LW
    UT4LW Member ✭✭

    Next question))

    How can I find out about enabling/disabling slice? Is there such a "sub" to subscribe to?

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, it is done by subscribing to all slices (sub slice all). Slices are not enabled/disabled, they either exist or not. There is an in_use parameter that defines whether a slice is open (exists) and an active parameter that determines which slice has focus, and therefore is the subject of mouse-wheel tuning and that kind of thing.

    In the radio status, slices=1 means that there is one slice left (I have a 6400). The next time you see a block of radio statuses, slice=0 meaning that I have no more slices that can be opened because I just opened my last slice (slice 1).

    When only one slice was open, it shows as active=1. When I opened a new slice, slice 0 shows as active=0 and slice 1 shows up with in_use=1 and active=1.

    V1.4.0.0
    H02735DA9
    M10000001|Client connected from IP 192.168.0.24
    S2735DA9|radio slices=1 panadapters=1 lineout_gain=100 lineout_mute=0 headphone_gain=100 headphone_mute=0 remote_on_enabled=1 pll_done=0 freq_error_ppb=-2 cal_freq=2.500000 tnf_enabled=1 snap_tune_enabled=1 nickname=Len.6400 callsign=KD0RC binaural_rx=1 full_duplex_enabled=0 band_persistence_enabled=1 rtty_mark_default=2125 enforce_private_ip_connections=0 backlight=3 mute_local_audio_when_remote=1 daxiq_capacity=16 daxiq_available=14
    S2735DA9|radio filter_sharpness VOICE level=2 auto_level=1
    S2735DA9|radio filter_sharpness CW level=3 auto_level=0
    S2735DA9|radio filter_sharpness DIGITAL level=0 auto_level=0
    S2735DA9|radio static_net_params ip= gateway= netmask=
    S2735DA9|radio oscillator state=external setting=auto locked=1 ext_present=1 gpsdo_present=0 tcxo_present=0
    S2735DA9|interlock acc_txreq_enable=0 rca_txreq_enable=0 acc_tx_enabled=1 tx1_enabled=1 tx2_enabled=1 tx3_enabled=1 tx_delay=0 acc_tx_delay=0 tx1_delay=0 tx2_delay=0 tx3_delay=0 a
    cc_txreq_polarity=0 rca_txreq_polarity=0 timeout=0
    S2735DA9|eq rx mode=1 63Hz=0 125Hz=8 250Hz=8 500Hz=10 1000Hz=13 2000Hz=13 4000Hz=10 8000Hz=0
    S2735DA9|eq rxsc mode=1 63Hz=-10 125Hz=-2 250Hz=-2 500Hz=0 1000Hz=3 2000Hz=3 4000Hz=0 8000Hz=-10
    
    S2735DA9|slice 0 in_use=1 sample_rate=24000 RF_frequency=14.188000 client_handle=0x3E53ED3B index_letter=A rit_on=0 rit_freq=0 xit_on=0 xit_freq=0 rxant=ANT1 mode=USB wide=0 filter_lo=200 filter_hi=2700 step=100 step_list=1,10,50,100,500,1000,2000,3000 agc_mode=med agc_threshold=33 agc_off_level=10 pan=0x40000000 txant=ANT1 loopa=0 loopb=0 qsk=0 dax=1 dax_clients=1 lock=0 tx=1 active=1 audio_level=32 audio_pan=50 audio_mute=1 record=0 play=disabled record_time=0.0 anf=1 anf_level=17 nr=1 nr_level=14 nb=0 nb_level=50 wnb=1 wnb_level=0 apf=0 apf_level=0 squelch=1 squelch_level=20 diversity=0 diversity_parent=0 diversity_child=0 diversity_index=1342177293 ant_list=ANT1,ANT2,RX_A,XVTA mode_list=LSB,USB,AM,CW,DIGL,DIGU,SAM,FM,NFM,DFM,RTTY,RAW,ARQ fm_tone_mode=OFF fm_tone_value=67.0 fm_repeater_offset_freq=0.000000 tx_offset_freq=0.000000 repeater_offset_dir=SIMPLEX fm_tone_burst=0 fm_deviation=5000 dfm_pre_de_emphasis=0 post_demod_low=300 post_demod_high=3300 rtty_mark=2125 rtty_shift=170 digl_offset=2210 digu_off
    set=1500 post_demod_bypass=0 rfgain=8 tx_ant_list=ANT1,ANT2,XVTA
    S2735DA9|waveform installed_list=
    R21|0||
    
    S0|interlock tx_client_handle=0x00000000 state=READY reason= source= tx_allowed=1 amplifier=
    
    S3E53ED3B|slice 0 active=0
    
    S3E53ED3B|radio slices=0 panadapters=1 lineout_gain=100 lineout_mute=0 headphone_gain=100 headphone_mute=0 remote_on_enabled=1 pll_done=0 freq_error_ppb=-2 cal_freq=2.500000 tnf_enabled=1 snap_tune_enabled=1 nickname=Len.6400 callsign=KD0RC binaural_rx=1 full_duplex_enabled=0 band_persistence_enabled=1 rtty_mark_default=2125 enforce_private_ip_connections=0 backlight=3 mute_local_audio_when_remote=1 daxiq_capacity=16 daxiq_available=14
    S3E53ED3B|radio filter_sharpness VOICE level=2 auto_level=1
    S3E53ED3B|radio filter_sharpness CW level=3 auto_level=0
    S3E53ED3B|radio filter_sharpness DIGITAL level=0 auto_level=0
    S3E53ED3B|radio static_net_params ip= gateway= netmask=
    S3E53ED3B|radio oscillator state=external setting=auto locked=1 ext_present=1 gpsdo_present=0 tcxo_present=0
    
    S3E53ED3B|slice 1 in_use=1 sample_rate=24000 RF_frequency=14.250700 client_handle=0x3E53ED3B index_letter=B rit_on=0 rit_freq=0 xit_on=0 xit_freq=0 rxant=ANT1 mode=USB wide=0 filter_lo=200 filter_hi=2700 step=100 step_list=1,10,50,100,500,1000,2000,3000 agc_mode=med agc_threshold=33 agc_off_level=10 pan=0x40000000 txant=ANT1 loopa=0 loopb=0 qsk=0 dax=0 dax_clients=0 lock=0 tx=0 active=1 audio_level=32 audio_pan=50 audio_mute=0 record=0 play=disabled record_time=0.0 anf=1 anf_level=17 nr=1 nr_level=14 nb=0 nb_level=50 wnb=1 wnb_level=0 apf=0 apf_level=0 squelch=1 squelch_level=20 diversity=0 diversity_parent=0 diversity_child=0 diversity_index=1342177293 ant_list=ANT1,ANT2,RX_A,XVTA mode_list=LSB,USB,AM,CW,DIGL,DIGU,SAM,FM,NFM,DFM,RTTY,RAW,ARQ fm_tone_mode=OFF fm_tone_value=67.0 fm_repeater_offset_freq=0.000000 tx_offset_freq=0.000000 repeater_offset_dir=SIMPLEX fm_tone_burst=0 fm_deviation=5000 dfm_pre_de_emphasis=0 post_demod_low=300 post_demod_high=3300 rtty_mark=2125 rtty_shift=170 digl_offset=2210 digu_of
    fset=1500 post_demod_bypass=0 rfgain=8 tx_ant_list=ANT1,ANT2,XVTA
    


  • UT4LW
    UT4LW Member ✭✭

    O-o-o-o... )))

    I managed to start a skimmer to the IQ stream through the UDP port!

    Command: Stream Create Daxiq 1 Port = 4995

    I can't change Sampl Rate. Only 48 KHZ is available.

    Which command can I increase Sample Rate?

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Yuri, See this thread for more information. It is not much, but might help. My knowledge here is not very good...


  • K1FR
    K1FR Member ✭✭

    Yuri: I did a simple excel sheet summarizing what I found with WireShark for the dax_iq VITA format. Seems to match what my radio does. See attached. Please recognize this is a work in progress, I am no expert, and there may well be some errors.

    73, Tom K1FR


  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Nicely done, Tom!

  • K1FR
    K1FR Member ✭✭

    Thanks, Len.

    Well, I now have my client working well and changing the sample rate as desired from 24 to 192 ksps. No, nothing I was able to figure out on my own.

    The secret is the v3.x Migration Guide document at https://docs.google.com/document/d/1TFmsFOUarZg0LCLfZ9Jf292GpqfLRErib9Oe6WzAT5w/edit#heading=h.12pvw3sysa7x.

    Yuri: look for the new dax iq commands on page 7. They work fine.

    73, Tom K1FR

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.