This is my build as shown here - http://sv1btlham.no-ip.org:8900/ (http://sv1btlham.no-ip.org:8900/), based something less than 100% to newest build, including some minor adaptions to serve my needs.
Some suggestions:
1.- I have included tools for searching frequencies in MW and SW band, for those you are interesting to identify the radio station heard.
the code is:
Frequency List:
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:rgba(0, 225, 255, 0.993)" onClick="window.open('http://www.mwlist.org/mwlist_quick_and_easy.php?area=1&kHz='+{Math.round(frequency)},'websdrstationinfo','');">
<span class="icon">MW List</span>
</button>
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:rgba(0, 225, 255, 0.993)" onClick="window.open('http://www.short-wave.info/index.php?freq='+{Math.round(frequency)}+'&timbus=NOW&ip=179&porm=4','websdrstationinfo','')">
<span class="icon">SW List</span>
</button>
P.S. MW list has to redirect to area the websdr is located. So http://www.mwlist.org/mwlist_quick_and_easy.php?area=1 is for Europe, http://www.mwlist.org/mwlist_quick_and_easy.php?area=2 for Asia, 3 for N. America, 4 for S. America, so you have to change the link in the code, according to your websdr area.
2.- In https://github.com/ny4qphil/PhantomSDR-Plus/blob/main/frontend/src/App.svelte (https://github.com/ny4qphil/PhantomSDR-Plus/blob/main/frontend/src/App.svelte) the code for Time (lines 1445-1485) does not work in Svelte. You can delete it and keep the newer Date/Clock function (lines 92-113).
3.- The architecture of website is a matter of personal taste and functionality. I've tried to minimize empty spaces, moving some components, as they are shown in attachments.
4.- I have embeded a media player from Audiomotion. This is not something basic, but helps the listeners to see the audio spectrum, when a record has been uploaded. The tool is free and I can explain how to be included in frontend/dist. I don't know how easy is to work real time and not only with recorded files.
5.- Colors when "mute" "NR" etc are used, they don't change, although they are defined to do so in the code (lines 2032-2041):
<div class="flex flex-col items-center">{formatter.format(currentDateTime)}
<div><br></div><div class="flex space-x-1 mb-1">
{#each [{ label: "MUTED", enabled: mute, color: "red" }, { label: "NR", enabled: NREnabled, color: "green" }, { label: "NB", enabled: NBEnabled, color: "green" }, { label: "AN", enabled: ANEnabled, color: "green" }] as indicator}
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class={`text-xs font-mono ${indicator.enabled ? `text-${indicator.color}-500` : `text-${indicator.color}-500 opacity-20`} relative z-10`}>
{indicator.label}
</span>
</div>
{/each}
</div>
These are my suggestions and remarks for now.
Thank you Phil, Bas and Sakis for your efforts.
Referring to 1: and 2: Instead of providing links to MW & SW station lookups, why don't we build a 'link' that is published inside the waterfall or somewhere similar, that allows the user to click and do an automatic lookup? Maybe post the current frequency displayed and the user clicks that and it launches a lookup?
3: I would like to work toward a 'modules' type interface that allows more flexability for the sysop to easier place the sections where they want them to go. The current screen I have is best for mobile users and keeps from having to scroll back and forth so much to use the site. I have a lot of mobile users and that was their biggest complaint. I have grouped frequency controls together, waterfall controls together, and audio controls together.
4: I would like to build a small audio oscilloscope and place it on the SDR interface. My FTdx-10 has one and I enjoy seeing it. Would anyone like to look into building that?
5: I am not seeing those errors on the current build.
Comments please.
Phil
Quote from: Phil - NY4Q on Jan 04, 2025, 03:11 PMReferring to 1: and 2: Instead of providing links to MW & SW station lookups, why don't we build a 'link' that is published inside the waterfall or somewhere similar, that allows the user to click and do an automatic lookup? Maybe post the current frequency displayed and the user clicks that and it launches a lookup?
I am not sure that I understood well, but these scripts grub the current frequency from the websdr and paste it opening a second tab with the given information of the station(s). Please try it on my website, but you have to tune to a broadcasting station. The idea to have this given information included to our websdr (in a window or frame maybe) is very good.
Quote from: Phil - NY4Q on Jan 04, 2025, 03:11 PM5: I am not seeing those errors on the current build.
The same is going on with your build also. When e.g. "Mute" is pressed (activated) the indicator "MUTED" had to be in red color (and the other indicators ->green)
This is your websdr screnshot:
Ah, I see you have already done that auto lookup. Very good. I will get those into upload I do today.
I did not understand the MUTED issue. I guess I thought those were always bright white.
I will make sure that :
MUTED = Red
NR, NB, AN = Green
Thank you!
Phil
Well the code is:
{#each [{ label: "MUTED", enabled: mute, color: "red" }, { label: "NR", enabled: NREnabled, color: "green" }, { label: "NB", enabled: NBEnabled, color: "green" }, { label: "AN", enabled: ANEnabled, color: "green" }] as indicator}
and I think the problem is that there is nowhere a function "indicator" that has to be exist, so to call the colors...
I have two suggestions for the frontend.
Some users asked me, if its possible to add some filter bandwidth preset buttons for ssb, like how they were in the frontend of old pa3fwm websdr. As I was not home i haven't looked into the code for this. Has anyone already done some filter preset buttons?
Other is more about a question of me:
Is it possible to do with svelte a second html, which is displaying a minimal version of PhantomSDR-Plus?
The usecase is: RIGI SDR is displayed on a public kiosk PC, there we would like to displayed something like /index_minimal.html whiteout chat box or any links.
The normal site should be the normal frontend
Maybe someone knows how this could be done.
Other I'll try to update the frontend on my systems tomorrow and try to adapt the community version as much as possible.
73 HB3XDC
Quote from: Emmanuel SV1BTL on Jan 04, 2025, 04:48 PMWell the code is:
{#each [{ label: "MUTED", enabled: mute, color: "red" }, { label: "NR", enabled: NREnabled, color: "green" }, { label: "NB", enabled: NBEnabled, color: "green" }, { label: "AN", enabled: ANEnabled, color: "green" }] as indicator}
and I think the problem is that there is nowhere a function "indicator" that has to be exist, so to call the colors...
I am about to sit down and look into it, but indicator is an array that is being examined:
indicator.label
indicator.enabled
indicator.color
etc
So that part is working, it's just that the specified color is not being activated, but the underlying functions are working because the MUTED, NB, NR, AN, all go 'bright' when set to on (indicator.enabled).
Phil
Quote from: hb3xdc on Jan 04, 2025, 06:37 PMI have two suggestions for the frontend.
Some users asked me, if its possible to add some filter bandwidth preset buttons for ssb, like how they were in the frontend of old pa3fwm websdr. As I was not home i haven't looked into the code for this. Has anyone already done some filter preset buttons?
Yes. I will add this after looking into the MUTED issue. Please post a list of the settings you wish to publish.
Quote from: hb3xdc on Jan 04, 2025, 06:37 PMOther is more about a question of me:
Is it possible to do with svelte a second html, which is displaying a minimal version of PhantomSDR-Plus?
Again yes. You would just need to figure out which areas you wish to publish. We would just need to add a flag in site_information.json for a siteMinimum setting or such and just disable the sections like we are already doing for siteChatEnabled.
Phil
Hi Phil
Filters on pa3fwm are best visible here:
http://websdr.hb3xdc.ch:8901/
There its dynamicly adapts the options to other bandwidths when changing modulation mode. But don't know how difficult this is to implement, as said had not done any tries till now.
Regarding the Kisok version we planned to publish a version with no links at all (no qrz and mwlist aswell) so user dont can exit the tab with phantomsdr.
The chatbox on Rigi is already removed currently as they just posted any kind of random bs there.
Kind regards
Gianni
Quote from: hb3xdc on Jan 04, 2025, 08:34 PMhttp://websdr.hb3xdc.ch:8901/
The famous RW3PS template which I have modified a lot! ;) but now I prefer this 16bit receiver and open source PhantomSDR project.
You can see the modifications here (http://sv3yy1.no-ip.org:8901/1index.html) and if you like it, I'll send you the template.
Quote from: Emmanuel SV1BTL on Jan 04, 2025, 09:45 PMThe famous RW3PS template which I have modified a lot! ;) but now I prefer this 16bit receiver and open source PhantomSDR project.
I also used Sergie's template. I have not heard from him in a long time. I hope he and his family are well.
I have the MUTED issue fixed and am about to add the lookups.
Phil
Thank you Phil!
Will I find the fix in the repo?
Quote from: Phil - NY4Q on Jan 04, 2025, 10:13 PMQuote from: Emmanuel SV1BTL on Jan 04, 2025, 09:45 PMThe famous RW3PS template which I have modified a lot! ;) but now I prefer this 16bit receiver and open source PhantomSDR project.
I also used Sergie's template. I have not heard from him in a long time. I hope he and his family are well.
I have the MUTED issue fixed and am about to add the lookups.
Phil
Yes still by far the best template for pa3fwm s websdr ig. But now i also do prefer our PhantomSDR-Plus by far over old websdr.
Still have it here running at home for kinda test and to see user feedback. Most feedback I got for PhantomSDR-Plus is very positive.
Besides of the already mentioned filters of RW3PS someone suggested that it'd be nice if your own memories or bookmarks would also be shown as markers in the waterfall.
Maybe also something we could have a look in to it.
Els I do not know any suggestions for app.svelte.
Will have a look into it tomorrow, as I just arrived home now and here it's already 10:30pm
Quote from: hb3xdc on Jan 04, 2025, 10:29 PMit'd be nice if your own memories
Maybe it would be better to build memories and save them to a file, so to upload them everywhere into every PhantomSDR is used, and not to re-create them, and a cookie cleanup to erase them...
SV2AMK (Sakis) is working on it, but he faces too many problems.
I will post again when I have uploaded today's updates. It may be a while as I am working in the yard some still.
Quote from: Emmanuel SV1BTL on Jan 04, 2025, 10:33 PMQuote from: hb3xdc on Jan 04, 2025, 10:29 PMit'd be nice if your own memories
Maybe it would be better to build memories and save them to a file, so to upload them everywhere into every PhantomSDR is used, and not to re-create them, and a cookie cleanup to erase them...
SV2AMK (Sakis) is working on it, but he faces too many problems.
Thats a very good idea to me. Would be a nice feature.
Ah some small thing I forgot about, maybe we find a way, how Tuning Step Selection is also usable, when user scrolls in freq part of the waterfall. I tried about this by my self some weeks ago, but didnt found out how its done.
Check this out. Development mode vs Compiled Mode - looks like a bug in the compiler or the system does not like the way the software is using dynamic variables in that else loop.
---
dev-mode.png
real-mode.png
Quote from: Phil - NY4Q on Jan 05, 2025, 12:55 AMDevelopment mode vs Compiled Mode
New problem now! And how are we going to use this Development mode?
Ok, the latest build file is up with the fix and additions mentioned from Emmanuel. There is a new place to add data on the site_information.json file - it is your ITU region. That variable builds the proper buttons for your area based on the bands in the waterfall.js file.
Gianni, I will look at your suggestions in the morning.
Phil
Phil, i saw that MUTE issue is done for your site, but I cannot find a solution for this "development mode", so to fix also mine.
I have also tried to activate AGC modes, but you are maybe working on it, 'cause it does not function as expected.
Quote from: Emmanuel SV1BTL on Jan 05, 2025, 10:53 AMI have also tried to activate AGC modes, but you are maybe working on it, 'cause it does not function as expected.
AGC is not 'ready for prime time'. ha
It should be commented out.
Quote from: Emmanuel SV1BTLPhil, i saw that MUTE issue is done for your site, but I cannot find a solution for this "development mode", so to fix also mine.
Go to the function and change the quotation marks enclosing the colors to back quotes.
From -> color: "red"
To -> color: 'red'
I plan to look at Gianni's filters today then next to move the Recording Options to the Audio section like you have Emmanuel - add the link for the player and such as time allows.
Quote from: Phil - NY4Q on Jan 05, 2025, 11:21 AMFrom -> color: "red"
To -> 'red
It was already with back quotes... No success, never mind!
Well, the player is a copy from "Audiomotion.js" https://audiomotion.app/ (https://audiomotion.app/), but it is downloaded to the disk and included to frontend/dist as folder : "audio"
The link to go there is http://ip:port/audio.index.html
The problem is that every time a compile is running, the dist folder is recreated, so the audio folder has to uploaded manually
I am including a .zip file
You may also find useful this: https://www.npmjs.com/package/audiomotion-analyzer (https://www.npmjs.com/package/audiomotion-analyzer)
Quote from: Emmanuel SV1BTL on Jan 05, 2025, 11:51 AMIt was already with back quotes... No success, never mind!
Out of curiosity, create a new user on your system and pull a full new package and then run the install.sh and recompile the frontend after that. Maybe something in your current setup is corrupt. I know this svelte / vite / npm is very temperamental!
frontend build when the install is new
npm install
npm audit fix
npm run build
Dear Phil,
For your WebSDR the MW list has to be adapted to your region. So you have to change
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:rgba(0, 225, 255, 0.993)" onClick="window.open('http://www.mwlist.org/mwlist_quick_and_easy.php?area=1&kHz='+{Math.round(frequency)},'websdrstationinfo','');">
<span class="icon">MW List</span>
to:
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:rgba(0, 225, 255, 0.993)" onClick="window.open('http://www.mwlist.org/mwlist_quick_and_easy.php?area=3&kHz='+{Math.round(frequency)},'websdrstationinfo','');">
<span class="icon">MW List</span>
The "area" in the code depends on the ITU area where the WebSDR is located, so to show the broadcasting MW stations properly.
According to the code:
area=1 -> Europe, Africa and Middle East
area=2 -> Asia and Pacific
area=3 -> North America, Central America, Caribbean
area=4 -> South America
For SW tool, there is nothing more to do. As you maybe noticed, the tool pickups your locator (from your IP I suppose) and shows you the broadcasting stations received by your WebSDR location.
Quote from: Emmanuel SV1BTL on Jan 05, 2025, 03:41 PMDear Phil,
For your WebSDR the MW list has to be adapted to your region. So you have to change
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:rgba(0, 225, 255, 0.993)" onClick="window.open('http://www.mwlist.org/mwlist_quick_and_easy.php?area=1&kHz='+{Math.round(frequency)},'websdrstationinfo','');">
<span class="icon">MW List</span>
to:
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:rgba(0, 225, 255, 0.993)" onClick="window.open('http://www.mwlist.org/mwlist_quick_and_easy.php?area=3&kHz='+{Math.round(frequency)},'websdrstationinfo','');">
<span class="icon">MW List</span>
The "area" in the code depends on the ITU area where the WebSDR is located, so to show the broadcasting MW stations properly.
According to the code:
area=1 -> Europe, Africa and Middle East
area=2 -> Asia and Pacific
area=3 -> North America, Central America, Caribbean
area=4 -> South America
For SW tool, there is nothing more to do. As you maybe noticed, the tool pickups your locator (from your IP I suppose) and shows you the broadcasting stations received by your WebSDR location.
I plan to make changes to that later. I made myself a note. Thanks!
P.S. Moving the cursor through the whole band, we all notice that the modulation and the band button indicator is changing. This is very good. Shall we think the same thing for the step also? E.g. Broadcasting band to automatically tuned to 5KHz step, european MW to 9KHz etc, but when we move away from the band with a cursor, the step to change to given default?
Quote from: Emmanuel SV1BTL on Jan 05, 2025, 03:48 PMP.S. Moving the cursor through the whole band, we all notice that the modulation and the band button indicator is changing. This is very good. Shall we think the same thing for the step also? E.g. Broadcasting band to automatically tuned to 5KHz step, european MW to 9KHz etc, but when we move away from the band with a cursor, the step to change to given default?
I will look into that too - that is a very good observation.
Phil
I will be away for a while - my father in law is here to help me work in the yard.
There's a bug in the verifyRegion function and I am looking into that.
Gianni - I have your bandwidth button section done and it is working good. I will upload a new App.svelte as soon as I chase down this bug in the function mentioned.
Phil
Sounds great, thank you for your work Phil. I appreciate it very much.
I tried today again to solve the frequency scrolling inside of the waterfall but somehow have not figured out a solution to make tuning steps working there
The latest build is up. If you are just pulling App.svelte, then for this change, you must also pull waterfall.js - they are working together to set up the waterfall display based on ITU region, and that value (siteRegion) is pulled from site_information.json.
The latest is compiled and running on http://websdr.lumpkinschools.com/
Phil
Quote from: Phil - NY4Q on Jan 05, 2025, 05:14 PMQuote from: Emmanuel SV1BTL on Jan 05, 2025, 03:48 PMP.S. Moving the cursor through the whole band, we all notice that the modulation and the band button indicator is changing. This is very good. Shall we think the same thing for the step also? E.g. Broadcasting band to automatically tuned to 5KHz step, european MW to 9KHz etc, but when we move away from the band with a cursor, the step to change to given default?
I will look into that too - that is a very good observation.
Phil
I will be away for a while - my father in law is here to help me work in the yard.
Well, is done Phil, by Sakis (SV2AMK). Please check my websdr.
Into every band, a step is defined as "default". Moving from the band, the Modulation and Step is changing automatically, according to the values we've defined. Moving with the cursor to the next band, Modulation, Band button AND the Step are changing again, etc.
If you think it is useful, I'll pass you the code, so to adapt it to this in git
Ok, there was a bug in the CB band setting and the audio was not recording, but those have both been fixed.
As of this post, there are no 'known' bugs.
Pull a new waterfall.js and audio.js for those fixes or simply pull a new package.
Phil
I think something that would be helpful is for someone to write a Help File, that we could place a link to and that file goes into the description of each section and explains those areas - that or add more detail to the tutorial and have an option to re-read that - which I think most people skip for some reason!
Would someone like to put that together?
My next task will be to add a 'toggle' to these fixed bandwidth buttons so they are be turned on and off - and to add those settings also the the bookmarks area for saving.
I am back to work today after Christmas holiday, so my coding will slow a bit.
Quote from: Emmanuel SV1BTL on Jan 06, 2025, 06:49 PMWell, is done Phil, by Sakis (SV2AMK). Please check my websdr.
Into every band, a step is defined as "default". Moving from the band, the Modulation and Step is changing automatically, according to the values we've defined. Moving with the cursor to the next band, Modulation, Band button AND the Step are changing again, etc.
If you think it is useful, I'll pass you the code, so to adapt it to this in git
I will take a look at this later today. Thank you.
Quote from: Phil - NY4Q on Jan 06, 2025, 06:56 PMOk, there was a bug in the CB band setting and the audio was not recording, but those have both been fixed.
As of this post, there are no 'known' bugs.
Pull a new waterfall.js and audio.js for those fixes or simply pull a new package.
Phil
Dear Sir,
is it possible to add date and time to recorded_audio.wav?
Thanks!
Darko, 9a7aof
Quote from: 9a7aof on Jan 06, 2025, 08:03 PMDear Sir,
is it possible to add date and time to recorded_audio.wav?
Thanks!
Darko, 9a7aof
Yes. I will add that to the list. Thanks.
Quote from: Phil - NY4Q on Jan 06, 2025, 07:54 PMHelp File
Sure! very good idea, I'll try to do it, but I'm afraid that a native english speaker has to edit and correct it!...
Quote from: Phil - NY4Q on Jan 06, 2025, 08:00 PMQuote from: Emmanuel SV1BTL on Jan 06, 2025, 06:49 PMWell, is done Phil, by Sakis (SV2AMK). Please check my websdr.
Into every band, a step is defined as "default". Moving from the band, the Modulation and Step is changing automatically, according to the values we've defined. Moving with the cursor to the next band, Modulation, Band button AND the Step are changing again, etc.
If you think it is useful, I'll pass you the code, so to adapt it to this in git
I will take a look at this later today. Thank you.
Maybe it's better to show a video, of what is exactly SV2AMK Sakis has achieved.
Let's say that we are on 160m. band. I am moving the cursor by hand, so look at the 1.- Modulation, 2.- Band button, 3.- Step and the buttons becoming "light" or "dark".
As you can see, moving the cursor, the three these button becoming "light", according to the situation and place of the cursor. You will see e.g. LSB on higher 160m band, CW on the lower 160m. After that we have USB modulation with 1KHz step till to 180m. band, where the modulation becomes AM, the step turns 5 KHz and the 180m. button is light. Then we move to MW band, where the modulation remains AM, but the step becomes 9 KHz and of course MW button becomes lighter.
Absolutely the same results when we QSY not moving the cursor, but the mouse wheel.
I found another bug - if the siteSDRBaseFrequency set in site_information.json was != 0, then the buttons would not populate correctly. I have fixed that and will upload a new App.svelte after I make a few other changes.
Phil
The latest bugs are fixed and a fresh App.svelte is ready to pull.
What about for those 'Tuning Steps' I build a slide bar that has the values, then you use the slide to make a choice and then just have a (+) and (-) button?
I could do the same for the static IF filters.
That would free up a lot of real estate. The interface is getting pretty cluttered. I do plan to move 'Recording Options' to the Audio Section since that has to do with audio.
Let me know your thoughts.
Phil
Quote from: Phil - NY4Q on Jan 07, 2025, 02:51 PMWhat about for those 'Tuning Steps' I build a slide bar that has the values, then you use the slide to make a choice and then just have a (+) and (-) button?
Why not, let us see it first, if they are practical
Quote from: Phil - NY4Q on Jan 07, 2025, 02:51 PMI could do the same for the static IF filters.
I personally use only the Bandwidth buttons with the default steps, but the pre-defined buttons or slider, would be a good idea for someone.
-------------
Tuning with the wheel on tune indicator under waterfall, it would be nice if using other steps than +/- 0.17KHz for SSB, +/- 0.03KHz for CW, +/- 0.57KHz for AM and +/- 0.64KHz for FM. Something like 0.01KHz for every mode would be nice for fine tuning using only the wheel and tuning indicator.
When we press a frequency on the waterfall e.g. 7000 KHz, using the modes CW, AM or FM the cursor follows exactly the frequency pressed, but when we make the same thing in SSB mode, there is a deviation which depends on Bandwidth (almost the ~1/2 of the bandwidth selected, so it is 1,46KHz when a 2.70 KHz bandwidth is selected etc.). Can this be fixed?
P.S. Bas has worked a lot on these above in the Twente websdr, and he maybe has an idea how to fix it. Take a look here foe example, of how they look and function fixed. We have the code too, but it is only for Twente websdr
SV2AMK WebSDR (http://makrisv2amk.ddns.me:58901/)
I have just posted an updated waterfall.js - there was in issue with multiple band segments being merged (ITU1, 2, and 3).
I am going to be focusing on cleaning up the App.svelte and other files that have been worked in - adding comments and such before I move ahead with anything else. That stuff is still a mess.
I have posted an updated App.svelte with fixes for the updateBandButton() function and for the colors not being passed to the MUTED, NB, NR, AN indicators on the display. I also added CTCSS to that list.
You can test it out at : http://websdr.lumpkinschools.com/
Phil
Thanks Phil,
the colored indicators work fine for me.
I deleted the old block and replaced it with yours,
after compiling and restarting the server everything works fine.
Darko. 9a7aof
Quote from: Phil - NY4Q on Jan 09, 2025, 11:32 PMI have posted an updated App.svelte with fixes for the updateBandButton() function and for the colors not being passed to the MUTED, NB, NR, AN indicators on the display. I also added CTCSS to that list.
You can test it out at : http://websdr.lumpkinschools.com/
Phil
Very Good!!!
How about to erase <br> so to save one line and add color to the Date/Time:
<div class="flex flex-col items-center">{formatter.format(currentDateTime)}<div><br></div><div class="flex space-x-1 mb-1">
to be done like this:
<div class="flex flex-col items-center"><span class="date-time" style="color:rgba(0, 225, 255, 0.993)" >{formatter.format(currentDateTime)}</span><div></div><div class="flex space-x-1 mb-1">
I have also added SQ, so the code is now:
<div class="flex flex-col items-center"><span class="date-time" style="color:rgba(0, 225, 255, 0.993)" >{formatter.format(currentDateTime)}</span>
<div></div><div class="flex space-x-1 mb-1">
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {mute ? 'text-red-500' : 'text-red-500 opacity-20 relative z-10'}">MUTED</span>
</div>
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {squelchEnable ? `text-orange-500` : `text-orange-500 opacity-20 relative z-10`}">SQ</span>
</div>
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {NREnabled ? `text-green-500` : `text-green-500 opacity-20 relative z-10`}">NR</span>
</div>
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {NBEnabled ? `text-green-500` : `text-green-500 opacity-20 relative z-10`}">NB<span>
</div>
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {ANEnabled ? `text-green-500` : `text-green-500 opacity-20 relative z-10`}">AN</span>
</div>
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {CTCSSSupressEnabled ? `text-yellow-500` : `text-yellow-500 opacity-20 relative z-10`}">CTCSS</span>
</div>
</div>
Quote from: Emmanuel SV1BTL on Jan 10, 2025, 07:40 AMHow about to erase <br> so to save one line and add color to the Date/Time:
<div class="flex flex-col items-center">{formatter.format(currentDateTime)}<div><br></div><div class="flex space-x-1 mb-1">
to be done like this:
<div class="flex flex-col items-center"><span class="date-time" style="color:rgba(0, 225, 255, 0.993)" >{formatter.format(currentDateTime)}</span><div></div><div class="flex space-x-1 mb-1">
Complete. Thank you Emmanuel. It was strange the array/props would display fine in dev, but not when compiled. It was probably a difference in versions of some of the plugins, etc.
Phil
Hi guys, just wanted to give an update.
Not even close to finishing yet, but the hard work is starting to pay off. Migrating from Svelte to plain HTML was tough, it's really not easy. The design will continue to improve, and features like chat are missing, etc., but the performance is much better than the old version.
It won't take long to finish, but the current state is not close to completion in terms of design, etc.
(the final release will be with most of the features, i dont know if stuff like the noise reduction will come close to the old but i will try, as this is really hard. The old one was compiled and i dont have the code for it.)
(https://i.imgur.com/OGfpWsK.png)
Hello Emmanuel - where can I download your latest version or in other words, where is the installation quide-line?
73 de HB9RYZ
Wolfgang
Quote from: magicint1337 on Jan 10, 2025, 11:48 AM(the final release will be with most of the features, i dont know if stuff like the noise reduction will come close to the old but i will try, as this is really hard. The old one was compiled and i dont have the code for it.)
We can compile it if you like, not a big problem.
Quote from: magicint1337 on Jan 10, 2025, 11:48 AMMigrating from Svelte to plain HTML was tough, it's really not easy.
We are used to Svelte by now, and it works well. What performance are you talking about? As Svelte is just compiled and optimised code.
I doubt HTML is faster as you still need java-script to make the functions work.
Personally I do like Svelte as it takes care about browser issues that you have to do yourself with HTML, where Svelte has a database with browser quirks and solves it during compilation.
Maintaining the Svelte project is not something I can do for much longer in my opinion, so I have decided to rewrite it in plain JavaScript. This version doesn't need to be compiled, should be smaller in size, can be edited more easily, and allows me to add more features since I didn't create the old frontend in the first place - I only heavily modified it. Svelte isn't bad by any means, but I'm aiming for more new features, and since I haven't compiled the WebAssembly of the old frontend and can't make changes to it, creating a plain version is a better decision. Additionally, it has fewer issues for now, as it's simply more responsive due to the different way it's coded.
Edit: I've also implemented significant improvements to the visualization components. The waterfall rendering engine has been optimized for better performance and visual clarity, while the envelope system has been redesigned to provide more accurate representations. Additionally, the marker system has been enhanced to offer more precise and user-friendly interactions. These changes contribute to an overall more robust and efficient frontend.
Ok cool.
Can't wait to see the new frontend, so we can adapt ;)
We all did work with HTML and Java-script before on websdr.org, but sadly it needs extra lines for several browsers.
Can't wait to see the code.
Quote from: HB9RYZ on Jan 10, 2025, 02:35 PMHello Emmanuel - where can I download your latest version or in other words, where is the installation quide-line?
73 de HB9RYZ
Wolfgang
"My" latest version is based almost 90% on Phil's latest work. I have some differences like the older way I build the bands and the automatic steps through the whole 0-30 MHz. We are working with SV2AMK (Sakis) to adapt Phil's template with these improvements and I think that during the weekend Sakis will contact Phil, so he to approve the modifications.
If you wish to see my files, they are here as attachments. The only two that they are different from those in the repository.
Did anyone work on the mouse wheel tuning step issue or do I need to look at that?
Quote from: Phil - NY4Q on Jan 10, 2025, 06:19 PMDid anyone work on the mouse wheel tuning step issue or do I need to look at that?
I think that this is resolved in my setup. Examine my files above and look my websdr (if we are talking about the same thing).
Maybe I misunderstand.
The issue I am referring to is when the mouse cursor is on the frequency display and the tuning step is set to 100 Hz, then the mouse wheel moves the frequency steps of 100 Hz.
But when the mouse cursor is on the waterfall and you roll the mouse wheel, the tuning steps are not based on the chosen step setting and is also different for each mode. I believe Gianni mentioned this?
Quote from: Phil - NY4Q on Jan 10, 2025, 06:54 PMThe issue I am referring to is when the mouse cursor is on the frequency display and the tuning step is set to 100 Hz, then the mouse wheel moves the frequency steps of 100 Hz.
This is resolved by me, as the video shoes.
Quote from: Phil - NY4Q on Jan 10, 2025, 06:54 PMBut when the mouse cursor is on the waterfall and you roll the mouse wheel, the tuning steps are not based on the chosen step setting and is also different for each mode. I believe Gianni mentioned this?
I was the one that I've mentioned it 2-3 days before. I think that it has a relation to this part of the code:
function handleWheel(node) {
function onWheel(event) {
event.preventDefault();
const delta = event.deltaY > 0 ? -1 : 1;
const isShiftPressed = event.shiftKey;
const isAltPressed = event.altKey;
// Convert frequency to Hz for calculations
let frequencyHz = Math.round(parseFloat(frequency) * 1e3);
function adjustFrequency(freq, direction, shiftPressed, altPressed) {
const step = currentTuneStep || (altPressed ? 10000 : shiftPressed ? 1000 : defaultStep);
const lastDigits = freq % step;
if (lastDigits === 0) {
return freq + direction * step;
} else if (direction > 0) {
return Math.ceil(freq / step) * step;
} else {
return Math.floor(freq / step) * step;
}
}
frequencyHz = adjustFrequency(frequencyHz, delta, isShiftPressed, isAltPressed);
// Convert back to kHz and ensure 2 decimal places
frequency = (frequencyHz / 1e3).toFixed(2);
// Ensure frequency is not negative
frequency = Math.max(0, parseFloat(frequency));
frequencyInputComponent.setFrequency(frequencyHz);
handleFrequencyChange({ detail: frequencyHz });
}
node.addEventListener("wheel", onWheel);
return {
destroy() {
node.removeEventListener("wheel", onWheel);
},
};
}
I will look at this, but I think a better way to tune would be to place the mouse over the display and depending on which digit you are hovering, then that digit moves and the frequency changes.
If you hover over 1 MHz, then the steps are 1 MHz. If you hover over 10 Hz, then the step is 10 Hz. Or maybe click above or below the digit so you still easy use on a mobile device?
Eliminate the buttons and clutter.
Quote from: Phil - NY4Q on Jan 10, 2025, 07:14 PMI will look at this, but I think a better way to tune would be to place the mouse over the display and depending on which digit you are hovering, then that digit moves and the frequency changes.
If you hover over 1 MHz, then the steps are 1 MHz. If you hover over 10 Hz, then the step is 10 Hz. Or maybe click above or below the digit so you still easy use on a mobile device?
Eliminate the buttons and clutter.
Excellent, I wish you success with it!
I am thinking. The interface even as advanced as it is, is clunky. I am looking at my FTdx-10. One half is waterfall and such things, and the other half is buttons. If I tap a button and let's say band, then an additional menu pops up on the waterfall with all the band options. I choose a band, and the system moves to that band and the band menu disappears. As it should. We need to build a system like this. I do not have those skills as of yet. We need some better artistic coding than I am capable of.
Anyway, just thoughts.
Quote from: Phil - NY4Q on Jan 10, 2025, 07:43 PMI am thinking. The interface even as advanced as it is, is clunky. I am looking at my FTdx-10. One half is waterfall and such things, and the other half is buttons. If I tap a button and let's say band, then an additional menu pops up on the waterfall with all the band options. I choose a band, and the system moves to that band and the band menu disappears. As it should. We need to build a system like this. I do not have those skills as of yet. We need some better artistic coding than I am capable of.
Anyway, just thoughts.
Im pretty good in artistic coding, if we have like visual samples i may be able to do something similiar in the new frontend. I was thinking about multiple styles anyway. My plan for the new frontend to make the code extremly maintainable and readable and easy adjustable for anybody :)
Quote from: Phil - NY4Q on Jan 05, 2025, 05:14 PMQuote from: Emmanuel SV1BTL on Jan 05, 2025, 03:48 PMP.S. Moving the cursor through the whole band, we all notice that the modulation and the band button indicator is changing. This is very good. Shall we think the same thing for the step also? E.g. Broadcasting band to automatically tuned to 5KHz step, european MW to 9KHz etc, but when we move away from the band with a cursor, the step to change to given default?
I will look into that too - that is a very good observation.
Phil
Hi Phill.
I have downloaded your App.svelte and waterfall.js of date Jan 09 2025, and I made some modifications to let the websdr auto tunning steps work as the Emmanuel's one.
So when you move the wheel and you enter a band the step takes the value the that I have inserted in the waterfall.js database for the bands you have created and the corresponded step button "lights up".
When you exit the band -with mouse wheel- the step changes again and when you enter the next band it changes again and so on...
To do this I inserted a new variable named stepi in the band database in the waterfall.js like this:
{ ITU: 123,
name: 'MW', startFreq: 530000, endFreq: 1700000, stepi: 9000, color: 'rgba(199, 12, 193, 0.6)',
modes: [{ mode: MODES.AM, startFreq: 530000, endFreq: 1700000 }]
},
{ ITU: 123,
name: '', startFreq: 1700000, endFreq: 1800000, stepi: 5000, color: '#ffffff00',
modes: [{ mode: MODES.AM, startFreq: 1700000, endFreq: 1800000 }]
},
{ ITU: 123,
name: '160m', startFreq: 1800000, endFreq: 2000000, stepi: 1000, color: 'rgba(50, 168, 72, 0.6)',
modes: [
{ mode: MODES.CW, startFreq: 1800000, endFreq: 1840000 },
{ mode: MODES.LSB, startFreq: 1840000, endFreq: 2000000 }]
},
Please note that there is an extra record between MW and 160m bands with no name and black line color to fill the band "gap" and have another step...
Then I modified the App.svelte :
I declared a new var by the name prevBand Then I added one more "if " in your updateBandButton() function as follows:
function updateBandButton() {
currentBand = -1;
for (var i = 0; i < bandArray.length; i++) {
if(frequency >= (bandArray[i].startFreq / 1000) && frequency <= (bandArray[i].endFreq / 1000) && ((bandArray[i].ITU === siteRegion) || bandArray[i].ITU === 123)) {
currentBand = i; if (prevBand != currentBand) {currentTuneStep = (bandArray[i].stepi)};
}
}
prevBand = currentBand;
}
So the function additionally checks if the band has changed and updates currentTuneStep using "stepi" " prevBand" and "currentBand".
To avoid adding extra buttons with no name I added one more "if " to your band selection section to check if the name of the button is not empty before it creates it, like this:
<!-- Begin Band Selection Section -->
<div class="w-full mt-4">
<h3 class="text-white text-lg font-semibold mb-2">Bands</h3>
<div class="grid grid-cols-1 sm:grid-cols-8 gap-2">
{#each bandArray as bandData, index}
{#if verifyRegion(bandData.ITU)}
{#if bandData.name != ""}
{#if printBandButton(bandData.startFreq,bandData.endFreq)}
<button id="band-selector" class="retro-button text-sm text-white fontrbold h-7 text-base rounded-md flex items-center justify-center border border-gray-600 shadow-inner transition-all duration-200 ease-in-out {currentBand === index ? 'bg-blue-600 pressed scale-95' : 'bg-gray-700 hover:bg-gray-600'}"
on:click={() => handleBandChange(index)} title="{bandData.name}">{bandData.name}
</button>
{/if}
{/if}
{:else}
{/if}
{/each}
</div>
<hr class="border-gray-600 my-2" />
</div>
<!-- End of Band Selection Area -->
It works well and you can check it in my test server : sv2amk.ddns.net:9002 which is not published in the phantom sdr list.
I have not edited the entire database and the step values are random just for demo purposes.
I send the two files inside a compressed file: appsvelte-warerfalljs.tgz
Please check them and include the changes if you like.
73 de sv2amk.
Bookmarks and Popup Window
As you have noticed, the Bookmarks (Memories) are stored, recalled, edited in a popup window, which when is activated, we cannot work the Main window. I have edited the code, so the Memory (bookmark) window to be shown into the main window, so to allow working in the rest of the area. This window can be opened or closed, without to affect the rest of the GUI.
The newer code is this (replace the lines 2389-2482 in App.svelte located in the reposity (https://github.com/ny4qphil/PhantomSDR-Plus/blob/main/frontend/src/App.svelte)):
<!-- Begin Bookmark / Memories Section -->
<button id="bookmark-button" class="glass-button text-white font-bold py-2 px-4 rounded-lg flex items-center w-full justify-center" on:click={toggleBookmarkPopup}>
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" viewBox="0 0 20 20" fill="currentColor">
<path d="M5 4a2 2 0 012-2h6a2 2 0 012 2v14l-5-2.5L5 18V4z" />
</svg>
Bookmarks
</button>
<div id="user_count_container" class="w-full mt-4 bg-gradient-to-r from-purple-600 to-blue-600 rounded-lg p-1">
<div id="total_user_count" class="bg-gray-800 rounded-md p-2 text-center flex justify-between items-center">
<!-- Content will be populated by JavaScript -->
</div>
</div>
<!-- Bookmark Popup Window -->
{#if showBookmarkPopup}
<div class="relative inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
<div class="bg-gray-800 p-6 rounded-lg max-w-lg w-full max-h-[80vh] flex flex-col">
<div class="flex justify-between items-center mb-3">
<h2 class="text-lg font-bold text-white">Bookmarks</h2>
<button class="text-gray-400 hover:text-white" on:click={toggleBookmarkPopup}>
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<!-- Add Bookmark Section -->
<div class="mb-4">
<label class="block text-sm font-medium text-gray-300 mb-4">Add New Bookmark</label>
<div class="flex items-center gap-2">
<input class="glass-input text-white text-sm rounded-lg focus:outline-none px-3 py-2 flex-grow" bind:value={newBookmarkName} placeholder="Bookmark name" />
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:#ffffff" on:click={addBookmark}>
Add
</button>
</div>
</div>
<!-- Current Link Section -->
<div class="mb-4">
<label class="block text-sm font-medium text-gray-300 mb-2">Current Link</label>
<div class="flex items-center gap-2">
<input type="text" class="glass-input text-white text-sm rounded-lg focus:outline-none px-3 py-2 flex-grow" value={link} readonly />
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:#ffffff" on:click={handleLinkCopyClick}>
Copy
</button>
</div>
</div>
<!-- Bookmarks List -->
<div class="overflow-y-auto flex-grow h-80">
<label class="block text-sm font-medium text-gray-300 mb-2">Saved Bookmarks</label>
{#each $bookmarks as bookmark, index}
<div class="glass-panel rounded-lg p-3 flex items-center justify-between mb-2">
<div class="flex flex-col">
<span class="text-white text-sm">{bookmark.name}</span>
<span class="text-gray-400 text-xs">{(bookmark.frequency / 1000).toFixed(3)} kHz</span>
</div>
<div class="flex gap-2">
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:#ffffff" on:click={() => goToBookmark(bookmark)}>
Go
</button>
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:#ffffff" on:click={() => copy(bookmark.link)}>
Copy
</button>
<button class="glass-button text-white py-1 px-3 mb-2 lg:mb-0 rounded-lg text-xs sm:text-sm" style="color:#ffffff" on:click={() => deleteBookmark(index)}>
Delete
</button>
</div>
</div>
{/each}
</div>
</div>
</div>
{/if}
The final result can be shown here: SV1BTL PhantomSDR+ (http://sv1btlham.no-ip.org:8900/)
Just waking up here in the ole US. I will get these changes into the community App today sometime. I will also move the recording button over to audio section. I will also include the link to the audio player, but it will be pointed to your player Emmanuel. If that is a problem, let me know please.
Phil
Quote from: Phil - NY4Q on Jan 11, 2025, 10:51 AMJust waking up here in the ole US. I will get these changes into the community App today sometime. I will also move the recording button over to audio section. I will also include the link to the audio player, but it will be pointed to your player Emmanuel. If that is a problem, let me know please.
Phil
GM Phil,
1.- If you like the above changes to the Bookmarks/Memories code, please note that I have changed it once more, so the buttons to be the same format/design, as the rest of the GUI. So copy the newer code.
2.- I don't have problem to point to my player of course, but I wonder what will happen if my server is temporary closed.
If you don't wish to include player folder to the repository and include it to the compile procedure, so to be copied in to the frontend/dist, then you can of course point to my server.
I am including once more the folder as an attachment (zip file). It has to be uploaded in frontend/dist section and the link must point to
href="{siteInformation}/audio/index.html where {siteInformation} is the ip address of the server.
Quote from: Emmanuel SV1BTL on Jan 11, 2025, 08:58 AMThe final result can be shown here
It works fine. I delete the old block, copy the selected text from the forum, after compiling and restarting the popup disappears.
Quote from: Phil - NY4Q on Jan 11, 2025, 10:51 AMI will get these changes into the community App today sometime. I will also move the recording button over to audio section.
Phil, please don't forget to add the date and time to recorded_audio.wav. Just a reminder.
:)
Everything looks good. I'll post it in a bit.
I did move the Recording, but did not include the link to the audio player.
Other than little tweaks here and there, it is probably time to ease up and wait for Steven to get the next version posted. Personally I would prefer to stay with Svelte, but he is the author and is calling the shots.
Phil
Quote from: 9a7aof on Jan 11, 2025, 12:47 PMPhil, please don't forget to add the date and time to recorded_audio.wav. Just a reminder.
:)
Thank you for the reminder! I will add that before posting.
Take your time, make sure it works.
Test it a few days before uploading.
I suggest no more then 1 upload a month for the github, better maybe if needed after a week.
But uploading to many updates all the time will give problems for people that use their own code.
They have to adapt all the time....if they update.
I'm against daily updates. Test a few days, and if enough new stuff, update the github.
Sorry but I do ignore most, just because it takes too much time to test/backup/adapt etc.
Some people want to go tooooooo fast and update all the time...please don't.
Quote from: Phil - NY4Q on Jan 10, 2025, 06:54 PMMaybe I misunderstand.
The issue I am referring to is when the mouse cursor is on the frequency display and the tuning step is set to 100 Hz, then the mouse wheel moves the frequency steps of 100 Hz.
But when the mouse cursor is on the waterfall and you roll the mouse wheel, the tuning steps are not based on the chosen step setting and is also different for each mode. I believe Gianni mentioned this?
Hi Phil, I'll be updating my servers to the version you're currently working on, either today or tomorrow. And yes, that's exactly what I meant.
Quote from: Bas ON5HB on Jan 11, 2025, 05:25 PMI suggest no more then 1 upload a month for the github, better maybe if needed after a week.
But uploading to many updates all the time will give problems for people that use their own code.
They have to adapt all the time....if they update.
It does not take much time to adapt the updates, if you use your own template (like me). My "template" is almost >90% of this in the repository and the parts of code that I don't use (because I prefer mine) are commended with <!-- -->
The architecture of the layout used, is also different, so my editing/updates are focused only to the newer part of the total code, or the changed ones.
Maybe it will be better Phil to indicate the code(s) changed, referring to the code lines of the updated files. This will make the editing faster for those using their own template. For all others, using the community template, a simple download and compile is enough. The use of these "keywords" written in site_information.json is probably the most clever idea of the setup.
Manolis, we are in the game al the time, not all do.
As such a major update by Phil every month is a better idea.
I told you before, some of you go way to fast, resulting in updates in hours, often not properly tested
As such I'm against it. Slow down....I said this before.
Well Bas, Phil has asked for ideas AND codes (if someone has a skill for this), so to test it again (after the creator has already done) and IF HE thinks that a particular idea (and code) is useful, THEN HE will be the person to upload it to the community via repository. There are some members, who had wonderful ideas, most of them have implemented by Phil, some others have created or modified parts of the code, and the life is going on. No one has forced Phil to upload/update NOW, without testing, or without an approvement of how useful an new code will be for the community.
If a member wishes to apply a non "official" update using a "copy-paste" process, he is free to do this, since the code is uploaded to the forum. He will not be a kind of a beta-tester this way, and if the member finds that there is a bug to the newer part of code, returning to the previous status is also easy.
I am not "in a hurry" so to "slow down" and I do have also a profession very far away from coding, working several hours everyday, so I can very easily understand the lack of the time. But I cannot really understand why an idea or a ready and tested code has to be uploaded "once per month" as you've mentioned, although it is maybe ready and functional to be uploaded whenever Phil has the time to do it.
Have a nice weekend!
Quote from: Bas ON5HB on Jan 11, 2025, 05:25 PMTake your time, make sure it works.
Test it a few days before uploading.
That's what I plan to do. I have it installed on my test machine and will be playing around with it.
And again, all the things we were asking for I believe we have in place. You may wish to move things around on the page or disable certain sections and that is always going to be - I believe it is time to pause and wait for Steven's updates.
Im working hard on my frontend update
Latest files (App.svelte, waterfall.js, and audio.js) have been sent to Github.
I added names to the new bands entered in the this.bands array in waterfall.js and did not modify the code that ignored no-name bands. The ITU has designations for those spectrum. We can just use those names as we add more bands (if we do).
I checked all as best I could, but please report any bugs.
Phil
Quote from: Phil - NY4Q on Jan 13, 2025, 06:37 PMaudio.js
The added full date/time in the name of the recorded files, works very well!
Suggestion for the Collapsible Window
As you've maybe noticed, the right part of the collapsible window is "empty". You can add more information to this area, without making the whole window bigger. The solution is to divide this window to 2 "subwindows" and to resize both of them according to your needs. You can check my server for the result.
If you Phil find this useful, you can include it in a future update.
The edited code is this, including the already existing code (lines 1781 - 1814 in App.svelte - github):
<!-- Collapsible Content -->
<div id="collapsible-menu" class="hidden mt-3 bg-gray-700 p-3 rounded">
<div class="columns">
<div class="first-column">
<ul style="font-size: 0.91rem; text-align: left;">
<b>Setup & Configuration:</b>
<br />
<span style="/*text-decoration: line-through*/"><b>Hardware:</b> {siteHardware}</span>
<br /> <br />
<span style="/*text-decoration: line-through*/"><b>Software:</b> {siteSoftware}</span>
<br /><br />
<span style="/*text-decoration: line-through*/"><b>Note:</b>
<br />
{siteNote}
<br />
<br />
<div style="font-weight: bold;">Current band propagation for Europe and statistics:</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<img src="https://images.lightningmaps.org/blitzortung/europe/index.php?map=5&t=5092072" alt="Lightning Map" style="margin-right: 10px;" />
<a href="https://www.hamqsl.com/solar.html" title="Click for more information">
<img alt="Solar propagation" src="https://www.hamqsl.com/solar101vhf.php" /> </a><br />
</div>
</div>
<div class="second-column">
<!--- Any other information -->
</div>
</div>
</div>
</div>
</div>
<style>
.hidden {
display: none;
}
/* Setting the container width to 100% enabling overflow auto to clear the float */
.columns {
width: 100%;
overflow: auto; /* To clear the float */}
/* Styling for the left column */.first-column {
float: left; /* Float left to place it on the left side */ width: 50%; /* Taking 50% of the container width */}
/* Styling for the right column */.second-column {
float: right; /* Float right to place it on the right side */ width: 50%; /* Taking 50% of the container width */}
</style>
<!--End of Titel Box -->
Quote from: Phil - NY4Q on Jan 13, 2025, 06:37 PMI checked all as best I could, but please report any bugs.
Phil
Well now I am seeing NO decodes on FT8 at my site, so the FT8 decode is NOT WORKING.
Quote from: Phil - NY4Q on Jan 14, 2025, 12:21 AMWell now I am seeing NO decodes on FT8 at my site, so the FT8 decode is NOT WORKING.
My mistake - I had not reset my audio sample rate back down to 12000. All GOOD.
Over the course of us all getting here, I have been working on a 'less cluttered' interface and have uploaded that to the git - it is entitled App-Mobile-Devices.svelte and you can see it on the Lumpkin site as of now. Basically, I have just hidden a lot of real estate behind popup screens.
http://websdr.lumpkinschools.com/
You will need to add the following for mobile device detection :
npm i svelte-device-info
Very good Phil. But please explain to us, how we'll use it.
Shall we upload to our server the "App-Mobile-Devices.svelte" file and a mobile user will be redirected to this, or something else, e.g. replace the code of the App-Mobile-Devices.svelte with this of the App.svelte?
Quote from: Emmanuel SV1BTL on Jan 15, 2025, 10:34 AMVery good Phil. But please explain to us, how we'll use it.
Shall we upload to our server the "App-Mobile-Devices.svelte" file and a mobile user will be redirected to this, or something else, e.g. replace the code of the App-Mobile-Devices.svelte with this of the App.svelte?
Is is just there if you want to simplify the interface a bit. The only 'mobile' feature on now is the fine tuning buttons are printed in a different sequence on a desktop vs a mobile device. And most of the other buttons are behind popup menus, so you don't have to scroll up and down so much to find things.
You could use both Svelte apps if you wanted to tinker with the setup a bit, but that'd take some time.
So I uploaded that version is anyone wants to use it. You just rename it and compile.
Phil
Quote from: Emmanuel SV1BTL on Jan 13, 2025, 09:39 PM<!-- Collapsible Content -->
<div id="collapsible-menu" class="hidden mt-3 bg-gray-700 p-3 rounded">
<div class="columns">
<div class="first-column">
<ul style="font-size: 0.91rem; text-align: left;">
<b>Setup & Configuration:</b>
<br />
<span style="/*text-decoration: line-through*/"><b>Hardware:</b> {siteHardware}</span>
<br /> <br />
<span style="/*text-decoration: line-through*/"><b>Software:</b> {siteSoftware}</span>
<br /><br />
<span style="/*text-decoration: line-through*/"><b>Note:</b>
<br />
{siteNote}
<br />
<br />
<div style="font-weight: bold;">Current band propagation for Europe and statistics:</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<img src="https://images.lightningmaps.org/blitzortung/europe/index.php?map=5&t=5092072" alt="Lightning Map" style="margin-right: 10px;" />
<a href="https://www.hamqsl.com/solar.html" title="Click for more information">
<img alt="Solar propagation" src="https://www.hamqsl.com/solar101vhf.php" /> </a><br />
</div>
</div>
<div class="second-column">
<!--- Any other information -->
</div>
</div>
</div>
</div>
</div>
<style>
.hidden {
display: none;
}
/* Setting the container width to 100% enabling overflow auto to clear the float */
.columns {
width: 100%;
overflow: auto; /* To clear the float */}
/* Styling for the left column */.first-column {
float: left; /* Float left to place it on the left side */ width: 50%; /* Taking 50% of the container width */}
/* Styling for the right column */.second-column {
float: right; /* Float right to place it on the right side */ width: 50%; /* Taking 50% of the container width */}
</style>
<!--End of Titel Box -->
I will add this at my next edit / test time I have. Thanks.
Phil
Why don't we do this now that we have chased down all the bugs and have fine-tuned our sites to our liking, send me your App.svelte and we can place those in the repository for use. We can name them after our calls if you wish and then people can view the site and pick the layout they prefer. They'd just need to rename the preferred site App and compile. I can amend the INSTALL.md to explain that.
App-NY4Q.svelte for example.
What do you think?
Phil
Quote from: Phil - NY4Q on Jan 17, 2025, 01:03 PMWhat do you think?
Very good idea, Phil! I'll prepare mine.
Meanwhile some remarks:
- I think that site_information.json must include two more keywords:
"siteCity": "siteCity", and
"siteAntenna": "siteAntenna",
- A suggestion about VFO A/B button. I have rewritten it so the button to change its label after pressing it. The code is:
<button
on:click={() => toggleVFO(vfo)}
class="retro-button text-white font-bold h-10 w-20 text-xs rounded-md flex items-center justify-center border border-gray-600 shadow-inner transition-all duration-200 ease-in-out {toggleVFO === vfo ? 'bg-green-600 pressed scale-95' : 'bg-blue-700 hover:bg-gray-600'}">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" viewBox="0 0 20 20" fill="currentColor">
<path d="M5 4a2 2 0 012-2h6a2 2 0 012 2v14l-5-2.5L5 18V4z" />
</svg>
{vfo}
</button>
- A way to show VFO, Mode and Bandwidth located in the Freq/S-meter window, in a single line:
<div class="flex items-center justify-center text-xs w-48">
<span class="text-yellow-400 px-1">{vfo}</span>
<span class="text-gray-400 px-1">|</span>
<span class="text-green-400 px-1">{demodulation}</span>
<span class="text-gray-400 px-1">|</span>
<span class="text-cyan-300 px-1">{bandwidth} kHz</span>
</div>
- Also adding SQZ pressed indicator in the same Freq/S-meter window, among with the other indicators:
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {mute ? 'text-red-500' : 'text-red-500 opacity-20 relative z-10'}">MUTED</span>
</div>
<div class="px-1 py-0.5 flex items-center justify-center w-12 h-5 relative overflow-hidden">
<span class="text-xs font-mono {squelchEnable ? `text-orange-500` : `text-orange-500 opacity-20 relative z-10`}">SQ</span>
</div>
...etc
- I have also changed the hover color over "Record", "Stop" and "Download" buttons:
<!-- Recording Options -->
<div class="mt-6 w-full">
<h3 class="text-white text-lg font-semibold mb-2">Recording Options</h3>
<div class="flex justify-center gap-4">
<button class="bg-gray-700 hover:bg-red-600 text-white font-medium py-2 px-4 rounded-lg flex items-center transition-colors {isRecording ? 'ring-2 ring-red-500' : ''}" on:click={toggleRecording}>
{#if isRecording}
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-2" viewBox="0 0 20 20" fill="currentColor">
<path d="M10 18a8 8 0 100-16 8 8 0 000 16zM8 7a1 1 0 00-1 1v4a1 1 0 001 1h4a1 1 0 001-1V8a1 1 0 00-1-1H8z" />
</svg>
Stop
{:else}
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-2" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z" clip-rule="evenodd" />
</svg>
Record
{/if}
</button>
{#if canDownload}
<button class="bg-gray-700 hover:bg-green-600 text-white font-medium py-2 px-4 rounded-lg flex items-center transition-colors" on:click={downloadRecording}>
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-2" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clip-rule="evenodd" />
</svg>
Download
</button>
{/if}
</div>
</div>
Please look for all them functions in my http://sv1btlham.no-ip.org:8900SV1BTL PhantomSDR+ (http://sv1btlham.no-ip.org:8900/).
The changes look great Emmanuel. I'll get those in the community version this weekend. Thanks.
Phil
GM Phil,
I've tested the newer App.svelte and it's really working very good. SV2AMK (Sakis) has to make the corrections needed to the "stepi", because the step 9000 is not the appropriate for all bands :D
I'm trying to adapt my template to the community waterfall.js, but for now I'm facing some problems. My template is working excellent with my version of waterfall.js, but not with this in the community github, so for now I cannot send it to you so to upload it in github - except it will be uploaded together with my version of waterfall.js. Please let me know if this will be o.k.
Have you tried to make AGC switcher to work? As I can see, you have included the code to App.svelte (hidden).
Something more:
When I pick a new bandwidth with the preset buttons, I've noticed that the bandwidth is changed to the newer value, but if I want to jump to another preset, then the bandwidth first returns to its default for the mode value and then allows me to select another value according to the preset button. I think that you wanted to work this way, as it is mentioned on the code:
// Used to track bandwidth as to make sure the //
// static bandwidth buttons can be enabled and returened //
// to the default bandwidth for thr chosen mode //
let currentBandwidth = 0;
let staticBandwidthEnabled = false;
but can we overcome this step, so the change of the bandwidth to be activated immediately, without passing through the default value?
Quote from: Emmanuel SV1BTL on Jan 19, 2025, 10:20 AMGM Phil,
I've tested the newer App.svelte and it's really working very good. SV2AMK (Sakis) has to make the corrections needed to the "stepi", because the step 9000 is not the appropriate for all bands :D
Afternoon, and very good. Yes, that needed to be done.
Quote from: Emmanuel SV1BTL on Jan 19, 2025, 10:20 AMI'm trying to adapt my template to the community waterfall.js, but for now I'm facing some problems. My template is working excellent with my version of waterfall.js, but not with this in the community github, so for now I cannot send it to you so to upload it in github - except it will be uploaded together with my version of waterfall.js. Please let me know if this will be o.k.
What is different with your waterfall.jd file? Maybe we can merge it to the community version.
Quote from: Emmanuel SV1BTL on Jan 19, 2025, 10:20 AMHave you tried to make AGC switcher to work? As I can see, you have included the code to App.svelte (hidden).
I have not looked further into this. I began the functions, then wanted to look into other open source code of AGC to see what they are doing. But you are welcome to play with it some to see if you can get a good result.
Quote from: Emmanuel SV1BTL on Jan 19, 2025, 10:20 AMSomething more:
When I pick a new bandwidth with the preset buttons, I've noticed that the bandwidth is changed to the newer value, but if I want to jump to another preset, then the bandwidth first returns to its default for the mode value and then allows me to select another value according to the preset button. I think that you wanted to work this way, as it is mentioned on the code:
// Used to track bandwidth as to make sure the //
// static bandwidth buttons can be enabled and returened //
// to the default bandwidth for thr chosen mode //
let currentBandwidth = 0;
let staticBandwidthEnabled = false;
but can we overcome this step, so the change of the bandwidth to be activated immediately, without passing through the default value?
To be truthful, I found it difficult to switch from one level to another without first going back to the default, so I let it as an on/off type filter rather than switching from one to another. This and AGC and a few other things I would like to see 'fixed', but I haven't had the time yet to look deeply.
Phil
I see what you mean Emmanuel. What we will do is create a folder in the repository and you just include what files are specific to your site and we'll place those there so if people want to use those, then they can.
active_sites/NY4Q/specific_files_go_here
active_sites/SV1BTL/specific_files_go_here
etc...
Phil
Quote from: Phil - NY4Q on Jan 19, 2025, 08:22 PMI see what you mean Emmanuel. What we will do is create a folder in the repository and you just include what files are specific to your site and we'll place those there so if people want to use those, then they can.
active_sites/NY4Q/specific_files_go_here
active_sites/SV1BTL/specific_files_go_here
etc...
Phil
Good idea, so I have to prepare once more the specified files including audio folder & a help (for the installation) file, and send them all as a .zip. Shall I uploaad them here, or send them via email?
Either is fine!
Quote from: Emmanuel SV1BTL on Jan 19, 2025, 09:31 PMGood idea, so I have to prepare once more the specified files including audio folder & a help (for the installation) file, and send them all as a .zip. Shall I uploaad them here, or send them via email?
Either is fine!
Emmanuel, I have rewritten the IF Filter routine so as to not have to double-tap the buttons. I am testing the code and will publish the new App.svelte tomorrow if I see no issues.
Phil
Very good Phil, yes, this (filters) is a wanted update.
Sakis (SV2AMK) and I are testing the newer waterfall.js with corrected steps and areas through the whole Band 0-30MHz (to UHF included). Another basic change is the option to "hide" bands and their buttons, if someone does not want some bands to appear as buttons. Their characteristics (mode and step) will remain, but no button, or identification line under waterfall will be shown.
Little work remains to do, and it'll be ready for upload to the github by you.
P.S. would be a good idea to distinguish radioamateur from broadcasting bands divided by a single,<hr> line? I am thinking that radioamateur bands have different interest from broadcasting ones and searching among them maybe it will be easier. I do believe that this is a very easy modification, by simply changing the order of the bands in waterfall.js, so "band reader" script in App.svelte to reorder them. Tell me please your thoughts.
There will be a working demo of course to see it and approve....
Quote from: Emmanuel SV1BTL on Jan 23, 2025, 06:36 AMP.S. would be a good idea to distinguish radioamateur from broadcasting bands divided by a single,<hr> line? I am thinking that radioamateur bands have different interest from broadcasting ones and searching among them maybe it will be easier. I do believe that this is a very easy modification, by simply changing the order of the bands in waterfall.js, so "band reader" script in App.svelte to reorder them. Tell me please your thoughts.
There will be a working demo of course to see it and approve....
Yes, that is something that will be useful.
Quote from: Emmanuel SV1BTL on Jan 23, 2025, 06:36 AMVery good Phil, yes, this (filters) is a wanted update.
Sakis (SV2AMK) and I are testing the newer waterfall.js with corrected steps and areas through the whole Band 0-30MHz (to UHF included). Another basic change is the option to "hide" bands and their buttons, if someone does not want some bands to appear as buttons. Their characteristics (mode and step) will remain, but no button, or identification line under waterfall will be shown.
Little work remains to do, and it'll be ready for upload to the github by you.
I have been doing that on my site by just placing a 0 for ITU, but you can add a field called show: and assign a 0 or 1 if you like.
Quote from: Phil - NY4Q on Jan 23, 2025, 11:33 AMI have been doing that on my site by just placing a 0 for ITU, but you can add a field called show: and assign a 0 or 1 if you like.
Something like that is made.
A " {#if bandData.visibleButton != ""} " was added in App.svelte in "Band Selection Section"
and a reference " visibleButton: 'yes' " or '' (for no) is added for every band in waterfall.js. Sakis made it this way.
Your BW IF Filters in your WebSDR are working very well, as expected. Looking forward to see the uploaded new App.Svelte and App-NY4Q.svelte files.
Quote from: Emmanuel SV1BTL on Jan 23, 2025, 07:48 PMQuote from: Phil - NY4Q on Jan 23, 2025, 11:33 AMI have been doing that on my site by just placing a 0 for ITU, but you can add a field called show: and assign a 0 or 1 if you like.
Something like that is made.
A " {#if bandData.visibleButton != ""} " was added in App.svelte in "Band Selection Section"
and a reference " visibleButton: 'yes' " or '' (for no) is added for every band in waterfall.js. Sakis made it this way.
Your BW IF Filters in your WebSDR are working very well, as expected. Looking forward to see the uploaded new App.Svelte and App-NY4Q.svelte files.
Hello Phill.
As Emmanuel mentioned, I have inserted a new variable with the name visibleButton in waterfall.js and App.svelte in order to "hide" buttons but keep displaying labels and maybe colors under the waterfall area (exmple pirates before 40m and 80m ham bands in our region).
I also copied this part:
checkBandAndSetMode(frequency) {
let newBand = null;
let newMode = null;
for (const band of this.bands) {
// This comparator will fix an issue of printing the band name multiple times //
// because of the ITU regions added in the this.bands[] array //
// I import the region from site_information and do a comparison against //
// the site ITU region and the band.ITU value. //
//This copied "as is" by sv2amk from below to fix the same issue but for the modes.//
if (band.ITU === siteRegion || band.ITU == 123) {
if (frequency >= band.startFreq && frequency <= band.endFreq) { ......
.................................
on top of the modulation selecting function in waterfall.js, to avoid messing the modulation changing in our region.
The files are ready to be sent to you but I would like to adjust the brightness by pressing the band buttons. I sow that in your server the brightness of the waterfall changes as well as the sliders. Can you please explain how you do this?
I also would like to include your last changes in your svelte before sending the files.
73 de sv2amk
Quote from: Emmanuel SV1BTL on Jan 23, 2025, 07:48 PMYour BW IF Filters in your WebSDR are working very well, as expected. Looking forward to see the uploaded new App.Svelte and App-NY4Q.svelte files.
I am cleaning up the App.svelte and will upload all the latest I have by Sunday. Its been a busy week.
Phil
Quote from: sv2amk on Jan 24, 2025, 06:20 PMI sow that in your server the brightness of the waterfall changes as well as the sliders. Can you please explain how you do this?
I also would like to include your last changes in your svelte before sending the files.
73 de sv2amk
I added min & max settings to the waterfall.js file - see below - we all need to all amend our waterfall.js file as below.
{ ITU: 123, name: '30m', min: -45, max: 120, startFreq: 10100000, endFreq: 10150000, stepi: 1000, color: 'rgba(50, 168, 72, 0.6)',
modes: [{ mode: MODES.CW, startFreq: 10100000, endFreq: 10150000 }]
},
If you don't add those fields, then the function ignores that and just assigns the defaults in the App.svelte.
73,
Phil
Quote from: Phil - NY4Q on Jan 23, 2025, 11:32 AMQuote from: Emmanuel SV1BTL on Jan 23, 2025, 06:36 AMP.S. would be a good idea to distinguish radioamateur from broadcasting bands divided by a single,<hr> line? I am thinking that radioamateur bands have different interest from broadcasting ones and searching among them maybe it will be easier. I do believe that this is a very easy modification, by simply changing the order of the bands in waterfall.js, so "band reader" script in App.svelte to reorder them. Tell me please your thoughts.
There will be a working demo of course to see it and approve....
Yes, that is something that will be useful.
OK. This is done by me:
<!-- Begin Band Selection Section -->
<div class="w-full mt-4">
<h3 class="text-white text-lg font-semibold mb-2">Amateur Bands</h3>
<div class="grid grid-cols-2 sm:grid-cols-5 gap-2">
{#each bandArray as bandData, index}
{#if verifyRegion(bandData.ITU)}
{#if bandData.visibleButton == 1}
{#if printBandButton(bandData.startFreq,bandData.endFreq)}
<button id="band-selector" class="retro-button text-xs text-white fontrbold h-7 text-base rounded-md flex items-center justify-center border border-gray-600 shadow-inner transition-all duration-200 ease-in-out {currentBand === index ? 'bg-blue-600 pressed scale-95' : 'bg-gray-700 hover:bg-gray-600'}"
on:click={() => handleBandChange(index)} title="{bandData.name}">{bandData.name}
</button>
{/if}
{/if}
{:else}
{/if}
{/each}
</div>
</div>
<!-- Begin Non-amateur Band Selection Section -->
<div class="w-full mt-4">
<h3 class="text-white text-lg font-semibold mb-2">Non Amateur Bands</h3>
<div class="grid grid-cols-2 sm:grid-cols-5 gap-2">
{#each bandArray as bandData, index}
{#if verifyRegion(bandData.ITU)}
{#if bandData.visibleButton == 2}
{#if printBandButton(bandData.startFreq,bandData.endFreq)}
<button id="band-selector" class="retro-button text-xs text-white fontrbold h-7 text-base rounded-md flex items-center justify-center border border-gray-600 shadow-inner transition-all duration-200 ease-in-out {currentBand === index ? 'bg-blue-600 pressed scale-95' : 'bg-gray-700 hover:bg-gray-600'}"
on:click={() => handleBandChange(index)} title="{bandData.name}">{bandData.name}
</button>
{/if}
{/if}
{:else}
{/if}
{/each}
</div>
</div>
<!-- End of Band Selection Area -->
and the waterfall.js has to be adjusted accordingly:
{ ITU: 1,
name: '60m', visibleButton: '1', startFreq: 5351500, endFreq: 5366650, stepi: 100, color: 'rgba(50, 168, 72, 0.6)',
modes: [
{ mode: MODES.CW, startFreq: 5351500, endFreq: 5354000 },
{ mode: MODES.USB, startFreq: 5354000, endFreq: 5366500 }]
},
................
{ ITU: 123,
name: '49m AM', visibleButton: '2', startFreq: 5900000, endFreq: 6200000, stepi: 5000, color: 'rgba(199, 12, 193, 0.6)',
modes: [{ mode: MODES.AM, startFreq: 5900000, endFreq: 6200000 }]
},
Maybe Phill can do the same with less commands :)
73 de sv2amk
Quote from: Phil - NY4Q on Jan 25, 2025, 01:59 AMQuote from: sv2amk on Jan 24, 2025, 06:20 PMI sow that in your server the brightness of the waterfall changes as well as the sliders. Can you please explain how you do this?
I also would like to include your last changes in your svelte before sending the files.
73 de sv2amk
I added min & max settings to the waterfall.js file - see below - we all need to all amend our waterfall.js file as below.
{ ITU: 123, name: '30m', min: -45, max: 120, startFreq: 10100000, endFreq: 10150000, stepi: 1000, color: 'rgba(50, 168, 72, 0.6)',
modes: [{ mode: MODES.CW, startFreq: 10100000, endFreq: 10150000 }]
},
If you don't add those fields, then the function ignores that and just assigns the defaults in the App.svelte.
73,
Phil
TNX Phill.
Where can i look for that function? Is it included in the community App.svelte? If not can you please post an example of yours?
73 de Sakis sv2amk
Quote from: Phil - NY4Q on Jan 25, 2025, 01:59 AMI added min & max settings to the waterfall.js file - see below - we all need to all amend our waterfall.js file as below.
Code Select Expand
{ ITU: 123, name: '30m', min: -45, max: 120, startFreq: 10100000, endFreq: 10150000, stepi: 1000, color: 'rgba(50, 168, 72, 0.6)',
modes: [{ mode: MODES.CW, startFreq: 10100000, endFreq: 10150000 }]
},
Not working for me Phil. Shall we declare min & max somewhere else?
I will soon post the latest community version with all updated functions.
I want to add the 'publishBand' variable to the band function and test that. Hopefully by 1800/1900 UTC.
I will also add the new waterfall.js requests with the min/max and publishBand. publishBand will be a boolean consisting of true or false and all bands will be visible and you can edit out those you wish to not publish. The waterfall min & max will be set to -40 and 120 at default and you can edit as needed.
Will someone please work on a CONFIG_TIPS.md file that explains some of these setups that we all know about, but new people will not?
Ok, the new files are up. I ran a test 'auto install' and all looks good.
Be sure to back up your files and tweaks that you have on your systems prior to updating.
Let's let the dust settle a while (as we say in the US) before making any changes. Let's see if any bugs show up.
Note: Emmanuel - I moved the bookmark back to the original popup as many users were not seeing the bookmarks on their mobile devices, so make a note of that to save your favorite code for that.
73,
Phil
Everything works just fine Phil. In my case, I found reading the community App.svelte, how to make Preset Filters and Band Brightness to work.
One more time, I thank you very, very much for your efforts and the perfect results!
Emmanuel - Please update your site files and send them to me to place in your folder on the repository.
Hello Phil!
Quote from: Phil - NY4Q on Jan 25, 2025, 04:03 PMOk, the new files are up. I ran a test 'auto install' and all looks good.
Be sure to back up your files and tweaks that you have on your systems prior to updating.
I 'd like to see it but I couldn't find it in the github. Whewe can I look?
Quote from: Phil - NY4Q on Jan 25, 2025, 04:03 PMLet's let the dust settle a while (as we say in the US) before making any changes. Let's see if any bugs show up.
Well, I found a bug, but the solution may "raise dust" again. :)
The brightness is adjusted automatically, but manual adjustment is impossible.
The solution was to make comments (or remove) the lines 865 to 870 of your last community App.svelte from the github:
/* if (bandArray[i].max < 256) {
min_waterfall = bandArray[i].min;
max_waterfall = bandArray[i].max;
handleMinMove();
handleMaxMove();
}*/
in function updateBandButton()
Then I inserted code in function handleBandChange(newBand) under the line 1835
that does 2 operations: 1. adjusts the brightness and 2. reads the initial frequency that is inserted in waterfall.js for every band.:
let initFreq = parseFloat(bandArray[newBand].initFreq);
min_waterfall = parseInt(bandArray[newBand].min);
max_waterfall = parseInt(bandArray[newBand].max);
Also a line is inserted under the line with old number 1857 to set the initial frequency if set (if not set initial frequency is the center frequency):
if(initFreq |= "") { centerFreq = initFreq };
Of course I had to make comment the 2 old lines 1851 and 1852 with the default values for brightness:
// min_waterfall = -30;
// max_waterfall = 110;
The function made like this:
// This Band Selection function handles band changes sent from the Band Selection section of the main page //
// The 7.15255 float below is (total_watefall_span / maximum_frequency_sampled) //
function handleBandChange(newBand) {
let centerFreq = parseFloat(
(bandArray[newBand].endFreq - bandArray[newBand].startFreq) / 2 +
bandArray[newBand].startFreq,
);
let initFreq = parseFloat(bandArray[newBand].initFreq);
min_waterfall = parseInt(bandArray[newBand].min);
max_waterfall = parseInt(bandArray[newBand].max);
let waterfallEndSpan = parseFloat(bandArray[newBand].endFreq / 7.15255);
let waterfallStartSpan = parseFloat(bandArray[newBand].startFreq / 7.15255);
let waterfallSpan = (waterfallEndSpan - waterfallStartSpan) / 2;
waterfallSpan = waterfallSpan + waterfallSpan * 0.01; // 10% above band edge
frequencyInputComponent.setFrequency(centerFreq);
handleFrequencyChange({ detail: centerFreq });
updatePassband();
let [l, m, r] = audio.getAudioRange();
const [waterfallL, waterfallR] = waterfall.getWaterfallRange();
const offset =
((m - waterfallL) / (waterfallR - waterfallL)) * waterfall.canvasWidth;
m = Math.min(waterfall.waterfallMaxSize - 512, Math.max(512, m));
l = Math.floor(m - 512);
r = Math.ceil(m + 512);
// Below sets the waterfall brightness //
// min_waterfall = -40;
// max_waterfall = 120;
handleMinMove();
handleMaxMove();
// End waterfall brightness //
l -= waterfallSpan;
r += waterfallSpan;
if(initFreq |= "") { centerFreq = initFreq };
frequencyInputComponent.setFrequency(centerFreq);
handleFrequencyChange({ detail: centerFreq });
waterfall.setWaterfallRange(l, r);
frequencyMarkerComponent.updateFrequencyMarkerPositions();
updatePassband();
currentBand = newBand;
}
// End of Band Selection Function //
This worked for us and you can see it at Emmanuel's server.
I send our waterfall.js that has the added variables for the above.
Emmanuel will send his App.svelte also.
PS. In waterfall.js the variable publishBand: has 3 states: '' that does not create the button, '1' that creates the button in group "Amateur bands" and '2' that creates the button in the group "non amateur bands" as mentioned in post #110.
73 de sv2amk Sakis.
Ok, I have fixed the 'band spread' fudge factor calculation with an ACTUAL data calculation - haha
I have fixed the waterfall resetting itself upon frequency change 'feature'.
I have fixed the VFO A/B bug when you initially load the URL - no one noticed this.
When I get time, I will add a boolean to the waterfall.js to detect if a band is amateur or not. This boolean will be simply amateurBand and will be either true or false.
Emmanuel I would rather do this, than add the check to the publishBand as you mentioned, although that would also work fine.
That being said, if you already have to code ready to separate the bands, please amend that code and use amateurBand and then publish that for me to add to the main App.svelte.
I hope this is ok with everyone.
Note : On your amateurBand function, make sure it will behave if only one band is published, as in my VHF Phantom+ instance that only publishes the 2m VHF band.
Phil
Manolis,
Please do not make another version on the same github.
I suggest you start your own github or make a fork off this version.
I understand you want to move fast, sometimes too fast, but you can start your own github version.
The forum will support it, we just make another separate version.
But it's not a wise idea to mix the community version with other versions in the same github.
3 options:
1: Wait until Phil has adapted changes and accept it.
2: Make your own github and push your version there.
3: Fork and upload changes and wait for Phil do adopt them, while your own version is there too, however this can give problems.
Do not get me wrong, I love your enthusiasm and fast moving changes, but putting 500 versions into 1 github is not a good idea.
It will only confuse newcomers.
As said before, you move to fast. I for one do not update for the moment, can't keep up. ::)
Ok, the latest changes are now up and look good.
This includes the waterfall min/max issue when the frequency was changed, it includes a VFO A/B issue I noticed and I have fixed that. I also changed the way the initial VFO A/B starts. It is based on settings in the site_information.json file and not just typed in on the App.svelte.
Added to waterfall.js is the boolean amateurBand and that has already been set to true or false based on the particular band.
I like Bas' comments on maintaining the community version as a single entity and removing those other sites. The community version will be that - the community's changes and all available for the newcomer sysops to change if they feel the need.
The best way to allow users to use your particular site is to do what Bas has mentioned and just create a fork and allow others to download. That also allows you to make changes at the speed you want to and as you innovate, we can add your changes to the community version.
We have made this into a very nice product together and I want that to continue.
Phil
I like that band menu split and initFreq suggestion and will add that in the next release, but again, let's let the dust settle on this last upload.