Use pw_system:async

In order to make this switch, the work_queue dependency has to be
shrunk to just a RunOnce API, as this is what pw_system:async offers.

Change-Id: Id239acbce5f60f14080bd62bc657b8b0ce4fbc05
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/showcase/rp2/+/220177
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keir Mierle <keir@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Reviewed-by: Aaron Green <aarongreen@google.com>
Commit-Queue: Taylor Cramer <cramertj@google.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
diff --git a/system/worker.cc b/system/worker.cc
new file mode 100644
index 0000000..9f16097
--- /dev/null
+++ b/system/worker.cc
@@ -0,0 +1,40 @@
+// Copyright 2024 The Pigweed Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+#include "system/worker.h"
+
+#include "pw_system/system.h"
+#include "pw_log/log.h"
+
+namespace am::system {
+namespace internal {
+
+/// A worker which delegates work to `pw::System`.
+class SystemWorker final: public Worker {
+ public:
+  void RunOnce(pw::Function<void()>&& work) override {
+    if (!pw::System().RunOnce(std::move(work))) {
+      PW_LOG_ERROR("Unable to schedule work on system worker.");
+  }
+  }
+};
+
+}  // namespace internal
+
+Worker& GetWorker() {
+    static internal::SystemWorker worker;
+    return worker;
+}
+
+}  // namespace am::system
\ No newline at end of file