6 from twisted.internet.protocol
import DatagramProtocol
7 from twisted.internet
import reactor
9 __all__ = [
"UDPSender",
"getBinaryForUDP"]
12 """!A variant of DatagramProtocol that enables broadcasting
15 self.transport.setBroadcastAllowed(
True)
19 """!Object which will broadcast UDP Packets containing current position and other data
21 The packet format is documented here: http://www.apo.nmsu.edu/Telescopes/TCC/UDPPackets.html
23 @param[in] port port from which to send UDP packets
30 """!Shut down the port, to close cleanly
33 self.udpListen.stopListening()
37 """!Open the port to allow writing data
45 self.protocol.transport.write(binaryData, addr=(
"<broadcast>", self.
port))
49 udpFmt =
"!iiiidd8sdddddddddi4xddddddddddddd" \
50 +
"i4xi4xi4xi4xi4xi4xdddddddddi4xi4xi4x"
105 """Format a binary representation of the state of the actor, for sending via UDP
107 The format is described here: http://www.apo.nmsu.edu/Telescopes/TCC/UDPPackets.html
109 @param[in] inst: instrument block
110 @param[in] obj: object block
112 updateTime = obj.updateTime
113 netUserEquat = coordConv.PVT()
114 netUserPolar = coordConv.PVT()
115 obj.netUserPos.getSphPVT(netUserEquat, netUserPolar)
116 tccPos = obj.targetMount
117 toPack = collections.OrderedDict((
119 (
"type", -559038737),
122 (
"taiDate", updateTime),
123 (
"slewEndtime", obj.slewEndTime),
124 (
"coordSys", obj.userSys.getName()),
125 (
"epoch", obj.userSys.getDate()),
126 (
"objNetPos.pos1", netUserEquat.getPos(updateTime)),
127 (
"objNetPos.vel1", netUserEquat.vel),
128 (
"objNetPos.pos2", netUserPolar.getPos(updateTime)),
129 (
"objNetPos.vel2", netUserPolar.vel),
130 (
"boresight.pos1", obj.objInstXY[0].getPos(updateTime)),
131 (
"boresight.vel1", obj.objInstXY[0].vel),
132 (
"boresight.pos2", obj.objInstXY[1].getPos(updateTime)),
133 (
"boresight.vel2", obj.objInstXY[1].vel),
134 (
"rotType", obj.rotType),
135 (
"rotUser.pos", obj.rotUser.pos),
136 (
"rotUser.vel", obj.rotUser.vel),
137 (
"objUserInstAng.pos", obj.objUserInstAng.getPos(updateTime)),
138 (
"objUserInstAng.vel", obj.objUserInstAng.vel),
139 (
"spiderInstAng.pos", obj.spiderInstAng.getPos(updateTime)),
140 (
"spiderInstAng.vel", obj.spiderInstAng.vel),
141 (
"tccPos.pos1", tccPos[0].getPos(updateTime)),
142 (
"tccPos.vel1", tccPos[0].vel),
143 (
"tccPos.pos2", tccPos[1].getPos(updateTime)),
144 (
"tccPos.vel2", tccPos[1].vel),
145 (
"tccPos.pos3", tccPos[2].getPos(updateTime)),
146 (
"tccPos.vel3", tccPos[2].vel),
147 (
"secFocus", inst.secUserFocus),
148 (
"axisCmdState1", obj.axisCmdState[0]),
149 (
"axisCmdState2", obj.axisCmdState[1]),
150 (
"axisCmdState3", obj.axisCmdState[2]),