|
|
|
package homebrew
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/pd0mz/go-dmr"
|
|
|
|
)
|
|
|
|
|
|
|
|
// RepeaterConfiguration holds information about the current repeater. It
|
|
|
|
// should be returned by a callback in the implementation, returning actual
|
|
|
|
// information about the current repeater status.
|
|
|
|
type RepeaterConfiguration struct {
|
|
|
|
Callsign string
|
|
|
|
ID uint32 // Our RepeaterID
|
|
|
|
RXFreq uint32
|
|
|
|
TXFreq uint32
|
|
|
|
TXPower uint8
|
|
|
|
ColorCode uint8
|
|
|
|
Latitude float32
|
|
|
|
Longitude float32
|
|
|
|
Height uint16
|
|
|
|
Location string
|
|
|
|
Description string
|
|
|
|
URL string
|
|
|
|
SoftwareID string
|
|
|
|
PackageID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bytes returns the configuration as bytes.
|
|
|
|
func (r *RepeaterConfiguration) Bytes() []byte {
|
|
|
|
return []byte(r.String())
|
|
|
|
}
|
|
|
|
|
|
|
|
// String returns the configuration as string.
|
|
|
|
func (r *RepeaterConfiguration) String() string {
|
|
|
|
if r.ColorCode < 1 {
|
|
|
|
r.ColorCode = 1
|
|
|
|
}
|
|
|
|
if r.ColorCode > 15 {
|
|
|
|
r.ColorCode = 15
|
|
|
|
}
|
|
|
|
if r.TXPower > 99 {
|
|
|
|
r.TXPower = 99
|
|
|
|
}
|
|
|
|
if r.SoftwareID == "" {
|
|
|
|
r.SoftwareID = dmr.SoftwareID
|
|
|
|
}
|
|
|
|
if r.PackageID == "" {
|
|
|
|
r.PackageID = dmr.PackageID
|
|
|
|
}
|
|
|
|
|
|
|
|
var lat = fmt.Sprintf("%-08f", r.Latitude)
|
|
|
|
if len(lat) > 8 {
|
|
|
|
lat = lat[:8]
|
|
|
|
}
|
|
|
|
var lon = fmt.Sprintf("%-09f", r.Longitude)
|
|
|
|
if len(lon) > 9 {
|
|
|
|
lon = lon[:9]
|
|
|
|
}
|
|
|
|
|
|
|
|
var b = "RPTC"
|
|
|
|
b += fmt.Sprintf("%-8s", r.Callsign)
|
|
|
|
b += fmt.Sprintf("%08x", r.ID)
|
|
|
|
b += fmt.Sprintf("%09d", r.RXFreq)
|
|
|
|
b += fmt.Sprintf("%09d", r.TXFreq)
|
|
|
|
b += fmt.Sprintf("%02d", r.TXPower)
|
|
|
|
b += fmt.Sprintf("%02d", r.ColorCode)
|
|
|
|
b += lat
|
|
|
|
b += lon
|
|
|
|
b += fmt.Sprintf("%03d", r.Height)
|
|
|
|
b += fmt.Sprintf("%-20s", r.Location)
|
|
|
|
b += fmt.Sprintf("%-20s", r.Description)
|
|
|
|
b += fmt.Sprintf("%-124s", r.URL)
|
|
|
|
b += fmt.Sprintf("%-40s", r.SoftwareID)
|
|
|
|
b += fmt.Sprintf("%-40s", r.PackageID)
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
// ConfigFunc returns an actual RepeaterConfiguration instance when called.
|
|
|
|
// This is used by the DMR repeater to poll for current configuration,
|
|
|
|
// statistics and metrics.
|
|
|
|
type ConfigFunc func() *RepeaterConfiguration
|