require "socket"
class Tello
def initialize(host="192.168.10.1", port=8889, bind=9000)
@udps = UDPSocket.open
@sockaddr = Socket.pack_sockaddr_in(port, host)
@udps.bind('0.0.0.0', bind)
@log = []
@th = Thread.start do
loop do
begin
sleep(0.1)
#puts "# response #{@udps.recv(1518)}"
@udps.recv(1518)
rescue StandardError => e
puts "# error #{e.message}"
end
end
end
@t2 = Thread.start do
@stateudp = UDPSocket.open
@stateudp.bind('0.0.0.0', 8890)
loop do
l = @stateudp.recv(65535)
@status = l if l && l>""
sleep 0.1
end
end
end
def close
# puts '# close Tello'
@udps.send('land', 0, @sockaddr)
Thread.kill(@th)
Thread.kill(@t2)
@udps.close
@stateudp.close
end
def send_command(message)
# puts "# send #{message}"
@udps.send(message, 0, @sockaddr)
end
def getlog
@log.shift
end
def getstatus
@status
end
end
if __FILE__ == $0 then
tello = Tello.new
tello.send_command('command')
tello.send_command('takeoff')
sleep(3)
tello.send_command('land')
tello.close
end