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.

Flex Repeater Spots Utility

KD0RC
KD0RC Member, Super Elmer Moderator

I find myself using my Flex 6400 more and more with FM repeaters. It is sooo much better to see what is happening on the band instead of tuning around or scanning. It is also way cool to be able to listen to a repeater input and output simultaneously (or alternately using the slice mute buttons). This is really nice for net control stations. You can often hear stations that can't hit the repeater, but are close enough to relay in from the input frequency (handheld in a basement syndrome). You can also spot off-frequency stations with the panadapter.

The only drawback is that when you tune to a repeater, you may not hit the exact frequency, and all of the FM options will be for whatever you did last. The memories in the radio work great to overcome this, but you have to read through them to find the one you want. Not terrible, but not great when you want to click and go.

A partial solution is to add "permanent" spots (i.e. they don't time out like DX spots). I did this with my TeensyMaestro which gets me to the right frequency and tells me the name of the repeater, but it does not set the options (offset, tone, etc.).

Here is a view of the utility that you start and forget once you have the repeater entries in the config file:

This utility uses a Config file to set spot frequency, spot name and all of the FM options. Click a repeater spot and the active slice goes to that frequency and all of the FM options are set automagically. As I find more repeaters, I just add them to the config file. I also add them to the memory screen, but that is not necessary for the utility to operate.

Here is a sample line from the file:

Spot: freq=53.090 name=W0TX_DRC_090 offset=1.00 repeater=down tone_mode=CTCSS_TX tone_val=107.2 squelch=ON squelch_lvl=40

To get the utility, go to the GitHub link below and select the latest release (FlexRepeaterSpots V1.0 as of this post). Extract all from the zip file and execute setup.exe. The utility will start, create the necessary folder and populate it with a fresh Config.ini file with a sample spot in it. Anytime the utility starts without a config file, it will create a new one and open it in notepad.

I also put the config file that I am currently using on GitHub so that you can get an idea of what you can do. You can build your own entries into the file or copy mine in and use it as a starting point.

The utility also has the ability to optionally warn you of out of band operation. I won't get into that in this post, but if you load my Config.ini file, the entries are there to make it work. Go to File, Options, and click Out Of Band Indicator.


I have a user manual under way and hope to have it ready for GitHub in the next week or so (timing will depend on skiing conditions... ) . 😁

Give it a try and let me know what you think.


«1

Comments

  • Jeff U.
    Jeff U. Member
    Just wanted to say thank you for putting this out there. I just got my 2m transverter up and running with my 6400 last weekend. I googled flex spots for repeaters and BOOM! there you were. Anyway, it's working great. The only improvement suggestion I have would be to give it a custom icon. Then I could use that for my button that launches it on my Stream Deck.
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks Jeff, I appreciate it!

    I agree about the icon. I should have something ready in the next day or two. It has been a loooong time since I created an icon for an app. The tools have changed dramatically since then! (think DOS 4.0 and Windows 3 timeframe...)

    I got busy on other projects and never put out the user guide, so I will make that a priority as well.

  • KD0RC
    KD0RC Member, Super Elmer Moderator
    edited March 3

    FlexRepeaterSpots V1.01 is now available on GitHub:

        // ***********************************************************************
        // V1.01
        // Added an icon
        // Added mode= to config file to allow setting any valid Flex mode
        // Updated out of band checking to account for signal width
        // Added comment and timestamp to spots
        // ***********************************************************************
    

    The user manual is partially complete, but I included it anyway. I hope to have it finished soon.

    Thanks for the suggestion to add an Icon Jeff! Let me know if this works OK with your StreamDeck.

  • WX7Y
    WX7Y Member ✭✭✭✭

    Hi Len, Just tried your Repeater Spots and it work pretty slick

    Thanks and I will see what else I can do with it, so far I have all the Repeaters I can hit, 2Meter SSB Net frequencies, and HF Nets just for a test which was just a test to see how it would work to put in some Band edges on the Pan adapter for the HF Bands.

    Thanks and I'll continue to test

    Bret

    WX7Y

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks Bret, I'm glad it is working for you! Turn on the Out Of Band indicator and let me know how that works for you (File, Options, Out Of Band Indicator). Setting band edges in concert with the OOB indicator should be a killer combo.

  • WX7Y
    WX7Y Member ✭✭✭✭

    Wow Len, I turned on and Enabled the Band edge option and it is GREAT I think you hit it out of the park on this one.

    I appreciate it very much much

    73

    Bret

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks Bret!

  • Alan
    Alan Member ✭✭✭✭

    Len

    Nice App.

    Question, I have not been able to configure my Flex Spot command to "trigger" an action. Evendently, you have been successful.

    Here is the API description for "Trigger_Action" in the spot command:

    <trigger_action>   = Optional. Determines what to do when the spot is triggered (clicked on).  Set to Tune (default, radio tunes active or closest Slice in the Panadapter, or creates
    one if necessary, to the spot rx_freq) or None (no effect by the radio, client may implement custom behavior).
    

    Question, I assume you are using this option. How are you setting up the trigger action?

    Alan. WA9WUD

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks, Alan, I appreciate it!

    Well, I am using C# and FlexLib with .net in this app, so I am not sure about how to use the text-based API directly in this case. Here is a glimpse into the RadioAdded event:

      private void API_RadioAdded(Radio radio)
        {
          _thisRadio = radio;
    
          SerNum = radio.Serial;
    
          // The properties, such as Nickname and Callsign, can't be read
          // successfully until you've received a PropertyChanged event
          // for that property... this is done after connect.
    
          radio.PropertyChanged += new PropertyChangedEventHandler(radio_PropertyChanged);
          radio.SliceAdded += new Radio.SliceAddedEventHandler(radio_SliceAdded);
          radio.SliceRemoved += new Radio.SliceRemovedEventHandler(radio_SliceRemoved);
          radio.PanadapterAdded += new Radio.PanadapterAddedEventHandler(radio_PanAdded);
          radio.SlicePanReferenceChange += new Radio.SlicePanReferenceChangeEventHandler(radio_PanRefChg);
          radio.VoltsDataReady += new Radio.MeterDataReadyEventHandler(_thisRadio_VoltsDataReady);
          radio.PATempDataReady += new Radio.MeterDataReadyEventHandler(_thisRadio_PATempDataReady);
          radio.GUIClientAdded += new Radio.GUIClientAddedEventHandler(_thisRadio_GUIClientAdded);
          radio.GUIClientUpdated += new Radio.GUIClientUpdatedEventHandler(_thisRadio_GUIClientUpdated);
          radio.GUIClientRemoved += new Radio.GUIClientRemovedEventHandler(_thisRadio_GUIClientRemoved);
          radio.MessageReceived += new Radio.MessageReceivedEventHandler(_thisRadio_MessageReceived);
          radio.SpotTriggered += new Radio.SpotTriggeredEventHandler(_thisRadio_SpotTriggered);
           
          radio.Connect();
    

    Here is the SpotTriggeredEventHandler:

        private void _thisRadio_SpotTriggered(Spot spot)
        {
          selSpotName = spot.Callsign;
          SpotTriggered = true;
          setFMOptions(); // Allows clicking a spot that you are already on
          SpotTriggered = true;
    
          form1.txtDebug.Text += "Spot: " + ((float)spot.RXFrequency) + NL;
          form1.txtDebug.Text += "Client: " + _thisRadio.BoundClientID + NL;
        }
    

    And finally, setting the options:

        private void setFMOptions()
        {
          form1.txtDebug.Text += "SpotTriggered: " + SpotTriggered + NL;
          if (SpotTriggered)
          {
            if(_thisRadio.ActiveSlice == null)
            {
              return;
            }
    
            for (int i = 0; i < spotIDX; i++)
            {
              if (_thisRadio.ActiveSlice.Freq == spotFreq[i] && spotName[i] == selSpotName)
              {
                _thisRadio.ActiveSlice.DemodMode = spotMode[i];
    
                if (spotMode[i] == "FM" || spotMode[i] == "NFM" || spotMode[i] == "DFM")
                {
                  _thisRadio.ActiveSlice.RepeaterOffsetDirection = spotOffsetDirection[i];
                  _thisRadio.ActiveSlice.FMRepeaterOffsetFreq = spotRepeaterOffset[i];
                  _thisRadio.ActiveSlice.ToneMode = spotToneMode[i];
                  _thisRadio.ActiveSlice.FMToneValue = spotToneValue[i];
                  _thisRadio.ActiveSlice.SquelchOn = spotSquelchOn[i];
                  _thisRadio.ActiveSlice.SquelchLevel = spotSquelchLevel[i];
                }
               
              }
            }
    
            SpotTriggered = false;
          }
        }
    


    FlexLib makes things really easy if you can do your coding for the Windows .net environment. Probably not too useful for Node Red or Linux platforms. Hopefully, this was helpful.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    FlexRepeaterSpots V1.02 is now available on GitHub:

        // ***********************************************************************
        // V1.02
        // Added out of band for 60 meters
        // Added Restart button
        // Added restart message after editing Config.ini
        // ***********************************************************************
    

    I added a restart button to make it easy to apply changes when the Config.ini file is edited. If you edit the Config file by clicking the menu item, it gives you a message that you need to click the restart button before the changes take effect.

  • WX7Y
    WX7Y Member ✭✭✭✭

    Works good here and I like the "Restart Button"

    Thanks Len

    WX7Y, Bret

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Cool, thanks Bret!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    FlexRepeaterSpots V1.03 is now available on GitHub:

        // ***********************************************************************
        // V1.03
        // Added code to prevent multiple instances from opening
        // Changed Restart Button background color to red if a restart is needed
        // Added error messages for missing freq= and name= parameters
        // Fixed issue where invalid mode causes DIGU to be selected
        // ***********************************************************************
    

    No real functional changes, just a bit of clean-up.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    FlexRepeaterSpots V1.04 is now available on GitHub:

        // ***********************************************************************
        // V1.04
        // Fixed bug where tone_mode= and mode= get confused (Thanks Jeff, K5LLM!)
        // Fixed bug where mode = had to be specified (Thanks again Jeff, K5LLM!)
        // Simplified some code (parsing tone_val=)
        // ***********************************************************************
    

    A big thanks to Jeff, K5LLM for finding a couple of bugs!

    I was checking the config file array for the mode instead of the mode that the radio is actually in. So if you didn't have the "mode=" parameter set, it didn't set the options. DOH!

    The "mode=" parameter will change the radio's mode if different from the current radio mode. This is handy if you have spots for SSB or CW frequencies as well as for FM simplex and repeater frequencies. If you leave the "mode=" parameter off, the radio will stay in whatever mode it was in.

    The C# source code is on GitHub for anyone who wants to learn more about FlexLib.

  • Martin Bérubé
    Martin Bérubé Member ✭✭
    edited March 8

    I have developed an easy way to convert the flex memory channels into spot statements of the utility.

    Using notepad++ you can edit the csv file of your latest config backup and perform a replace with the following regular expressions:

    Find what: MEMORY,[^,]*,[^,]*,(\d+.\d{3})\d+,(\S+)?,(\S+),\d+,(UP|DOWN|SIMPLEX),0.(\d{3})\d+,([^,]*),(\d+)(?:\.|,)(\d+)\s?,\d+,.

    Replace with: Spot: freq=$1 name=$2 mode=$3 offset=\.$5 repeater=$4 tone_mode=$6 tone_val=$7\.$8 squelch=ON squelch_lvl=20 


    Make sure to select "Regular expression" int he Search Mode section.

    73, Martin

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Very cool, Martin! I was thinking about having an option in the Config file that would turn memory into spots.

  • WX7Y
    WX7Y Member ✭✭✭✭
    edited March 9

    Martin, I must be doing something wrong I had ZERO replacements using your find and replace data strings.

    Len, a Memory button import would be great

    Thanks

    Bret/wx7y

  • Martin Bérubé
    Martin Bérubé Member ✭✭

    Bret,

    Can you send me a sample of your memory file? you can send it to ve2nmb@gmail.com. Since my environment is in french, this might impact how my file is formatted.


    73, Martin VA2PX

  • WX7Y
    WX7Y Member ✭✭✭✭

    martin do you have a direct email to send the file

    thanks for the offer

    Bret

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Bret, Martin listed his email as:

    ve2nmb@gmail.com

    I have a memory option working. I have one more little thing to do and it will be done.

    There will be a config file option called SpotMem: that can be ON to turn memory into spots or OFF to ignore memory.

    On or off, the other spot entries will still work, so you can have some in memory and some in the config file.

    I should have it available tomorrow morning sometime (too late this evening for an old frt like me...).

  • WX7Y
    WX7Y Member ✭✭✭✭

    thanks Len, I'll stand by to test if you need me to

    Bret

  • Martin Bérubé
    Martin Bérubé Member ✭✭
    edited March 9

    Hi Bret,

    Got your email. I have found out that my regex was a little to strict when capturing some strings, especially the memory name. I have tried the regex below against your file and this time it replaced all the entries.

    As for the frequency, I initially capture only 3 digit after the dot. I noticed some of your memories have more than non 0 digits. I have corrected that. I also added a pattern that should cover UHF offset.

    Find what:  MEMORY,[^,]*,[^,]*,(\d+.\d{3}[^0]*)\d+?,([^,]*)?,([^,]*),\d+,(UP|DOWN|SIMPLEX),0?((?:\.\d{3})|\d{4})\d+?,([^,]*),(\d+)(?:\.|,)(\d+)\s?,\d+,.*

    Replace with: Spot: freq=$1 name=$2 mode=$3 offset=$5 repeater=$4 tone_mode=$6 tone_val=$7\.$8 squelch=ON squelch_lvl=20 

    EDIT: It look like I can't edit my previous message. Please disregards the regex in that message.

    Len, if this regex can help you in any way with your your memory button, go right ahead and use it.

    73, Martin

  • Martin Bérubé
    Martin Bérubé Member ✭✭

    Hi Bret,

    It should work with these statements now:


    Find what: MEMORY,[^,],[^,]*,(\d+.\d{3}[^0]*)\d+?,([^,]*)?,([^,]*),\d+,(UP|DOWN|SIMPLEX),0?((?:\.\d{3})|\d{4})\d+?,([^,]*),(\d+)(?:\.|,)(\d+)\s?,\d+,.


    Replace with: Spot: freq=$1 name=$2 mode=$3 offset=$5 repeater=$4 tone_mode=$6 tone_val=$7\.$8 squelch=ON squelch_lvl=20 


    73, martin VAPX

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks Martin, I appreciate it!

    In my program (C#, .net, FlexLib), I have direct access to all the fields in memory so I capture them directly from the radio when the program starts. If the SpotMem parameter is ON, then I create the spots.

    I saw your homebrew 10 MHz GPSDO on your QRZ page - very cool!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    FlexRepeaterSpots V1.05 is now available on GitHub:

        // ***********************************************************************
        // V1.05
        // Fixed to accommodate spot lengths greater than 16 chars
        // Fixed issue with comments (;)
        // Added feature to optionally turn memory into spots
        // Added "tone_val=0" and "tone_val=0.0" as legal values to blank tone in the flag
        // ***********************************************************************
    

    To get memory spots, add the following line to your COnfig.ini file:

    SpotMem: ON ; ON = use Memory to set spots. Spot: entries will also be used.

    If you don't want memory spots, leave the line out, comment it out with a ";" or set it to OFF.

    Note that if a Flex memory name is exactly the same name and frequency as a spot in the config file, you will only show one spot. If the names are at all different, you will get two spots on the same frequency. Since the spots set in memory happen first in the program, the duplicates in the Spot: lines in the config file come in after and overwrite them. In other words, the Spot: entries trump the memory spots in the case of duplicates.

    Thanks to Martin and Bret - your conversation here prompted me to go ahead with the memory spots!

  • Martin Bérubé
    Martin Bérubé Member ✭✭

    Hi Len,

    I've just tried your new version. I have commented all the spot statements and added the SpotMem: one. It works very well here. very cool.

    As for the homebrew GPSDO, this guy deserve all the merit of it. https://www.youtube.com/@ElectroBidouilleur

    I just followed and constructed his project.


    73, Martin VA2PX

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Merci Martin, I'm glad it is working!

  • WX7Y
    WX7Y Member ✭✭✭✭

    Got it all going and works great, nice to be a out looker to some really smart guys who share their knowledge

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks Bret, I really appreciate it!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Thanks Chandler, W7BYU for finding an error in my 60 meter out of band frequencies for USB. I was 100 Hz low on the high cut side. Here are the replacement values for 60 meters. Replace this section of your Config.ini file. I will update GitHub with the corrected file once a few people can validate these changes.

    60A CW:     5331899,  5332101,  5331899,  5332101,  5331899,  5332101,     0,     0,     0,     0
    60A PHONE:  5330499,  5333501,  5330499,  5333501,  5330499,  5333501,     0,     0,     0,     0
    
    60B CW:     5347899,  5348101,  5347899,  5348101,  5347899,  5348101,     0,     0,     0,     0
    60B PHONE:  5346499,  5349501,  5346499,  5349501,  5346499,  5349501,     0,     0,     0,     0
    
    60C CW:     5358399,  5358601,  5358399,  5358601,  5358399,  5358601,     0,     0,     0,     0
    60C PHONE:  5356999,  5360001,  5356999,  5359901,  5356999,  5359901,     0,     0,     0,     0
    
    60D CW:     5372899,  5373101,  5372899,  5373101,  5372899,  5373101,     0,     0,     0,     0
    60D PHONE:  5371499,  5374501,  5371499,  5374501,  5371499,  5374501,     0,     0,     0,     0
    
    60E CW:     5404899,  5405101,  5404899,  5405101,  5404899,  5405101,     0,     0,     0,     0
    60E PHONE:  5403499,  5406501,  5403499,  5406501,  5403499,  5406501,     0,     0,     0,     0
    


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.