Android App

  • 15
  • Idea
  • Updated 5 months ago
  • Not Planned
I started working on a Android App to go alongside my CMD micro.  I wanted a few additional feature at hands reach without having to use the mouse.

Currently the following features are working;

1.  Band Selection
2. DSP (NR.NB.ANF)
3. RX filter high/low
4.  Xit/RIT
5.  And for fun DX spots

Currently the DX spots show 5 newest spots from all bands, at some point I will update this to be 5 latest spots of the current band.  Clicking the buttons beside the spot will tune that spot.

This app is just a proof of concept and a fun project, however no scaling has been implemented.  So this will only work on the tablet I designed it for.  So sorry if you don't have a Samsung galaxy tab 4, it won't work.  This is not meant to be a published App, but maybe one day.




William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes

Posted 4 years ago

  • 15
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 927 Posts
  • 172 Reply Likes
My Tab is a Galaxy S (SM-800)...
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
That tablet has much higher resolution and would not scale.  I'm learning scaling, so maybe one day
Photo of Robbie - KI4TTZ

Robbie - KI4TTZ

  • 480 Posts
  • 77 Reply Likes
fwiw, I also have a galaxy S. 
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
New Progress on my Android App.  This time I'm doing a ground up build in Native android vs a port.  This one will work on any 10" tablet currently, more layouts for 7" screens MAY be made eventually.  I do not plan to support phones, because the screen is just too small to be useful. The App is displaying DXspots currently, but it may go away.  It was just added to test multi threading.  I think I will replace the DXspot view with radio stats.  Who knows!  Anyway, I think it looks much better with native android widgets.



Curious what y'all think would be handy to add.  This is meant to be a companion to a midi device or flex control.  It is meant to add handy controls, not to completely operate the radio.

William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Did some major work to the layout today.  I added a large jog wheel to tune, jogs for XIT/RIT, and Filter Hi/Lo.

The app does not currently connect to the radio, but that's the easy part.  The Async thread that is running the DX spots will become the thread that does all the radio updates and parsing.

The Jog dials are working brilliantly.  I think once I remove the DX spot area, I will add in audo controls and several other functions.  When its all said and done, it should be neat. 

Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Got a few hours today to get some coding in.  The App is now talking to the radio and parsing data.  The only operational control is the main tune dial, which works fine.  But the hard part is over!  All the variables I need are now parsing, and the radio is connected.  Now its just a matter of mapping the buttons and dials to the appropriate functions.

I removed the silly DX spot list, as it was pretty much useless.  I now have room for a few more buttons and knobs.

Photo of Robbie - KI4TTZ

Robbie - KI4TTZ

  • 480 Posts
  • 77 Reply Likes
Neat app, good job!  I'd love to write an android app that had a full spectrum/waterfall but not sure how to do that type of graphics coding. Seems like a lot of work.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Yes that's far beyond my reach also.  I'm not even sure how to go about that.  The only way I know is to get a DAX IQ stream, and I have no idea if that is even possible on android.  I do not know what codec is used for this.  I would have to ask the developers.

The Opus Stream (AKA Remote Audio) may very well be possible.  This is an open format which is now supported on Android 5+.   But building a waterfall based off that stream would be useless.


Maybe one day!
Photo of Steve - N5AC

Steve - N5AC, VP Engineering / CTO

  • 1031 Posts
  • 1002 Reply Likes
The panadapter and waterfall are standard API constructs.  SmartSDR will calculate and send all the values to you so there is really nothing to do other than draw the panadapter and waterfall and tell the SmartSDR API how large the windows are that you are displaying the values in.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Good to know, Thanks Steve!  I will play with it.  Should be fun.  And much easier code than analyzing and audio stream.

William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
My biggest hurdle is I'm using Android(java), so I can't use the API directly. I made a simple java class to pull in the UDP data packet stream from the radio.  Convert it from byte[] to int [].  Here is a single packet from a x=100 y=2 stream.  But I'm not 100% sure how to interpret this.  I will dig more, but any help pointing me in the right direction for interpreting this data?

