-
Notifications
You must be signed in to change notification settings - Fork 0
/
SGPClass.vb
225 lines (185 loc) · 7.59 KB
/
SGPClass.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
Imports RestSharp
Imports Newtonsoft.Json.Linq
Imports System.Globalization
Public Class SGPClass
Public Property Address As String
Public Structure SGPresponse
Dim Success As Boolean
Dim Response As String
End Structure
Public Structure CameraProps
Dim Success As Boolean
Dim SupportsSubframe As Boolean
Dim NumPixelsX As Integer
Dim NumPixelsY As Integer
End Structure
Private response As String = ""
Private json As JObject
Public Sub New(Address_ As String)
Me.Address = Address_
End Sub
Public Function CameraStatus() As SGPresponse
Dim FunReturn As New SGPresponse
Try
Me.Message("devicestatus/camera", response)
Catch ex As Exception
FunReturn.Success = False
FunReturn.Response = ""
Return FunReturn
End Try
json = JObject.Parse(response)
FunReturn.Success = json.SelectToken("Success")
FunReturn.Response = json.SelectToken("State")
Return FunReturn
End Function
Public Function FilterwheelStatus() As SGPresponse
Dim FunReturn As New SGPresponse
Try
Me.Message("devicestatus/filterwheel", response)
Catch ex As Exception
FunReturn.Success = False
FunReturn.Response = ""
Return FunReturn
End Try
json = JObject.Parse(response)
FunReturn.Success = json.SelectToken("Success")
FunReturn.Response = json.SelectToken("State")
Return FunReturn
End Function
Public Function TelescopeStatus() As SGPresponse
Dim FunReturn As New SGPresponse
Try
Me.Message("devicestatus/telescope", response)
Catch ex As Exception
FunReturn.Success = False
FunReturn.Response = ""
Return FunReturn
End Try
json = JObject.Parse(response)
FunReturn.Success = json.SelectToken("Success")
FunReturn.Response = json.SelectToken("State")
Return FunReturn
End Function
Public Function SetFilter(ByVal Position As Integer) As SGPresponse
Dim FunReturn As New SGPresponse
Try
Me.Message("setfilterwheelpos/" + Position.ToString, response)
Catch ex As Exception
FunReturn.Success = False
FunReturn.Response = ""
Return FunReturn
End Try
json = JObject.Parse(response)
FunReturn.Success = json.SelectToken("Success")
FunReturn.Response = json.SelectToken("Message")
Return FunReturn
End Function
Public Function GetCameraProps() As CameraProps
Dim FunReturn As New CameraProps
Try
Me.Message("cameraprops", response)
Catch ex As Exception
FunReturn.Success = False
FunReturn.SupportsSubframe = False
FunReturn.NumPixelsX = 0
FunReturn.NumPixelsY = 0
Return FunReturn
End Try
json = JObject.Parse(response)
FunReturn.Success = json.SelectToken("Success")
FunReturn.SupportsSubframe = json.SelectToken("SupportsSubframe")
FunReturn.NumPixelsX = json.SelectToken("NumPixelsX")
FunReturn.NumPixelsY = json.SelectToken("NumPixelsY")
Return FunReturn
End Function
Public Function ImageCapture(ByVal exp As Single, ByVal bin As Integer, ByVal framesize As Integer, ByVal frametype As String, ByVal path As String) As SGPresponse
Dim rest_client As RestClient
Dim request As RestRequest
Dim rest_response As IRestResponse
Dim FunReturn As New SGPresponse
rest_client = New RestClient(Me.Address)
request = New RestRequest()
request.Method = Method.GET
request.RequestFormat = DataFormat.Json
request.AddHeader("Accept", "application/json")
request.Resource = "image"
request.Timeout = 1000
request.Method = Method.POST
request.AddQueryParameter("BinningMode", bin.ToString) '1=1x1, 2=2x2, ...
request.AddQueryParameter("ExposureLength", exp.ToString("F4", CultureInfo.InvariantCulture)) ' must specify number of digits "F4" as "F" for CultureInfo.InvariantCulture will by default only use 2 decimal places, sick...., to be safe we use 4 digital places
request.AddQueryParameter("FrameType", frametype)
request.AddQueryParameter("Path", path)
'if framesize > 1, then calculate x,y,w,h , if framesize = 1 then skip
If framesize > 1 Then
Dim camera As New CameraProps
camera = GetCameraProps()
'get W and H of camera and check it is supports subframe
If camera.Success = True And camera.SupportsSubframe = True Then
Dim w0, h0, x, y, w, h As Integer
'get camera size
w0 = camera.NumPixelsX
h0 = camera.NumPixelsY
'change max frame width and height due to binning
w0 = Math.Floor(w0 / bin)
h0 = Math.Floor(h0 / bin)
'calculate subframe coordinates
w = Math.Floor(w0 / framesize)
h = Math.Floor(h0 / framesize)
x = Math.Floor((w0 * framesize - w0) / 2 / framesize)
y = Math.Floor((h0 * framesize - h0) / 2 / framesize)
'add subframe data to message
request.AddQueryParameter("UseSubframe", True)
request.AddQueryParameter("X", x)
request.AddQueryParameter("Y", y)
request.AddQueryParameter("Width", w)
request.AddQueryParameter("Height", h)
End If
End If
Try
rest_response = rest_client.Execute(request)
Catch ex As Exception
FunReturn.Success = False
FunReturn.Response = "Something went wrong with the SGP API call."
Return FunReturn
End Try
json = JObject.Parse(rest_response.Content)
FunReturn.Success = json.SelectToken("Success")
If FunReturn.Success = True Then
FunReturn.Response = json.SelectToken("Receipt") 'if call successful, return GUID receipt for image
Else
FunReturn.Response = json.SelectToken("Message") 'if not then return message containing error message
End If
Return FunReturn
End Function
Public Function ImagePath(ByVal imagereceipt As String) As SGPresponse
Dim FunReturn As New SGPresponse
Try
Me.Message("imagepath/" + imagereceipt, response)
Catch ex As Exception
FunReturn.Success = False
FunReturn.Response = ""
Return FunReturn
End Try
json = JObject.Parse(response)
FunReturn.Success = json.SelectToken("Success")
FunReturn.Response = json.SelectToken("Message")
Return FunReturn
End Function
Public Sub Message(ByVal Command As String, ByRef Response As String)
Dim rest_client As RestClient
Dim request As RestRequest
rest_client = New RestClient(Me.Address)
request = New RestRequest()
request.Method = Method.GET
request.RequestFormat = DataFormat.Json
request.AddHeader("Accept", "application/json")
request.Resource = Command
request.Timeout = 1000
Dim rest_response As IRestResponse = rest_client.Execute(request)
If IsNothing(rest_response.ErrorException) Then
Response = rest_response.Content
Else
Throw New System.Exception("SGP not responding")
End If
End Sub
End Class