Features: - VFO mode with direct frequency input - POCSAG decoder (512/1200 baud) with BCH(31,21) correction - Full-screen Spectrum analyzer - FM Radio receiver - RSSI signal indicator overlay - Custom boot splash (UA1ZBE / POCSAG pager / build date) Architecture: - app/mode.c — mode dispatcher (VFO/POCSAG/Spectrum/FM) - app/boot_splash.c — 2-second boot splash - app/pocsag/ — POCSAG decoder + BCH correction - app/display_rssi.c — RSSI indicator - main.c — entry point with custom init - syscalls.c — bare-metal _sbrk stub Build: arm-none-eabi-gcc -Os -flto -Wall -Werror -Wextra Size: 57.9KB Flash / 3.6KB RAM Controls: - 0-9: Direct frequency input (VFO) - SK2: POCSAG mode - SK1: Spectrum analyzer - 0: FM Radio - EXIT: Return to VFO - F/*: Toggle 512/1200 baud (in POCSAG)
98 lines
2.9 KiB
JavaScript
98 lines
2.9 KiB
JavaScript
function toggleVisibility(linkObj)
|
|
{
|
|
var base = $(linkObj).attr('id');
|
|
var summary = $('#'+base+'-summary');
|
|
var content = $('#'+base+'-content');
|
|
var trigger = $('#'+base+'-trigger');
|
|
var src=$(trigger).attr('src');
|
|
if (content.is(':visible')===true) {
|
|
content.hide();
|
|
summary.show();
|
|
$(linkObj).addClass('closed').removeClass('opened');
|
|
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
|
} else {
|
|
content.show();
|
|
summary.hide();
|
|
$(linkObj).removeClass('closed').addClass('opened');
|
|
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function updateStripes()
|
|
{
|
|
$('table.directory tr').
|
|
removeClass('even').filter(':visible:even').addClass('even');
|
|
}
|
|
function toggleLevel(level)
|
|
{
|
|
$('table.directory tr').each(function(){
|
|
var l = this.id.split('_').length-1;
|
|
var i = $('#img'+this.id.substring(3));
|
|
var a = $('#arr'+this.id.substring(3));
|
|
if (l<level+1) {
|
|
i.attr('src','ftv2folderopen.png');
|
|
a.attr('src','ftv2mnode.png');
|
|
$(this).show();
|
|
} else if (l==level+1) {
|
|
i.attr('src','ftv2folderclosed.png');
|
|
a.attr('src','ftv2pnode.png');
|
|
$(this).show();
|
|
} else {
|
|
$(this).hide();
|
|
}
|
|
});
|
|
updateStripes();
|
|
}
|
|
|
|
function toggleFolder(id)
|
|
{
|
|
//The clicked row
|
|
var currentRow = $('#row_'+id);
|
|
var currentRowImages = currentRow.find("img");
|
|
|
|
//All rows after the clicked row
|
|
var rows = currentRow.nextAll("tr");
|
|
|
|
//Only match elements AFTER this one (can't hide elements before)
|
|
var childRows = rows.filter(function() {
|
|
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
|
return this.id.match(re);
|
|
});
|
|
|
|
//First row is visible we are HIDING
|
|
if (childRows.filter(':first').is(':visible')===true) {
|
|
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
|
|
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
|
|
rows.filter("[id^=row_"+id+"]").hide();
|
|
} else { //We are SHOWING
|
|
//All sub images
|
|
var childImages = childRows.find("img");
|
|
var childImg = childImages.filter("[id^=img]");
|
|
var childArr = childImages.filter("[id^=arr]");
|
|
|
|
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
|
|
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
|
|
childImg.attr('src','ftv2folderclosed.png'); //children closed
|
|
childArr.attr('src','ftv2pnode.png'); //children closed
|
|
childRows.show(); //show all children
|
|
}
|
|
updateStripes();
|
|
}
|
|
|
|
|
|
function toggleInherit(id)
|
|
{
|
|
var rows = $('tr.inherit.'+id);
|
|
var img = $('tr.inherit_header.'+id+' img');
|
|
var src = $(img).attr('src');
|
|
if (rows.filter(':first').is(':visible')===true) {
|
|
rows.css('display','none');
|
|
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
|
} else {
|
|
rows.css('display','table-row'); // using show() causes jump in firefox
|
|
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
|
}
|
|
}
|
|
|