10.0.0.4: [954728508, 1073741824, 7213, 1397522435, 0, 0, 0, 0, 100, 2, 89416, 786444, 786444, 786444, 786445, 786444, 786444, 851980, 786444, 786444, 851980, 786444, 851981, 786445, 851981, 786445, 851981, 720906, 786445, 851981, 786445, 851981, 786444, 851980, 851981, 851981, 851981, 851981, 786445, 851981, 851981, 851981, 851979, 851981, 851981, 851981, 786445, 851981, 851981, 786445, 851981, 851981, 851980, 851981, 851981, 786445, 786445, 786445, 851981, 851979, 786445, 1429851, 1566525, 1299560, 1365096, 1429801, 1566472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


William
Photo of Steve - N5AC

Steve - N5AC, VP Engineering / CTO

  • 1031 Posts
  • 1002 Reply Likes
I'm at the IDXC breakfast, but when I get on a plane in a few hours I'll send you the VITA-49 information class which will tell you the details. You can also look at FlexLib for the data structures in the mean time if you want.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Made some progress on the Android App.  UDP discovery is now working, and I added in some new controls.  Using a touchscreen for dials can be very touchy, as your big finger is never touching a single pixel.  So I added in a sensitivity slider.  This allows you to reduce the sensitivity of the dials to your liking. 

I also changed the Dials, I think they look better.  Not all the controls work yet, but most do.  It will just take me a bit of time to map each one.



William
Photo of Ken - NM9P

Ken - NM9P, Elmer

  • 3988 Posts
  • 1228 Reply Likes
Looks really slick, William! How much harder is this than doing the MIDI controller stuff?
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 899 Posts
  • 166 Reply Likes
Looks real good, William. Will you add a FM and Tune/ATU button?
73,
Alex DH2ID
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Ken,

Its infinity harder LOL! 
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
One more layout change.  Do you like?

Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
I never heard of that prior to you mentioning it.  How do you connect to the radio? Processing is a derivative of Java, is it not?
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
In basically anything you don't want network IO in the main thread. In a synchronous model when you block on IO nothing happens until the IO is complete, like reading data or writing data. What is a little harder to do is have all your IO be asynchronous such that the stack (part of the OS) can handle it while your program does whatever it is your program is supposed to do, presumably not wait on IO. Similarly with transmissions, rather than wait for it to complete, you just, effectively say, here send this. and as space is available in the packet about to be sent, some number of bytes are added, when it needs to span packets, it handles it. Similarly on receive, the callback could say it got 0 bytes, or 5 bytes. And you kind of have to wait until the entire packet arrives before you do anything with it. Ultimately, all IO is synchronous.. You just want to push the waiting for something to happen to another thread.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I use Asynctask to handle all my networking.  So all that is done in the background, and does not affect the main UI thread.

I connect to the radio with TCP port 4992.  This is easy, as the header is irrelevant.  But all streaming data uses UDP, so you have to be able to parse IF data, audio data, etc separately.  So I just need to understand the protocol more. 

Processing is a java derivative yes.

William
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
Yes, I know I have the various Vita packets parsed into various object already as they flow through. I meant more like how you handle property event changes, how you communicate a frequency to listen to. For instance, In the discovery process you can register a callback for "HEY! I found a radio" and there is a radio object. Using the Vita discovery packet, after the packet arrives, you have to determine what the packet type is and instantiate the specific object type. Or does that not interact at all with Flexlib and you merely send tcp requests to the radio, like create pan, create slice, set freq, set mode, etc? The most involved task I've run into is having to have rewritten FlexLib. I wasn't sure if you had already accomplished that, never bothered to, or have an interface to the existing C#/.NET one. What I am doing is, essentially, writing SSDR for <everything else>, that'll have more functionality in it.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I'm just sending tcp request to the radio.  I send "sub slice all" etc oncreate.  Then parse the data  as its received from radio.  All via tcp 4992.  the only udp I do is initial discovery on 4992.  I  convert each packet data to string.  Then parse the string for the data I need.  Sorry  for short response,  I'm using my phone.

You are leaps and bounds ahead of me.  I'm just a beginner.  I just started back programming after 20 year's  one month ago.  I have tons to learn.

William
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 927 Posts
  • 172 Reply Likes
YES! The readout numbers could be a bit bigger ... ;-)
Or is it because it's late here at 1 a.m.... Will get up at
7 again to work VK...ZL...hopefully...good night/morning 8-)
(Edited)
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
They are a bit small, but on the actual tablet they are plenty readable.
Photo of EA4GLI - 8P9EH - Salvador

