public function startUdpNavdata()
{
$this->udpNavdata = new UdpNavdata($this->loop);
$self = $this;
$this->udpNavdata->on('navdata', function (Frame $navdata) use(&$self) {
if (count($navdata->getDroneState()) > 0) {
$stateData = $navdata->getDroneState();
if ($stateData['emergencyLanding'] && $self->disableEmergency) {
//todo: disable emergency state
} else {
//todo: disable emergency state
}
}
$options = $navdata->getOptions();
if (count($navdata->getDroneState()) > 0 && isset($options['demo'])) {
// Control drone state
$optionDemo = $options['demo'];
$demoData = $optionDemo->getData();
$currentState = $demoData['controlState'];
$self->emitState('landing', 'CTRL_TRANS_LANDING', $currentState);
$self->emitState('landed', 'CTRL_LANDED', $currentState);
$self->emitState('takeoff', 'CTRL_TRANS_TAKEOFF', $currentState);
$self->emitState('hovering', 'CTRL_HOVERING', $currentState);
$self->emitState('flying', 'CTRL_FLYING', $currentState);
$self->lastState = $currentState;
$battery = $demoData['batteryPercentage'];
// battery events
$stateData = $navdata->getDroneState();
if ($stateData['lowBattery'] === 1) {
$self->emit('lowBattery', [$battery]);
}
if ($battery !== $self->lastBattery) {
$self->emit('batteryChange', [$battery]);
$self->lastBattery = $battery;
}
// altitude events
$altitude = $demoData['altitudeMeters'];
if ($altitude !== $self->lastAltitude) {
$self->emit('altitudeChange', [$altitude]);
$self->lastAltitude = $altitude;
}
}
$self->emit('navdata', [$navdata]);
});
}