first commit

This commit is contained in:
2026-03-17 20:20:23 +01:00
commit 354c7a9d99
32 changed files with 3253 additions and 0 deletions

132
internal/bands/bands.go Normal file
View File

@@ -0,0 +1,132 @@
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)
}