cc-haxe/src/bin/GPS.hx
2023-07-30 15:55:22 +02:00

71 lines
1.6 KiB
Haxe

package bin;
import lib.CLIAppBase;
import kernel.gps.INS;
import lib.Pos3;
import lib.Vec.Vec3;
using tink.CoreApi;
class GPS extends CLIAppBase {
public function new() {
registerSyncSubcommand("set", (args) -> {
var x:Float = Std.parseFloat(args[0]);
var y:Float = Std.parseFloat(args[1]);
var z:Float = Std.parseFloat(args[2]);
var pos:Pos3 = new Vec3<Float>(x, y, z);
kernel.gps.GPS.setManualPosition(pos);
return true;
}, "<x> <y> <z>");
registerSyncSubcommand("status", (args) -> {
var pos = kernel.gps.GPS.getPosition();
if (pos != null) {
handle.writeLine('Position x:${pos.x} y:${pos.y} z:${pos.z}');
} else {
handle.writeLine("Position not available");
return true;
}
var acc = kernel.gps.GPS.getAccuracy();
if (acc == 1) {
handle.writeLine("Accuracy: Low");
} else if (acc == 2) {
handle.writeLine("Accuracy: Medium");
} else if (acc == 3) {
handle.writeLine("Accuracy: High");
}
var ins = INS.getHeading();
if (ins != null) {
handle.writeLine('INS heading: ${ins.x} y:${ins.y} z:${ins.z}');
} else {
handle.writeLine("INS heading not available");
}
return true;
});
registerAsyncSubcommand("locate", (args) -> {
return kernel.gps.GPS.locate().map((pos) -> {
if (pos != null) {
handle.writeLine('Position x:${pos.x} y:${pos.y} z:${pos.z}');
} else {
handle.writeLine("Position not available");
}
return true;
});
});
registerAsyncSubcommand("ins", (args) -> {
return INS.align().map((_) -> {
handle.writeLine("INS aligned");
return true;
});
});
}
}