One of my hurdles to playing with Software Defined Radio is that experimenting with a fresh list of potential radio frequencies is a cumbersome process. SDR Touch, my radio app of choice, has the ability setup presets, which makes jumping around to frequencies easy. But getting the initial list in there is a pain. I noticed that SDR Touch offers the ability to import and export presets, which I figured would vastly simplify this problem.
The first solution I tried was to create some presets, export them and try changing the XML file by hand. Unfortunately, the XML format was just a bit too low level to comfortably manage this way. On to Plan B, which was to create a simplified format and convert it to XML using some code.
While the Unix Geek in me wanted this 'simple format' to be text based, I figured this was a good opportunity for me to play around with AppScript, Google's solution for extending Docs, Sheets, etc. My plan was to manage the frequencies in a Google Spreadsheet and then write some AppScript to generate the ugly XML.
After about 15 minutes of playing with AppScript, I had a crude version of this solution implemented. Here's the spreadsheet and here's a few screenshots showing my code in action.
First off, I cataloged a bunch of interesting presets:
If you were paying close attention, you may have noticed in the screenshot above that there's a new top level menu: SDR Tools. Clicking on it, shows the entry point to the Export code I wrote. Pretty sweet, right?
And finally, clicking the above menu item causes the system to generate a dialog box with the relevant XML in place:
Ultimately, I had to copy and paste this XML into a file named SDRTouchPresets.xml and store this file in the root directory of my LG G6. With that done, I could import the file. And bam!, all the frequencies mentioned in the spreadsheet were loaded up and are now a press away from me accessing them:
While this worked, the solution still has a ways to go. Right now, only the currently selected sheet in the spreadsheet is included in the export file. I need to change it so that all sheets are processed and stored in the XML. Also, I should really be storing the XML in Google Drive, and not depending on Copy and Paste. But still, this is a good start and really opens my eyes up to a whole new world of possibilities in Google Sheets and Docs.
Here's the code that powers the above:
function onOpen() { var spreadsheet = SpreadsheetApp.getActive(); var menuItems = [ {name: 'Export Frequencies', functionName: 'sdrFreqExport'} ]; spreadsheet.addMenu('SDR Tools', menuItems); } function sdrFreqExport() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var name = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName(); // This represents ALL the data var range = sheet.getDataRange(); var values = range.getValues(); var doc = ['<?xml version="1.0" encoding="UTF-8"?>', '<sdr_presets version="1">', ' <category id="1" name="' + name + '">']; for (var i = 2; i < values.length; i++) { doc.push(' <preset id="' + i + '" ' + ' name="' + values[i][2] + '" ' + ' freq="' + rawFreq(values[i][1]) + '" ' + ' centfreq="' + rawFreq(values[i][1]) + '" ' + ' offset="0" ' + ' order="' + i + '" ' + ' filter="13686" dem="0"/>'); } doc.push(' </category>'); doc.push('</sdr_presets>'); showDoc(doc.join("\n")); } function rawFreq(freq, band) { return freq * 1000000; } function showDoc(doc) { var src = "<pre><![CDATA[" + doc + "]]></pre>"; var html = HtmlService.createHtmlOutput(src) .setWidth(400) .setHeight(300); SpreadsheetApp.getUi() .showModalDialog(html, 'SDR Export'); }
Feel free to grab it and improve it.
Ben get your Ham license. I used this https://www.hamradiolicenseexam.com/ . My call sign is NY5N, so you know I am serious.
ReplyDelete