node {
void evaluate(Context ctx) {
auto mpu = getValue<input_DEV>(ctx);
if (isSettingUp())
emitValue<output_DEVU0027>(ctx, mpu);
if (!isInputDirty<input_UPD>(ctx))
return;
mpu->dmpGetQuaternion(&q, fifoBuffer);
mpu->dmpGetGravity(&gravity, &q);
mpu->dmpGetYawPitchRoll(ypr, &q, &gravity);
emitValue<output_YAW>(ctx, ypr[0] * 180 / PI);
emitValue<output_PITCH>(ctx, ypr[1] * 180 / PI);
emitValue<output_ROLL>(ctx, ypr[2] * 180 / PI);
emitValue<output_DONE>(ctx, 1);
}
}