EA4GLI - 8P9EH - Salvador

  • 1758 Posts
  • 536 Reply Likes
Awesome! It is looking great!
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
One more layout change.  Moved the discovery text to the title bar, and moved stuff around.

Photo of Ken - NM9P

Ken - NM9P, Elmer

  • 3988 Posts
  • 1228 Reply Likes
This looks like an even more convenient layout.  The smaller control knobs remind me of the old Globe Scout 65 that I used as a novice in 1974!

As a matter of personal preference, I actually prefer the all silver knobs you used about three posts back...the ones without the indented rings around them.  But that is just artwork, and not important as long as it works!  

Will you use this as a finger-touch screen, or will you use a stylus?
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Ken it uses your finger.
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 927 Posts
  • 172 Reply Likes
Looks great. As your App has almost all knobs to control
SmartSDR, why not use it instead of the CMD micro
controllers? I don't see it replacing the mouse, as you
would still need to click SmartSDR to load profiles etc.

Tuning should be easier with a long slider on the touchscreen
bottom instead of a tuning knob or making tuning possible
by pressing on the sides of the knob, the longer you press
the faster it tunes.

Do you know this page? http://www.woodboxradio.com/shop.html...
I have been using FXpad for a long time to control PowerSDR.
(Edited)
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I made my own dial this time, instead of what I found on the internet.  Simple, but I like them.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Ok even better, I really like this one.  Purdy!

Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Bill,

It does not replace smartsdr. It just alows you to control it without shifting focus from your log program.

Just an alternative to using a mouse. Aka virtual front panel.

William
Photo of Ken - NM9P

Ken - NM9P, Elmer

  • 3968 Posts
  • 1221 Reply Likes
It looks like it will run very well in that aspect...sort of an Android version of K6TU's excellent Apple App.  

But.....If you could figure out the remote audio in/out and do a VPN then you would have a very simple remote op client that wouldn't even need to use Parallels Access.  Granted, no panadapter, but simple SSB remote would be as good as most Legacy rigs...  with a lot less bandwidth than other remoting operations.  Could be neat.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Ken the remote audio is not really the problem, but its Vita packets.  All data from the radio is encapulated in UDP vita packets.

You would need to inspect the VITA packet and extract the data.  Since all data is encapsulated, you have to inspect the header and only extract the audio packets.

Flexlib has an API for this.  But I can't use the API.  I would have to totally rewrite that code in JAVA.  I'm not up to that level yet.  Maybe one day once I can get my hands on some good vita documentation.

William
Photo of Steve - KD8QWT

Steve - KD8QWT

  • 74 Posts
  • 14 Reply Likes
I'm in the same boat with VITA.  This is the best doc I could find so far.  I haven't had a chance to really dig through it.  The specs are on http://www.vita.com/ , but they want $100 for it.

http://www.wdv.com/Electronics/Reference/SDROoverWEB-VITA.pdf
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
Steve, and all, there is a draft of Vita-49 standard on the web.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Here is a quick demonstration
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I'm 90% completed mapping out all the functions.  Just a couple more buttons and dials.  Should be done in a couple days.

