2 Commits

Author SHA1 Message Date
Joel Wetzell 0b20f3ffb9 update examples 2025-12-04 17:46:58 -06:00
Joel Wetzell 98a458ca43 switch to using pointers to trackers 2025-12-04 17:46:51 -06:00
4 changed files with 43 additions and 41 deletions
+2 -2
View File
@@ -18,7 +18,7 @@ func (e *Encoder) ResetInfoFrameId() {
e.infoFrameId = 1 e.infoFrameId = 1
} }
func (e *Encoder) GetInfoPackets(timestamp uint64, trackers []Tracker) [][]byte { func (e *Encoder) GetInfoPackets(timestamp uint64, trackers []*Tracker) [][]byte {
systemNameChunk := encoders.EncodeInfoSystemNameChunk(e.SystemName) systemNameChunk := encoders.EncodeInfoSystemNameChunk(e.SystemName)
trackerChunks := [][]byte{} trackerChunks := [][]byte{}
@@ -58,7 +58,7 @@ func (e *Encoder) GetInfoPackets(timestamp uint64, trackers []Tracker) [][]byte
return infoPackets return infoPackets
} }
func (e *Encoder) GetDataPackets(timestamp uint64, trackers []Tracker) [][]byte { func (e *Encoder) GetDataPackets(timestamp uint64, trackers []*Tracker) [][]byte {
trackerChunks := [][]byte{} trackerChunks := [][]byte{}
for _, tracker := range trackers { for _, tracker := range trackers {
+3 -3
View File
@@ -7,11 +7,11 @@ import (
"github.com/jwetzell/psn-go" "github.com/jwetzell/psn-go"
) )
func getNTrackers(n int) []psn.Tracker { func getNTrackers(n int) []*psn.Tracker {
trackers := []psn.Tracker{} trackers := []*psn.Tracker{}
for index := 0; index < n; index++ { for index := 0; index < n; index++ {
tracker := psn.Tracker{Id: uint16(index), Name: "Tracker"} tracker := &psn.Tracker{Id: uint16(index), Name: "Tracker"}
tracker.SetPos(0, 0, 0) tracker.SetPos(0, 0, 0)
tracker.SetSpeed(0, 0, 0) tracker.SetSpeed(0, 0, 0)
tracker.SetOri(0, 0, 0) tracker.SetOri(0, 0, 0)
+2 -2
View File
@@ -13,14 +13,14 @@ func main() {
VersionLow: 3, VersionLow: 3,
} }
tracker := psn.Tracker{ tracker := &psn.Tracker{
Id: 1, Id: 1,
Name: "Tracker 1", Name: "Tracker 1",
} }
tracker.SetPos(1.0, 1.0, 1.0) tracker.SetPos(1.0, 1.0, 1.0)
trackers := []psn.Tracker{ trackers := []*psn.Tracker{
tracker, tracker,
} }
+36 -34
View File
@@ -23,62 +23,64 @@ func main() {
VersionLow: 0, VersionLow: 0,
} }
trackers := []psn.Tracker{} trackers := []*psn.Tracker{}
trackers = append(trackers, psn.Tracker{Id: 0, Name: "Sun"}) trackers = append(trackers, &psn.Tracker{Id: 0, Name: "Sun"})
trackers = append(trackers, psn.Tracker{Id: 1, Name: "Mercury"}) trackers = append(trackers, &psn.Tracker{Id: 1, Name: "Mercury"})
trackers = append(trackers, psn.Tracker{Id: 2, Name: "Venus"}) trackers = append(trackers, &psn.Tracker{Id: 2, Name: "Venus"})
trackers = append(trackers, psn.Tracker{Id: 3, Name: "Earth"}) trackers = append(trackers, &psn.Tracker{Id: 3, Name: "Earth"})
trackers = append(trackers, psn.Tracker{Id: 4, Name: "Mars"}) trackers = append(trackers, &psn.Tracker{Id: 4, Name: "Mars"})
trackers = append(trackers, psn.Tracker{Id: 5, Name: "Jupiter"}) trackers = append(trackers, &psn.Tracker{Id: 5, Name: "Jupiter"})
trackers = append(trackers, psn.Tracker{Id: 6, Name: "Saturn"}) trackers = append(trackers, &psn.Tracker{Id: 6, Name: "Saturn"})
trackers = append(trackers, psn.Tracker{Id: 7, Name: "Uranus"}) trackers = append(trackers, &psn.Tracker{Id: 7, Name: "Uranus"})
trackers = append(trackers, psn.Tracker{Id: 8, Name: "Neptune"}) trackers = append(trackers, &psn.Tracker{Id: 8, Name: "Neptune"})
trackers = append(trackers, psn.Tracker{Id: 9, Name: "Pluto"}) trackers = append(trackers, &psn.Tracker{Id: 9, Name: "Pluto"})
orbits := []float32{1.0, 88.0, 224.7, 365.2, 687, 4332, 10760, 30700, 60200, 90600} orbits := []float32{1.0, 88.0, 224.7, 365.2, 687, 4332, 10760, 30700, 60200, 90600}
distFromSun := []float32{0, 0.58, 1.08, 1.5, 2.28, 7.78, 14.29, 28.71, 45.04, 59.13} distFromSun := []float32{0, 0.58, 1.08, 1.5, 2.28, 7.78, 14.29, 28.71, 45.04, 59.13}
timestamp := 0 timestamp := 0
lastInfoMillis := time.Now().UnixMilli() dataTicker := time.NewTicker(time.Millisecond * 16)
lastDataMillis := time.Now().UnixMilli() infoTicker := time.NewTicker(time.Millisecond * 1000)
for { go func() {
if (time.Now().UnixMilli() - lastInfoMillis) > 500 { for {
slog.Info("Sending Info Packets") for index, tracker := range trackers {
infoPackets := encoder.GetInfoPackets(uint64(timestamp), trackers) orbit := orbits[index]
for _, infoPacket := range infoPackets {
client.Write(infoPacket)
}
lastInfoMillis = time.Now().UnixMilli()
}
if (time.Now().UnixMilli() - lastDataMillis) > 5 {
for index, orbit := range orbits {
a := 1.0 / orbit a := 1.0 / orbit
b := distFromSun[index] b := distFromSun[index]
x := timestamp x := timestamp
cb := math.Cos(float64(a*float32(x))) * float64(b) cb := math.Cos(float64(a*float32(x))) * float64(b)
sb := math.Sin(float64(a*float32(x))) * float64(b) sb := math.Sin(float64(a*float32(x))) * float64(b)
trackers[index].SetPos(float32(sb), 0, float32(cb)) tracker.SetPos(float32(sb), 0, float32(cb))
trackers[index].SetSpeed(a*float32(cb), 0, -a*float32(sb)) tracker.SetSpeed(a*float32(cb), 0, -a*float32(sb))
trackers[index].SetOri(0, float32(x)/1000.0, 0) tracker.SetOri(0, float32(x)/1000.0, 0)
trackers[index].SetAccel(-a*a*float32(sb), 0, -a*a*float32(cb)) tracker.SetAccel(-a*a*float32(sb), 0, -a*a*float32(cb))
trackers[index].SetTrgtPos(3, 14, 16) tracker.SetTrgtPos(3, 14, 16)
trackers[index].SetStatus(float32(index) / 10.0) tracker.SetStatus(float32(index) / 10.0)
trackers[index].SetTimestamp(uint64(timestamp)) tracker.SetTimestamp(uint64(timestamp))
} }
time.Sleep(time.Millisecond * 16)
}
}()
for {
select {
case <-infoTicker.C:
slog.Info("Sending Info Packets")
infoPackets := encoder.GetInfoPackets(uint64(timestamp), trackers)
for _, infoPacket := range infoPackets {
client.Write(infoPacket)
}
case <-dataTicker.C:
slog.Info("Sending Data Packets") slog.Info("Sending Data Packets")
dataPackets := encoder.GetDataPackets(uint64(timestamp), trackers) dataPackets := encoder.GetDataPackets(uint64(timestamp), trackers)
for _, DataPacket := range dataPackets { for _, DataPacket := range dataPackets {
client.Write(DataPacket) client.Write(DataPacket)
} }
lastDataMillis = time.Now().UnixMilli()
timestamp += 1 timestamp += 1
} }
} }
} }