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.

Good Idea: make your own app

Options
Johan Schepers PA3AIN
edited June 2020 in New Ideas

Hello,

On this forum are sometimes questions/wishes around the use of software (SmartSDR and general hamradio software).

Perhaps not usual for all hams, but with the use of the FlexRadio API is it possible to make your own additional screens, which makes the life easier. We have all our own wishes.

For example, i have written a screen for rag chew CW QSO's and one for use in contests.

I can quick changing the speed, stop sending the message (like the ESC key in some software), setting the CW filter width and the power.

The program works here in combination with a more general app for control the radio.imageimage

Johan PA3AIN

«1

Comments

  • Walt - KZ1F
    Walt - KZ1F Member ✭✭
    edited November 2016
    Options
    Yep, that's true. There are several hams owning a 6000 series with the requisite skill set and requisite interest that have written their own adjunct software forvit. Some even do it for income. But, I am guessing that is a quite small percentage.
  • DrTeeth
    DrTeeth Member ✭✭
    edited December 2018
    Options
    How easy is it for somebody with zero programming experience to learn to produce something like the above?

    If it is not too difficult, time for some Flex programming 101 online articles m'thinks. The upside for Flex would be like the upside for MSoft having their Flight Sim APIs (or whatever they are called) open so that a massive 3rd party programming community developed making the program insanely popular and greatly extending its life.
  • Tim - W4TME
    Tim - W4TME Administrator, FlexRadio Employee admin
    edited March 2017
    Options
    Very nice, John.  Just another example of the ongoing value proposition due to the inherent extensibility of the FLEX-6000 architecture.
  • Walt - KZ1F
    Walt - KZ1F Member ✭✭
    edited November 2016
    Options
    It's more than just tutorials in the flexlib api or tcp cmd structure. One has to know how to program computers.

    Flight simulator never taught anyone how to fly. If you already knew, it was helpful, marginally, in practicing IFR approaches.

    Learning computer programming from scratch is not trivial.
  • Johan Schepers PA3AIN
    edited December 2018
    Options

    Hello Guy,

    Modern software tools, like Microsoft Visual Studio, are easy to use.

    Perhaps you need some help (members on local radioclub?) by the first steps, but it is easy to do also when you are not a professional programmer.

    Sometimes helps examples on Internet find the right way.

    Johan PA3AIN

  • DrTeeth
    DrTeeth Member ✭✭
    edited August 2016
    Options
    I'll really have to bite the bullet on this one. Somebody I know (just from here and his web site) is a very handy programmer and none of his professional life was in the programming field at all.

    Mni tnx es 73 de Guy
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited December 2015
    Options
    Johan, if you are not selling your program would you be interested in sharing the source for those of us interested in seeing how you went about doing things?
  • Johan Schepers PA3AIN
    edited December 2015
    Options

    Hello Mark,

    when you send an email to pa3ain@vrza.nl, I will return the source code on current state.

    The comments in the program and also the function names are in Dutch, but it gives an idea how it is build.

    There are some bugs (e.g. around adding slices and removing slices). And perhaps works it not on all PC's. (Like my older laptop)


    Johan PA3AIN

  • DrTeeth
    DrTeeth Member ✭✭
    edited August 2016
    Options
    Flight Sim is now being developed by Lockheed-Martin. Flight Sim would not have been as successful if the community could not have developed aircraft and scenery. The community is still going strong today years after MS dropped the product. They have realised their mistake and have started development again after the mistake of their releasing a much dumbed down version that bombed.
  • Peter K1PGV
    Peter K1PGV Member ✭✭✭
    edited June 2020
    Options
    If you have a good command of deductive logic, and you want to put in the time, learning to write basic WinForms based applications in C# is relatively simple.  And, IMHO, there can be no better introduction to doing useful simple programming tasks than using Visual Studio to write a C# WinForms application that controls your radio.  The development environment actually writes a lot of the code FOR you, believe it or not.

    Learning how to program for a specific use is a little like learning ANY special-purpose task, including a specific area in engineering, medicine, or law:  You can get quite good at applied work in a narrow area, within well circumscribed boundaries, without any special training.

    The PROBLEM becomes that you don't know what you don't know.  And this can lead you off into the weeds sometimes.

    Given that what we're talking about is a recreational activity, there's really no danger to anyone who is inclined giving programming a try.

    Post your questions here!  I'll be happy to help, as I sure will other community members.

    Peter
    K1PGV
  • DrTeeth
    DrTeeth Member ✭✭
    edited August 2016
    Options
    Hi Peter,

    Thank you for your kind offer. It is *very* much appreciated.

    What makes the first hurdle more difficult for me is that I like to understand what I do and why, rather than learn by rote.

    The advantage after that is that there is nothing (or not much anyway) to forget. This approach helped me a lot in my studies. For those that do not know, I am a dentist by 'trade'.

    73 de Guy G4DWV/4X1LT


  • Oxford English
    Oxford English Member ✭✭
    edited July 2017
    Options
    Like Guy, I am not a programmer but I have designed a few websites and learnt some HTML and PHP programming. 

    It would be nice to do something to 'customise' my 6300 and Johan's program looks interesting.

    Would anyone who is interested in doing something similar like to email me and if there is any interest, we could look at having a space on one of my spare domains where ideas and bits of code could be shared and discussed.

    My email is g7gfw@kalyncomputers.com - this is an address created just for this so any spam will be deleted!!

    Tim
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited December 2015
    Options
    While I am new to this API, I have been a professional device programmer for close to 35 years.  I am fluent in C, C++, C#, Delphi and quite a few other languages.

    On a day-to-day basis I work in C++ and C# for my job.

    Once I am more up to speed on this API and how things work I too will be willing to help those that fear the programming side of things.  Like Peter said, C# and the IDE (integrated development environment) associated with it does a lot of the work for you.

    What no IDE can do is make suggestions or assumptions on how you want to methodically solve a programming problem.  This is where years of experience and Google become handy.

    With any language and any problem there are about a bazillion ways to solve the problem and "make it work."   Some ways are more correct than other ways and some are flat out wrong.   But in general there really is no wrong way to do something unless the way you have selected violates some expectation of the platform, language or OS.

    For example in one of the threads in this forum someone was playing with something and subscribed to an event and was having some issues.  The flex programmer politely and correctly instructed them that the event was fired from a thread and therefore you should not directly modify UI components as they are on a different thread.

    To the programmer that has been doing this for years this is sort of common knowledge.  But to the newbie it is also not obviously published anywhere.    But this is where Google is your friend.  

    I typed in:  C# update gui from thread event

    And there were a bunch of responses and these create an entirely new problem and that is figuring out of the myriad responses which one is the best and will work in your situation.

    And there is still another issue and that is knowing what to type into Google for the search.  The absolute newbie has no clue that the GUI is one thread while their might be other threads doing work. 

    This is where the help of experienced programmers and those familiar with this API and what the radio/API allows you to do is invaluable.

    I think that the biggest issue and this is eluded to by Peter is that someone not used to programming often doesn't really know what it is they want to do and this as Peter says sometimes steps you off into the weeds.

    So I make this suggestion.  For those of you new to programming that want to play with this API do the following:

    In a single simple English statement (no code here) try to describe what you want to do.  For example:

    I want to find the radio, connect to it, and I want to receive updates when slice A changes.

    In a single sentence this pretty well states what needs to be done.  Now you can break it down into sub tasks:

    Find the radio
    Connect to the radio
    Receive info on slice A

    Given that statement and those sub tasks an experienced person here can better lead you into getting started.

    I also suggest doing this for each thing you might want to do that makes of part of your eventual goal.  For example:

    Lets say your eventual goal is to write a complete SSDR replacement.  This is of course a lofty goal and a big one.  So lets take it piece by piece:

    I want to discover the radio - task 1
    I want to connect to a discovered radio - task 2
    I want to find out details about the connected radio - task 3
    I want to get a panadapter - task 4 (a big one perhaps)
    I want to get a slice in the panadapter - task 5

    etc.

    So once you have these sub tasks try to do a separate test program on each one.  Start with discovering the radio.  Write a quick and dirty program using the API to discover your radio.  Discuss it and ask questions of the wonderful experts here.  Once you have it working, save it and start a new project for task 2 and so on.

    When you have made it through each of your sub tasks and you have a test program that works for each then you can better design your big program.

    Obviously some of your sub tasks depend upon the prior ones.  For example connecting to a discovered radio implies that you use your discovery code you did in task 1.

    Anyway I hope you guys see the point.  With any BIG project the only way you will ever get it to work and get it right is to break it down into smaller more manageable tasks.

    Also when seeking help often people will ask to review your code.  It is much easier to discuss and review a single purpose program than a huge conglomeration of code.  For example if you are having trouble getting a panadapter being able to send a very discrete test program with only the code needed to get through discovery, connect, and pan adapter request will help the people trying to help you since they will not need to wade through many modules and thousands of lines of irrelevant code.

    These are just my suggestions.  Again I'm new to the API but as a device programmer I've spent most of my life talking to robots and electrical devices and sensors.  I've written software to control wafer handling robots all the way up to the big gigantic welding robots used in the Automotive business.  I've also talked to many many different kinds of sensors and written extremely complex motion/measurement programs where everything has to be sequenced perfectly for the instrument to work.

    Again I will offer that as I learn this API and get my head around how it all works I too will offer what I can to help others.  The way I see it this radio and this API make it possible for some fantastic things to be produced by the community.

    I have a ton of ideas myself.  I work for a living and many of us do and my radio sits idle most of the day.  Why not have a program that jumps around, searches for signals as directed and either records or saves off the audio or IQ data for later processing?

    Another example on the same line.  How about an automated DX spotter?  Have code that drives the radio around, listening and decoding CW looking for  various call signs and listing out the date/time frequency and the call heard and perhaps relative signal strength?

    I mean these are things that are entirely possible using this radio and API.  I have a bunch of other thoughts too.

    My last comment to everyone is to consider if the code you write is something you would like to share.  If you intend to share it then your design should make it easy to use.

    C# is nice for this because you can create functionality in the form of a DLL and people can make use of that to do something you've provided.  The DLLs in .NET can contain data types and code so it is easy for someone to create a neat feature, package it in a DLL and anyone using .NET can reference it and make use of it.

    Alternatively you can share source.  This is nice to allow people to modify it for their specific purpose.  But if you plan to provide source please include details on what is needed, where to get it in order to build it.   I can't tell you the number of times I've downloaded a project only to be unable to build/use it because it references some other DLL or project that is nowhere to be found.

    Anyway I see this as the start of something very cool and fun.
  • Oxford English
    Oxford English Member ✭✭
    edited December 2015
    Options
    Great post Mark - thanks
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited July 2017
    Options
    Perhaps we should consider all working on something fun together to learn and create.  I would be willing to create a github repository as a place were we can interact on this code and invite those interested to participate.

    Using github is pretty easy but does require a little learning.  The benefit of it is that it easily allows you to see what changes were made to something.

    Let me know if there is interest and I will be glad to make a public repository and help people get setup.
  • Terry K8EET
    Terry K8EET Member ✭✭
    edited July 2016
    Options
    Very impressive Johan,

    I think N1MM does most of the things I would like to see in a rig control/logging program.  Of course it's designed for contests, so it falls a little short of being the ideal program for general or as you refer to your "rag chewing" option.
  • Peter K1PGV
    Peter K1PGV Member ✭✭✭
    edited June 2020
    Options
    I love Mark WS7M's idea about writing down the steps you want to accomplish.

    Of course, this requires that you know that you HAVE to "Connect to the radio"... and if you're not familiar with the API, you might not realize that one of the steps is "connecting to the radio."  But you'll learn this quite quickly.

    If people think it would be helpful, over the holidays I'd be happy to put together a simple (reasonably well written, reasonably well documented) "Starter Program" that illustrates some of the basics of radio control using FlexLib. I don't expect this would be an especially brilliant piece of work, but it would provide anyone interested with a clean Project from which to start their own program.

    My only caveat would be that I'm not a professional C# programmer (though I've written many thousands of lines of C# code both for fun and for work and *am* a professional C/C++ dev by trade)... so if I put this sample together, I'd welcome a thorough review by somebody who is more of a C# pro than I am.

    Peter
    K1PGV
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited March 2017
    Options
    Peter,

    I think it would be wonderful to have such a thing and I applaud you for the offer and hope you will make it so.

    My thoughts are it would be good to have a series of small tutorials like I said above:

    Radio discovery - A simple program that shows how this works

    Connect to the radio - Separate program from the above, perhaps it is a copy of the above program with additional code/modules to do the connection

    Subscribe to a slide/pan etc - Again a sep program that builds on the above two.

    Also C# is a notoriously uncommented language.  The current generation of programmers have found many reasons not to use comments in their code saying things like:

    The code should self document
    Comments become out of date as the code changes

    Both are true HOWEVER I have yet to find self documenting code that makes the reader completely understand the rationale and reasons behind what is being done.  I will forever be in support of a general comment like this:

    //
    // To connect to a flex radio we must first discover it.  The code below will construct the required
    // UDP socket and handler to receive discovery packets from the radio.  See the functions **** and
    // YYY for details on the packets
    //
    <code goes here>

    However since I think this might be a community effort I will bend to the ways of the group

    Anyway I am behind you all the way and I will review what C# I can although I am at times unconventional in my ways.

    Please... move forward.  I will work with you if you would like.

    Mark
  • Reg
    Reg Member ✭✭
    edited March 2017
    Options
    Mark:

    I would like to participate in the development group.  I have Visual Studio installed and I regularly use Github for non-ham activities.  This should be fun.

    Reg
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited December 2015
    Options
    Absolutely Reg,  Please send me an email at  ws7m@arrl.net from the email address you wish to use and I'll send you an invite.
  • Tim - W4TME
    Tim - W4TME Administrator, FlexRadio Employee admin
    edited December 2016
    Options
    This is what the API wiki was created for.  Information dissemination.
  • Peter K1PGV
    Peter K1PGV Member ✭✭✭
    edited June 2020
    Options

    /begin rant

    Mark WS7M wrote about one of my hot buttons:

    Also C# is a notoriously uncommented language.  The current generation of programmers have found many reasons not to use comments in their code saying things like:

    The code should self document
    Comments become out of date as the code changes

    This is because many members of "the current generation of programmers" do sloppy engineering and think programming is copying and modifying samples from CodeProject or StackExchange, as opposed to actually learning what they're doing. That may be programming, but it's not software engineering.

    If you're writing proper comments, they have little do with whether or not the code is "self documenting" (which it should be as well). Comments like "Assign a value of 5 to iterationCount" is not a useful comment. In addition, the comments written for a tutorial ... that is, as a didactic tool ... are entirely different to the comments one would write for a commercial piece of software.

    Anyhow... thanks for the chance to rant.

    Peter
    K1PGV


    /end rant

  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited December 2015
    Options
    Good Rant Peter...

    My goal is this... For people, non-programmers especially to learn this I think we have to have some text in place that tells what the block of code is trying to do.

    I can read a chunk of code and if it is not too terribly obfuscated I can get it.  But if there is a nice short paragraph saying:  hey I'm trying to allocate memory and put some values in it to be later used by such and such a thing to control something else.  It really helps.

    I was going to show an example I have in current code but it formatted horribly.
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited December 2015
    Options
    Tim,

    The wiki is great but is seriously lacking in some areas.  It needs work.  I realize Flex has many balls to juggle but my last check of the Wiki there were lots of missing pages and some things that were out of date.

    Would flex like help to update the Wiki?  There are a few here that are qualified to do so and maybe they would be willing to help and Flex could reserve the right to update/modify submissions.  What do you think?
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited May 2020
    Options
    Here is the github I created for this.  All are free to fork and push requests to this.

    https://github.com/systechllc/FlexCommunityAPIWork

    If you know git great.  If not I strongly suggest you download the tool  "SourceTree".  It is free and is a wonderful gui that runs on both Windows and Mac and it works with git.

    I think to be a part of this you will need a signup if you don't have one on github.  Anyway let me know if anyone has any issues getting connected.
  • Mark_WS7M
    Mark_WS7M Member ✭✭✭
    edited December 2015
    Options
    Ok I have to simple examples posted.  Non-API how to discover the radio in both C++ and C#.
  • Walt - KZ1F
    Walt - KZ1F Member ✭✭
    edited November 2016
    Options
    Yes, Peter, I rant about that in very similar terms. What I suggest e everyone interested in software engineering, as opposed to cut and paste 'programming' is the seminal book 'Clean Code' by Robert Martin. Where he and I diverge is the person following the original developer, be it sustaining or maintenance, is what the author intended to do. The original author:

    a. Correctly identified the problem to be solved, macro orbmicro.
    1. Correctly implemented the artifact from a.
    b. Incorrectly identified the macro/micro problem to be solved.
    2. Incorrectly solved the identified problem.

    Time is money and the fastest way to leave a breadcrumb about where you, as the author, is going is to tell those that follow. If you, rather, solved the wrong problem, it doesn't matter whether you implemented it correctly or not. This is why comments are important. But, as Peter correctly pointeded out I++; // incrementing counter

    Is a nonsensical comment.
  • NM1W
    NM1W Member ✭✭
    edited December 2016
    Options
    I'd be in favor of  github hosted examples. While I've done sw dev for way too many years, I'm new to the api and c#. Tks Mark - a great idea
    -jim

  • NM1W
    NM1W Member ✭✭
    edited December 2016
    Options
    Mark - excellent, thank you for doing this. -jim
  • k3Tim
    k3Tim Member ✭✭✭
    edited December 2016
    Options
    Yes, thanks for doing this.

    Downloaded (free) VS-2015 Community edition and SourceTree. The source files / project pulled fine / compiled / executed fine. 
    One question if I may:  what's the magic number "28" signify? Is it a specific length of a header or just simply printinging out the first 28 bytes?

    Tim

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.