Currently the layout only supports large screens (10").  Anyone with a 10" android tablet that would be interested in beta testing the software?  You will need to be familiar with side loading android apps, and enable developer mode.

The App works over wifi, so your radio must be connected to your router (not directly connected to pc).

Let me know!

William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Closer still!  I changed available step sizes.  to better suit the touch knob.  Added a bit more to the top information display.  All dials and sliders are working 100%.  Just a few buttons left to map such as lock, +rx, agc, xit/rit clear, then I will be done.

After this is completed, I'm going to focus on VITA.  That will be a big challenge.  I just need to spend many hours dissecting the flexlib.



Once I'm done (at some point)  I will make alternate layouts for other screen sizes.  The app is designed to handle 2 slices max.  I will not make it handle more.  As I only have a 6300 to test with.  Plus if you are using more than 2 slices, why would you be using and android anyway.

So who wants to beta test?

William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Ok Guys,  I should have a version to test by Monday
Photo of EA4GLI - 8P9EH - Salvador

EA4GLI - 8P9EH - Salvador

  • 1750 Posts
  • 532 Reply Likes
Hi William,

Can I also be in the beta test list?

Thanks!
Photo of Mike Meeks

Mike Meeks

  • 7 Posts
  • 2 Reply Likes
Me too.
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
If you actually read through this William says where he is putting stuff.

"Let me know the good and the bad :)  But please don't ask how to load it.  Google it"

https://www.dropbox.com/s/3vvwcf82xkper3w/app-debug.apk?dl=0
Photo of EA4GLI - 8P9EH - Salvador

EA4GLI - 8P9EH - Salvador

  • 1750 Posts
  • 532 Reply Likes
Thanks Walt. I realized a few minutes after I posted. Still, if William wants/needs any beta testers I am game!
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Steve,

If you see this post, did you ever forward me the VITA document you mentioned?  If not, could you please.

Thanks!

William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I have made good progress understanding the Vita header and determining the stream ID and class code.  So stripping out the payload for just the waterfall, opus, etc should be easy enough.  However, I can find nada on what format the waterfall data is in and what is required to draw it.  From what I can find in flexlib, it just handles the packets and the communication with the radio.  I now know how to strip out the data, just no idea what to do with it.  Also the vita standard, does not seem to explain this either.  Same with opus!  VITA is just a framework for sending data, but where do I find out how to use the data?

William
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
That part would be in the piece of SSDR FRS did not open, the GUI. You are correct VITA-49 knows nothing about SSDR. The payload from the waterfall is just a bitmap. If you scan through here for posts from Steve Hicks, I believe you will find one addressing that very issue. I suspect then not opening the WPF piece was not an oversight. You are right though, that is where the value is added and that is what makes SSDR a product.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I figure the payload was just pixels, but I don't know the format.  It does not appear to be standard bitmap.  What I'm looking for is help in converting the payload to something usable. 
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
I don't have one in front of me but if you look at it does it seem to be a series of RGB values, you know, 24 bit color or even 8 bit? Look at the source code for Fldigi and see how he does it? You could also look at what processing is done in Waterfall.cs and WaterfallTile,cs. I've converted both but don't recall an 'ah ha' moment. So you sir, are blazing this part of the trail. The following should help:

        private void RunTestData()
        {
            while (_radio != null)
            {
                WaterfallTile tile = GenerateTestDataTile();
                OnDataReady(this, tile);
                Thread.Sleep((int)tile.LineDurationMS);
            }
        }

        private uint test_timecode = 0;
        private Random test_random = new Random();
        private WaterfallTile GenerateTestDataTile()
        {
            WaterfallTile tile = new WaterfallTile();
            tile.Timecode = test_timecode++;
            tile.FirstPixelFreq = 14.0;     // why isn't FreqHz correct?
            tile.BinBandwidth = (0.2 / _size.Width);
            tile.LineDurationMS = 100;
            tile.Width = (ushort)(_size.Width*1.2);
            tile.Height = 1;
            
            tile.Data = new ushort[tile.Width*tile.Height];

            for (int i = 0; i < tile.Width * tile.Height; i++)
            {
                if (i >= 57 && i <= 60)
                    tile.Data[i] = (ushort)test_random.Next(13000, 50000);
                else tile.Data[i] = (ushort)test_random.Next(13000, 16000);
                //tile.Data[i] = (ushort)(i * 35);
            }

            return tile;
        }

But this will be the most challenging part, that and the spectrum display.
From what Eric did each tile could be 2 dimensional, with width and height.  Even if the height is greater than one, each tile represents a full width, actually a tad over a full width, that would be a question as well.

My guess is, as I haven't done this yet, is you should look for a graphic operation such as :

Draws an image at the given x, y position using the width and height of the given image. Where image can come from a stream.
(Edited)
Photo of Steve - N5AC

Steve - N5AC, VP Engineering / CTO

  • 1031 Posts
  • 1002 Reply Likes
Sorry for taking so long to get back to you William.  Here's a link to the VITA-49 Information Class that you will need with the UDP API details.  It does not have waterfall information, so that needs to be added, but it does have the panadapter data.

VRT Information Class Documentation for FLEX-6000
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Thanks!
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
Here is what I would suggest William. Take that sample snippet, you'll need the WaterfallTile.cs to get the makeup of the data you'll be getting and Just do a standalone test pushing the data to a canvas. Instead of the test for active radio, just say while (true) and rather than the onDataReady, just pass your newly formed 'tile' to a routine to pull out the salient attributes and, in my case, cast the data buffer to a byteInputStream, and issue a draw on it. I suspect you'll get one line per data packet. So
scroll the window one pixel down
push each packet out starting at 0,0,
Doing it in that order you'll always end with a valid line at 0,0

Hopefully that'll present a moving waterfall for you. After, go find yourself a pint of your finest ale. ;-)
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Great idea, I will give this a try!

William
Photo of Walt - KZ1F

Walt - KZ1F

  • 3040 Posts
  • 643 Reply Likes
Strictly speaking I didn't mean cast it, more wrap it. In the case of Android, I don't believe you can do that. You may have to create a bitmap from those values using the BitmapFactory.decodeByteArray(data, 0, data.length) and  then draw the bitmap.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Its far from done, but if you have a 10" android tablet, your welcome to test what I have so far.  You must enable developer mode.  Copy the apk to your tablet and install.  If you don't know how to side load apps on android, please Google it!

Also, please don't post that it doesn't work on your phone or 7" tablet.  I already know that LOL.  This only works on 10" screens.  And not even 100+ sure it will work on all 10" screens :)

AGC fast/slow/med/off buttons not yet mapped.  Neither is the lock or +RX button.  All else should be working.

The slider above the large tune wheel is to set dial sensitivity.  All the way to right is less sensitive, all the way to left is more sensitive.  I suggest you use larger step if you want to move fast, and leave the sensitivity slider as low as you can and still easily tune without overshooting.  It takes a little getting used to, but once you get used to it, its easy.

Initial radio discovery will cause a small pause during app load.  This a side thread, but the UI can't continue until an IP is returned.  If the app locks up and never loads, then it can't find your radio. 

Let me know the good and the bad :)  But please don't ask how to load it.  Google it :)

