device: port to GTask