sendPing() 함수를 호출하고 응답을 받을 때까지 기다리는 시간이 필요하기 때문에 sleep() 함수를 사용했습니다.
데이터 송수신 과정에서 문제가 생겨 Ack를 받지 못하는 경우가 있을 수 있으므로 1초 동안 응답이 없으면 수신처리를 종료하게 하였습니다.
from time import sleepfrom e_drone.drone import*from e_drone.protocol import*if__name__=='__main__': drone =Drone(False) drone.open() drone.sendPing(DeviceType.Controller) timeStart = time.time()whileTrue:sleep(0.01) dataType = drone.check()if dataType == DataType.Ack: ack = drone.getData(DataType.Ack)print("{0} / {1} / {2:04X}".format(ack.dataType.name, ack.systemTime, ack.crc16))print("T: {0}".format(time.time() - timeStart))break;# 1초 동안 응답이 없을 경우 응답 확인을 빠져나감if time.time()> timeStart +1:print("Time Over")break; drone.close()
Ping 테스트(이벤트 함수 등록)
조종기에 Ping을 보내고, Ack 응답을 받아서 화면에 출력하는 예제입니다.
수신 받을 데이터를 처리하는 함수를 만들어 setEventHandler(DataType, function)를 사용하여 등록하면 해당 데이터를 받았을 때 미리 연결한 함수를 호출합니다.
마지막 sleep(0.1)은 Ping 전송 후 Ack 응답이 들어올 때까지 기다리기 위해 사용하였습니다.
from time import sleepfrom e_drone.drone import*from e_drone.protocol import*defeventAck(ack):print("eventAck()")print("{0} / {1} / {2:04X}".format(ack.dataType.name, ack.systemTime, ack.crc16))if__name__=='__main__': drone =Drone() drone.open()# 이벤트 핸들링 함수 등록 drone.setEventHandler(DataType.Ack, eventAck)# Ping 전송 drone.sendPing(DeviceType.Controller)sleep(0.1) drone.close()