I rewrited all trakd nodes to Vala from C++11. As a result i dropped many dependencies, so total binaries size smaller 2x. But unfortunately did not fit in 4 MiB TL-WR703N (but 8 MiB i think enough) (OpenWRT + LuCI + trakd).

As a part of this work i wrote codegen and bindings to LCM for Vala, that patches don’t pass to upstream, but available in my github fork (lcm-vala branch).

I really liked the built-in support for asynchronous processes and built-in signal-slot.

Part of rotd.vala that does motor homing:

// Waits until motors stops and apply home position
private static async void homing_finish() {
	debug("Homing finishing");
	Timeout.add(HOMING_PERIOD_MS,
		() => {
			// XXX error handling
			var s = conn.get_status();
			if (s.az_in_motion || s.el_in_motion)
				return true;

			debug("Reset current position to 0");
			conn.set_cur_position(new CurPosition.with_data(0, 0));

			message("Apply tracking settings");
			conn.set_stepper_settings(tracking_settings);
			homing_finish.callback();

			return false;
		});
	yield;
}

private static async void homing_proc() {
	message("Homing process started");
	homing_in_proc = true;

	yield homing_init();
	yield homing_homing();
	yield homing_finish();

	message("Hoiming finished");
	homing_in_proc = false;
}

Also i wrote X-Plane 10 simulator input, that replaces mavlink listener node. I started working on tracking goal node (that is essential part for tracker).

But we still not complete with mechanics.