133 lines
3.2 KiB
Go
133 lines
3.2 KiB
Go
package bands
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type BandDefinition struct {
|
|
Name string
|
|
MinFreqMHz float64
|
|
MaxFreqMHz float64
|
|
UseUSB bool
|
|
}
|
|
|
|
var AmateurBands = []BandDefinition{
|
|
{Name: "160M", MinFreqMHz: 1.800, MaxFreqMHz: 2.000, UseUSB: false},
|
|
{Name: "80M", MinFreqMHz: 3.500, MaxFreqMHz: 3.800, UseUSB: false},
|
|
{Name: "60M", MinFreqMHz: 5.330, MaxFreqMHz: 5.405, UseUSB: false},
|
|
{Name: "40M", MinFreqMHz: 7.000, MaxFreqMHz: 7.300, UseUSB: false},
|
|
{Name: "30M", MinFreqMHz: 10.100, MaxFreqMHz: 10.150, UseUSB: true},
|
|
{Name: "20M", MinFreqMHz: 14.000, MaxFreqMHz: 14.350, UseUSB: true},
|
|
{Name: "17M", MinFreqMHz: 18.068, MaxFreqMHz: 18.168, UseUSB: true},
|
|
{Name: "15M", MinFreqMHz: 21.000, MaxFreqMHz: 21.450, UseUSB: true},
|
|
{Name: "12M", MinFreqMHz: 24.890, MaxFreqMHz: 24.990, UseUSB: true},
|
|
{Name: "10M", MinFreqMHz: 28.000, MaxFreqMHz: 29.700, UseUSB: true},
|
|
{Name: "6M", MinFreqMHz: 50.000, MaxFreqMHz: 54.000, UseUSB: true},
|
|
{Name: "QO-100", MinFreqMHz: 10489.500, MaxFreqMHz: 10490.000, UseUSB: true},
|
|
}
|
|
|
|
func FrequencyToBand(freqMHz float64) string {
|
|
for _, band := range AmateurBands {
|
|
if freqMHz >= band.MinFreqMHz && freqMHz < band.MaxFreqMHz {
|
|
return band.Name
|
|
}
|
|
}
|
|
return "N/A"
|
|
}
|
|
|
|
// FrequencyKHzToBand convertit depuis kHz (format interne du projet)
|
|
func FrequencyKHzToBand(freqKHz float64) string {
|
|
return FrequencyToBand(freqKHz / 1000.0)
|
|
}
|
|
|
|
func FrequencyStringToBand(freqStr string) string {
|
|
freqMHz, err := strconv.ParseFloat(freqStr, 64)
|
|
if err != nil {
|
|
return "N/A"
|
|
}
|
|
return FrequencyToBand(freqMHz)
|
|
}
|
|
|
|
func GetBandDefinition(bandName string) *BandDefinition {
|
|
for _, band := range AmateurBands {
|
|
if band.Name == bandName {
|
|
return &band
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func IsUSBBand(bandName string) bool {
|
|
band := GetBandDefinition(bandName)
|
|
if band == nil {
|
|
return false
|
|
}
|
|
return band.UseUSB
|
|
}
|
|
|
|
func IsLSBBand(bandName string) bool {
|
|
band := GetBandDefinition(bandName)
|
|
if band == nil {
|
|
return false
|
|
}
|
|
return !band.UseUSB
|
|
}
|
|
|
|
func NormalizeSSBMode(mode string, band string) string {
|
|
if mode != "SSB" {
|
|
return mode
|
|
}
|
|
if IsUSBBand(band) {
|
|
return "USB"
|
|
}
|
|
return "LSB"
|
|
}
|
|
|
|
func NormalizeSSBModeByFrequency(mode string, freqMHz float64) string {
|
|
if mode != "SSB" {
|
|
return mode
|
|
}
|
|
band := FrequencyToBand(freqMHz)
|
|
return NormalizeSSBMode(mode, band)
|
|
}
|
|
|
|
func GetAllBandNames() []string {
|
|
names := make([]string, len(AmateurBands))
|
|
for i, band := range AmateurBands {
|
|
names[i] = band.Name
|
|
}
|
|
return names
|
|
}
|
|
|
|
func IsBandValid(bandName string) bool {
|
|
return GetBandDefinition(bandName) != nil
|
|
}
|
|
|
|
func GetBandFrequencyRange(bandName string) string {
|
|
band := GetBandDefinition(bandName)
|
|
if band == nil {
|
|
return ""
|
|
}
|
|
return fmt.Sprintf("%.3f - %.3f MHz", band.MinFreqMHz, band.MaxFreqMHz)
|
|
}
|
|
|
|
// FreqMHzString formate une fréquence kHz en string MHz pour FlexRadio
|
|
func FreqMHzString(freqKHz float64) string {
|
|
return fmt.Sprintf("%.6f", freqKHz/1000.0)
|
|
}
|
|
|
|
// GetBandFromFrequencyString gère kHz et MHz automatiquement
|
|
func GetBandFromFrequencyString(freqStr string) string {
|
|
freqStr = strings.TrimSpace(freqStr)
|
|
freqMHz, err := strconv.ParseFloat(freqStr, 64)
|
|
if err != nil {
|
|
return "N/A"
|
|
}
|
|
if freqMHz > 1000 {
|
|
freqMHz = freqMHz / 1000.0
|
|
}
|
|
return FrequencyToBand(freqMHz)
|
|
}
|