Checkpoint
This commit is contained in:
55
meshcore.go
55
meshcore.go
@@ -24,9 +24,10 @@ type MeshCoreConfig struct {
|
||||
}
|
||||
|
||||
type MeshCoreCompanionConfig struct {
|
||||
Port string `yaml:"port"`
|
||||
Baud int `yaml:"baud"`
|
||||
Addr string `yaml:"addr"`
|
||||
Port string `yaml:"port"`
|
||||
Baud int `yaml:"baud"`
|
||||
Addr string `yaml:"addr"`
|
||||
HasSNR bool `yaml:"has_snr"` // patch: adds SNR/RSSI data
|
||||
}
|
||||
|
||||
type MeshCorePrefix byte
|
||||
@@ -54,6 +55,9 @@ func NewMeshCoreReceiver(config *MeshCoreConfig) (protocol.PacketReceiver, error
|
||||
case "companion", "":
|
||||
return newMeshCoreCompanionReceiver(config.Conf)
|
||||
|
||||
case "repeater":
|
||||
return newMeshCoreRepeaterReceiver(config.Conf)
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("hamview: unsupported MeshCore node type %q", config.Type)
|
||||
}
|
||||
@@ -104,6 +108,51 @@ func newMeshCoreCompanionReceiver(node yaml.Node) (protocol.PacketReceiver, erro
|
||||
return receiver, nil
|
||||
}
|
||||
|
||||
func newMeshCoreRepeaterReceiver(node yaml.Node) (protocol.PacketReceiver, error) {
|
||||
var config MeshCoreCompanionConfig
|
||||
if err := node.Decode(&config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var (
|
||||
conn io.ReadWriteCloser
|
||||
err error
|
||||
)
|
||||
switch {
|
||||
case config.Addr != "":
|
||||
Logger.Infof("receiver: connecting to MeshCore repeater at tcp://%s", config.Addr)
|
||||
conn, err = net.Dial("tcp", config.Addr)
|
||||
|
||||
default:
|
||||
if config.Port == "" {
|
||||
// TODO: detect serial ports
|
||||
config.Port = "/dev/ttyUSB0"
|
||||
}
|
||||
if config.Baud == 0 {
|
||||
config.Baud = 115200
|
||||
}
|
||||
Logger.Infof("receiver: connecting to MeshCore repeater on %s at %d baud", config.Port, config.Baud)
|
||||
conn, err = serial.OpenPort(&serial.Config{
|
||||
Name: config.Port,
|
||||
Baud: config.Baud,
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
receiver, err := meshcore.NewRepeater(conn, config.HasSNR)
|
||||
if err != nil {
|
||||
_ = conn.Close()
|
||||
Logger.Warnf("receiver: error connecting to repeater: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
info := receiver.Info()
|
||||
Logger.Infof("receiver: connected to MeshCore repeater %q model %q version %q", info.Name, info.Manufacturer, info.FirmwareVersion)
|
||||
return receiver, nil
|
||||
}
|
||||
|
||||
type meshCoreNode struct {
|
||||
Name string `json:"name"`
|
||||
PublicKey []byte `json:"public_key"`
|
||||
|
||||
Reference in New Issue
Block a user