https://www.dropbox.com/s/3vvwcf82xkper3w/app-debug.apk?dl=0


William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Reinstall this version, it forces landscape mode.  If you open in portrait, it will auto switch to landscape. 

If you like reverse landscape, as in some tablets (like mine) have the stupid usb on the bottom, so to use it on a stand, I need reverse landscape.

Anyway if you want reverse lanscape, just open the app in while in that orientation.  If you open in any other orientation, it will now switch to regular landscape to avoid the portrait mess in Alex's pic above :)

https://www.dropbox.com/s/3vvwcf82xkper3w/app-debug.apk?dl=0
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 899 Posts
  • 166 Reply Likes
Forcing landscape did it for me. Now even I have an uncluttered screen.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I know how to make it work with multiple screen  sizes, i just have not made the effort yet.   I will get around to it once I'm happy with the operation.

William
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 899 Posts
  • 166 Reply Likes
Of course getting the app to work with multiple screens is not easy,
because resizing and scaling can cause bad effects with fonts etc.
It must be quite late in the night on your side now 8-)
(Edited)
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
More like early morn :).  Back to bed for me :)  Anyway, play with the App and let me know how its working.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
The App should now also work on 7" tablets, albeit the controls will be smaller.  But your welcome to try it.  https://www.dropbox.com/s/3vvwcf82xkper3w/app-debug.apk?dl=0
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
All Buttons are now mapped, so all onscreen functions should work now.  Also anyone with a 7" android tablet.  Let me know if it works.

https://www.dropbox.com/s/3vvwcf82xkper3w/app-debug.apk?dl=0

William
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 891 Posts
  • 166 Reply Likes
This version works on my Samsung S T-800 10,1" Tablet.
Looks good, all buttons work, runs stable.
Although the knobs look great I would prefer sliders, as they occupy less space
and are easier to set than knobs. You could then put the TX filter slider below
the RX filter one. I think a long slider at screen bottom occupying the whole screen width would be great for frequency tuning and addition of a RF power slider or knob would be great also.
For those who prefer knobs to sliders an option to change them could be a solution.
(Edited)
Photo of G4YDO

