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) }