Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Commit de1c6e0

Browse files
authored
Merge pull request #19 from synfinatic/fix-crash
Fix crash when setting Lat/Long in Nexstar
2 parents 5268e8c + 5d63bee commit de1c6e0

File tree

2 files changed

+36
-42
lines changed

2 files changed

+36
-42
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
Added:
66

77
- Support for Nexstar tracking commands: t and T
8+
- Fix crash when setting Lat/Long due to index out of range
9+
- Clean up Nexstar cmd processing
810

911
## v0.0.5 - 2021-01-17
1012

cmd/nexstar.go

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -62,61 +62,55 @@ func nexstar_command(t *alpaca.Telescope, len int, buf []byte) []byte {
6262
ra, dec, err := t.GetRaDec()
6363
if err != nil {
6464
log.Errorf("Unable to get RA/DEC: %s", err.Error())
65-
break
66-
}
67-
radec := telescope.Coordinates{
68-
RA: ra,
69-
Dec: dec,
70-
}
65+
} else {
66+
radec := telescope.Coordinates{
67+
RA: ra,
68+
Dec: dec,
69+
}
7170

72-
high_precision := true
73-
if buf[0] == 'E' {
74-
high_precision = false
71+
high_precision := true
72+
if buf[0] == 'E' {
73+
high_precision = false
74+
}
75+
ret = fmt.Sprintf("%s#", radec.Nexstar(high_precision))
7576
}
76-
ret = fmt.Sprintf("%s#", radec.Nexstar(high_precision))
7777

7878
case 'Z':
7979
// Get AZM/ALT. Note that AZM is 0->360, while Alt is -90->90
8080
azm, alt, err := t.GetAzmAlt()
8181
if err != nil {
8282
log.Errorf("Unable to get AZM/ALT: %s", err.Error())
83-
break
83+
} else {
84+
azm_int := uint32(azm / 360.0 * math.Pow(2, 16))
85+
alt_int := uint32(alt / 360.0 * math.Pow(2, 16))
86+
ret = fmt.Sprintf("%04X,%04X#", azm_int, alt_int)
8487
}
8588

86-
azm_int := uint32(azm / 360.0 * math.Pow(2, 16))
87-
alt_int := uint32(alt / 360.0 * math.Pow(2, 16))
88-
ret = fmt.Sprintf("%04X,%04X#", azm_int, alt_int)
89-
9089
case 'z':
9190
// Get Precise AZM/ALT
9291
azm, alt, err := t.GetAzmAlt()
9392
if err != nil {
9493
log.Errorf("Unable to get AZM/ALT: %s", err.Error())
95-
break
94+
} else {
95+
azm_int := uint32(azm / 360.0 * 4294967296.0)
96+
alt_int := uint32(alt / 360.0 * 4294967296.0)
97+
ret = fmt.Sprintf("%08X,%08X#", azm_int, alt_int)
9698
}
9799

98-
azm_int := uint32(azm / 360.0 * 4294967296.0)
99-
alt_int := uint32(alt / 360.0 * 4294967296.0)
100-
ret = fmt.Sprintf("%08X,%08X#", azm_int, alt_int)
101-
102100
case 't':
103101
// get tracking mode
104102
mode, err := t.GetTracking()
105103
if err != nil {
106104
log.Errorf("Unable to get tracking mode: %s", err.Error())
107-
break
105+
} else {
106+
ret = fmt.Sprintf("%d#", mode)
108107
}
109-
ret = fmt.Sprintf("%d#", mode)
110108

111109
case 'T':
112110
// set tracking mode
113111
var tracking_mode alpaca.TrackingMode
114112
fmt.Sscanf(string(buf[1]), "%d", &tracking_mode)
115-
err := t.PutTracking(tracking_mode)
116-
if err != nil {
117-
log.Errorf("Unable to set tracking mode: %s", err.Error())
118-
break
119-
}
113+
err = t.PutTracking(tracking_mode)
120114
ret = "#"
121115

122116
case 'V':
@@ -126,10 +120,6 @@ func nexstar_command(t *alpaca.Telescope, len int, buf []byte) []byte {
126120
case 'P':
127121
// Slew
128122
err = executeSlew(t, buf)
129-
if err != nil {
130-
log.Errorf("Unable to slew: %s", err.Error())
131-
break
132-
}
133123
ret = "#"
134124

135125
case 's':
@@ -158,31 +148,33 @@ func nexstar_command(t *alpaca.Telescope, len int, buf []byte) []byte {
158148

159149
case 'w':
160150
// get location
151+
failed := false
161152
lat, err := t.GetSiteLatitude()
162153
if err != nil {
163-
break
154+
log.Errorf("Error talking to scope: %s", err.Error())
155+
failed = true
164156
}
165157

166158
long, err := t.GetSiteLatitude()
167159
if err != nil {
168-
break
160+
// logged at the end
161+
failed = true
162+
}
163+
164+
if !failed {
165+
ret_val = LatLongToNexstar(lat, long)
166+
ret_val = append(ret_val, '#')
169167
}
170-
ret_val = LatLongToNexstar(lat, long)
171-
ret_val = append(ret_val, '#')
172168

173169
case 'W':
174170
// set location
175-
lat, long := NexstarToLatLong(buf[1:8])
171+
lat, long := NexstarToLatLong(buf[1:9])
176172
err = t.PutSiteLatitude(lat)
177173
if err != nil {
178-
log.Errorf("Error setting site latitude: %s", err.Error())
179-
break
174+
log.Errorf("Error talking to scope: %s", err.Error())
180175
}
181176
err = t.PutSiteLongitude(long)
182-
if err != nil {
183-
log.Errorf("Error setting site longitude: %s", err.Error())
184-
break
185-
}
177+
// logged at the end
186178
ret = "#"
187179

188180
case 'H':

0 commit comments

Comments
 (0)