G4YDO

  • 66 Posts
  • 9 Reply Likes
hi,  great work. i have it working on my samsung 8 phone, apart from no audio. i think i must be doing something wrong?
Photo of Karl KB2AS

Karl KB2AS

  • 9 Posts
  • 1 Reply Like
Fantastic job. Loads on the 7" tablet with no issues. NR and ANF worked in the earlier version, appears to be not working in this version, so are the sliders for each. The text for Main Vol is cut in half, still readable. A suggestion, TX Low and TX High are not commonly used, that real estate be allocated to something else.
I was unable to install it on a 10" Asus tablet, parsing error, but loads fine on the 7" tablets.

73 and thanks,
Karl
KB2AS 
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Let me go borrow my son's 7" and I'll get it working.  I personally use the TX high low often.  But open for suggestions on what to put in its place that would get used more.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
Also for the parse error on your 10", make sure you have at least Android version 4.3.  If not it will not work.  In about device is the settings menu, it will tell you the version.  And most likely an option to auto update.

William
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I found the issue with the 7"layout.  Your 7" must have a software navigation bar at the bottom.  This cause objects linked to the bottom of the frame to get distorted and or pushed up.  Your tune dial is probably oval also :)

I will have to do some more tweaking so I can get objects are not affected on tablets with an onscreen nav bar.
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
This copy has an updated 7" layout.  Everything works and looks fine on my 7"

https://www.dropbox.com/s/3vvwcf82xkper3w/app-debug.apk?dl=0
Photo of Michael - N5TGL

Michael - N5TGL

  • 307 Posts
  • 101 Reply Likes
Wow, William.  Great work.  Using a Nexus 7 like others and same great result.  Nicely done!
Photo of GI4FZD

GI4FZD

  • 129 Posts
  • 18 Reply Likes
will this be ok on lenovo A10 or cheap allwinner 31s tablet?
I need to update my ancient advent vega.
cheers
Paul
Photo of James Whiteway

James Whiteway

  • 904 Posts
  • 222 Reply Likes
Works great on my 7" Nexus 7 tablet. It's a bit cramped for some of the controls. Might go to Best Buy and get one of the $79 10" tablets they have. Otherwise, fine job. As I stated about the USB controller software, you are very prolific in development. A simple to use Android app is what I had in mind (along with a couple of other things). You have beat me to it and done a good job!
Congratulations on a job well done!
james
WD5GWY
 Forgot to add, I like the knobs. Looks really cool and a bit old school too!
(Edited)
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
No there is no label for that
Photo of k3Tim

k3Tim

  • 848 Posts
  • 166 Reply Likes
This is a really cool App and you made a lot of progress in short time!  I am blown away...  Runs on a Nexus 7 w/o any problems.   

A minor nit-pick would be the NR and NB are swapped compared to the S-SDR UI.

I am also using Sound Wire to deliver audio to the table so now complete receiver control / listening ability is possible. 

An ask on my part would be to add CW mode button.  

A huge ...  HUGE ... ask is to add a SWL mode, that is toggle out the ham bands buttons to give the SWL bands.  Perhaps adding the SAM mode selection and make that selection change the bands from ham to SWL.  
Then, any other mode selection (USB / DIG etc) would revert back to the Ham bands.

Did I mention great job? !

Thanks for posting the APK.

Best,
Tim
Photo of William Hemmingsen

William Hemmingsen

  • 573 Posts
  • 278 Reply Likes
I will look into adding the features you requested.  At some point I plan to add remote audio directly to the App.  But that will not be soon.  I have much more learning to do, before I can tackle that.
Photo of Giulio

Giulio

  • 37 Posts
  • 8 Reply Likes
Dear William,
where can I download the app for my OnePlus 2 Android?
Thanks for infos and for your awesome work!
Giulio IZ3EAW
Photo of Alex - DH2ID

Alex - DH2ID, Elmer

  • 925 Posts
  • 172 Reply Likes
Guilio, you can download a preview above. William never did develop
further, as he had problems with the audio stream.
If you want to control a FlexRadio via a SmartPhone, you have to
buy an iPhone and the corresponding app for IOS. 73, Alex - DH2ID