xref: /aosp_15_r20/external/pigweed/docs/showcases/sense/index.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense:
2*61c4878aSAndroid Build Coastguard Worker
3*61c4878aSAndroid Build Coastguard Worker=========================================
4*61c4878aSAndroid Build Coastguard WorkerSense: An interactive tour though Pigweed
5*61c4878aSAndroid Build Coastguard Worker=========================================
6*61c4878aSAndroid Build Coastguard WorkerWelcome to Pigweed Sense: **a tour of key Pigweed components experienced through
7*61c4878aSAndroid Build Coastguard Workeran imagined air quality monitor product**. Since Pigweed is intended for larger
8*61c4878aSAndroid Build Coastguard Workerteams and higher-complexity products, it’s important to experience Pigweed in a
9*61c4878aSAndroid Build Coastguard Workermedium-size project like Sense that shows a lot of Pigweed components working
10*61c4878aSAndroid Build Coastguard Workertogether.
11*61c4878aSAndroid Build Coastguard Worker
12*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense-figure-1:
13*61c4878aSAndroid Build Coastguard Worker
14*61c4878aSAndroid Build Coastguard Worker.. figure:: https://storage.googleapis.com/pigweed-media/sense/20240802/hero.png
15*61c4878aSAndroid Build Coastguard Worker
16*61c4878aSAndroid Build Coastguard Worker   Figure 1. :ref:`showcase-sense-product-concept`
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker**Bringing a consumer electronics product from concept to mass production requires
19*61c4878aSAndroid Build Coastguard Workermore than just good firmware**. Shipping an electronics product also requires
20*61c4878aSAndroid Build Coastguard Workersupport software for other product phases like prototyping, bringup,
21*61c4878aSAndroid Build Coastguard Workermanufacturing, integration testing & QA, hardware validation, and so on. Product
22*61c4878aSAndroid Build Coastguard Workerdevelopment also includes authoring large amounts of non-firmware code that runs
23*61c4878aSAndroid Build Coastguard Workeron developer, factory, and hardware engineer machines. Large scale products also
24*61c4878aSAndroid Build Coastguard Workerneed significant investment in testing to facilitate large teams collaborating
25*61c4878aSAndroid Build Coastguard Workerand building towards a product vision. Sense illustrates a micro version of a
26*61c4878aSAndroid Build Coastguard Workerconsumer electronics lifecycle, from the perspective of the firmware team,
27*61c4878aSAndroid Build Coastguard Workerleveraging many of the Pigweed components designed for large-scale projects.
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard WorkerThe components you will experience through the
30*61c4878aSAndroid Build Coastguard Worker:ref:`Sense tutorial <showcase-sense-tutorial-intro>` have helped ship
31*61c4878aSAndroid Build Coastguard Workermillions of products to millions of people, by teams who were able to focus on
32*61c4878aSAndroid Build Coastguard Workertheir core product value proposition instead of the low-level embedded plumbing
33*61c4878aSAndroid Build Coastguard Workerconcerns Pigweed solves like portable RTOS primitives, test frameworks, RPC
34*61c4878aSAndroid Build Coastguard Workercomms from device to host, crash handling, interactive console, scripting
35*61c4878aSAndroid Build Coastguard Workersolutions, etc.
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Worker.. grid:: 2
38*61c4878aSAndroid Build Coastguard Worker
39*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`rocket` Tutorial
40*61c4878aSAndroid Build Coastguard Worker      :link: showcase-sense-tutorial-intro
41*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
42*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-primary
43*61c4878aSAndroid Build Coastguard Worker
44*61c4878aSAndroid Build Coastguard Worker      Walk through the Sense tutorial to see all of Sense's features
45*61c4878aSAndroid Build Coastguard Worker      in action, such as hermetic building, authoring in Visual Studio
46*61c4878aSAndroid Build Coastguard Worker      Code, viewings logs and sending commands over RPC, and more.
47*61c4878aSAndroid Build Coastguard Worker
48*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`code` Source code
49*61c4878aSAndroid Build Coastguard Worker      :link: https://cs.opensource.google/pigweed/showcase/sense
50*61c4878aSAndroid Build Coastguard Worker      :link-type: url
51*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
52*61c4878aSAndroid Build Coastguard Worker
53*61c4878aSAndroid Build Coastguard Worker      Browse Sense's source code. If you like what you see, you are
54*61c4878aSAndroid Build Coastguard Worker      welcome to use Sense as the starting point for your own products.
55*61c4878aSAndroid Build Coastguard Worker
56*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense-overview:
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Worker----------------------
59*61c4878aSAndroid Build Coastguard WorkerWhat is Pigweed Sense?
60*61c4878aSAndroid Build Coastguard Worker----------------------
61*61c4878aSAndroid Build Coastguard WorkerSense is three things:
62*61c4878aSAndroid Build Coastguard Worker
63*61c4878aSAndroid Build Coastguard Worker#. :ref:`showcase-sense-product-concept` - A simplistic air quality monitor,
64*61c4878aSAndroid Build Coastguard Worker   described in more detail below. This is not a real product, but is instead a
65*61c4878aSAndroid Build Coastguard Worker   subset of functionality from an imagined full air quality sensor product.
66*61c4878aSAndroid Build Coastguard Worker   Despite not being real, it captures realistic flows such as integrating
67*61c4878aSAndroid Build Coastguard Worker   multiple inputs (sensors, buttons) and outputs (RGB LED), state machine
68*61c4878aSAndroid Build Coastguard Worker   management, and more. Sense will also soon include a web app, to
69*61c4878aSAndroid Build Coastguard Worker   graphically display air quality.
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard Worker#. :ref:`showcase-sense-codebase` - A collection of C++ on-device firmware
72*61c4878aSAndroid Build Coastguard Worker   code and tests, including a port to the developer host, and factory tooling to
73*61c4878aSAndroid Build Coastguard Worker   illustrate how Pigweed’s tooling could help in manufacturing. This is a small
74*61c4878aSAndroid Build Coastguard Worker   subset of what a large scale project using Pigweed might look like.
75*61c4878aSAndroid Build Coastguard Worker
76*61c4878aSAndroid Build Coastguard Worker#. :ref:`showcase-sense-tutorial` - An interactive tour through
77*61c4878aSAndroid Build Coastguard Worker   Pigweed components in the context of a small-scale, semi-realistic product
78*61c4878aSAndroid Build Coastguard Worker   that demonstrates how larger products might leverage Pigweed. This page
79*61c4878aSAndroid Build Coastguard Worker   you're reading now is the start of the tutorial.
80*61c4878aSAndroid Build Coastguard Worker
81*61c4878aSAndroid Build Coastguard Worker.. note::
82*61c4878aSAndroid Build Coastguard Worker
83*61c4878aSAndroid Build Coastguard Worker   Pigweed Sense, or Sense for short, is a fake product concept purely for
84*61c4878aSAndroid Build Coastguard Worker   illustration purposes, and has no connection to any real products, from Google
85*61c4878aSAndroid Build Coastguard Worker   or otherwise.
86*61c4878aSAndroid Build Coastguard Worker
87*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense-product-concept:
88*61c4878aSAndroid Build Coastguard Worker
89*61c4878aSAndroid Build Coastguard Worker--------------------------
90*61c4878aSAndroid Build Coastguard WorkerSense, the product concept
91*61c4878aSAndroid Build Coastguard Worker--------------------------
92*61c4878aSAndroid Build Coastguard WorkerThe Sense product is a basic air quality monitor that watches the levels of
93*61c4878aSAndroid Build Coastguard Workervolatile organic compounds (VOCs) in the air, and alerts via the RGB LED if the
94*61c4878aSAndroid Build Coastguard WorkerVOCs are too high and the user should take an action like opening a window.
95*61c4878aSAndroid Build Coastguard WorkerThe RGB LED also passively indicates air quality on a color spectrum.
96*61c4878aSAndroid Build Coastguard Worker
97*61c4878aSAndroid Build Coastguard WorkerThe core interactions for the product are to observe the RGB LED showing green
98*61c4878aSAndroid Build Coastguard Worker(nominal, OK), observe the RGB LED blinking red (VOC alarm), adjust the VOC
99*61c4878aSAndroid Build Coastguard Workerthreshold up/down via button press, and silencing/snoozing an active alarm with
100*61c4878aSAndroid Build Coastguard Workera button press. Additionally, the RGB LED’s brightness is adjusted to match
101*61c4878aSAndroid Build Coastguard Workerambient light to avoid being too distracting in low light conditions.
102*61c4878aSAndroid Build Coastguard Worker
103*61c4878aSAndroid Build Coastguard Worker.. _Raspberry Pi Pico 1: https://www.raspberrypi.com/products/raspberry-pi-pico/
104*61c4878aSAndroid Build Coastguard Worker.. _Pimoroni Enviro+ Pack: https://shop.pimoroni.com/products/pico-enviro-pack
105*61c4878aSAndroid Build Coastguard Worker.. _Raspberry Pi Debug Probe: https://www.raspberrypi.com/products/debug-probe/
106*61c4878aSAndroid Build Coastguard Worker.. _Pimoroni Pico Omnibus (Dual Expander): https://shop.pimoroni.com/products/pico-omnibus?variant=32369533321299
107*61c4878aSAndroid Build Coastguard Worker
108*61c4878aSAndroid Build Coastguard WorkerWhile there is no real Pigweed Sense product, the imagined product can
109*61c4878aSAndroid Build Coastguard Workerbe assembled from a `Raspberry Pi Pico 1`_ (or the new Pico 2) and a
110*61c4878aSAndroid Build Coastguard Worker`Pimoroni Enviro+ Pack`_. It is useful to also have a
111*61c4878aSAndroid Build Coastguard Worker`Raspberry Pi Debug Probe`_ and a `Pimoroni Pico Omnibus (Dual Expander)`_.
112*61c4878aSAndroid Build Coastguard WorkerSee :ref:`Figure 1 <showcase-sense-figure-1>`.
113*61c4878aSAndroid Build Coastguard Worker
114*61c4878aSAndroid Build Coastguard Worker.. note::
115*61c4878aSAndroid Build Coastguard Worker
116*61c4878aSAndroid Build Coastguard Worker   While the Enviro+ pack has a display, at time of writing (August 2024)
117*61c4878aSAndroid Build Coastguard Worker   Pigweed’s display subsystem isn’t ready yet, so there is no display use.
118*61c4878aSAndroid Build Coastguard Worker
119*61c4878aSAndroid Build Coastguard Worker.. _Pico W: https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#raspberry-pi-pico-w-and-pico-wh
120*61c4878aSAndroid Build Coastguard Worker
121*61c4878aSAndroid Build Coastguard Worker.. caution::
122*61c4878aSAndroid Build Coastguard Worker
123*61c4878aSAndroid Build Coastguard Worker   **The Pico W is untested**. We are still in the process of verifying that
124*61c4878aSAndroid Build Coastguard Worker   all parts of the tutorial work with the `Pico W`_. You are welcome to try
125*61c4878aSAndroid Build Coastguard Worker   the tutorial with a Pico W, but please remember that some things may not
126*61c4878aSAndroid Build Coastguard Worker   work yet.
127*61c4878aSAndroid Build Coastguard Worker
128*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense-codebase:
129*61c4878aSAndroid Build Coastguard Worker
130*61c4878aSAndroid Build Coastguard Worker-------------------
131*61c4878aSAndroid Build Coastguard WorkerSense, the codebase
132*61c4878aSAndroid Build Coastguard Worker-------------------
133*61c4878aSAndroid Build Coastguard WorkerThe Sense codebase covers different parts of a typical consumer electronics
134*61c4878aSAndroid Build Coastguard Workerlifecycle: initial development, prototyping & bringup, manufacturing, and
135*61c4878aSAndroid Build Coastguard Workerproduction. Since the software has multiple users across multiple teams (e.g.
136*61c4878aSAndroid Build Coastguard Workersoftware engineering, quality assurance, product management, returned
137*61c4878aSAndroid Build Coastguard Workermerchandise authorization, etc.) there is a fair amount of software beyond just
138*61c4878aSAndroid Build Coastguard Workerthe production image.
139*61c4878aSAndroid Build Coastguard Worker
140*61c4878aSAndroid Build Coastguard WorkerOn-device code
141*61c4878aSAndroid Build Coastguard Worker==============
142*61c4878aSAndroid Build Coastguard Worker* **Applications** (C++) - These are the various applications that exist to
143*61c4878aSAndroid Build Coastguard Worker  support different phases of the product, including bringup (``blinky``),
144*61c4878aSAndroid Build Coastguard Worker  development (``production``), and manufacturing (``factory``). Applications
145*61c4878aSAndroid Build Coastguard Worker  are built by instantiating and leveraging portable instances of
146*61c4878aSAndroid Build Coastguard Worker  :ref:`modules <docs-glossary-module>`. Applications are
147*61c4878aSAndroid Build Coastguard Worker  like ``.exe`` files for normal computers, but instead run on our Sense hardware.
148*61c4878aSAndroid Build Coastguard Worker  Only the ``production`` application would be used by end customers (if
149*61c4878aSAndroid Build Coastguard Worker  this was a real product).
150*61c4878aSAndroid Build Coastguard Worker
151*61c4878aSAndroid Build Coastguard Worker* **Modules** (C++) - These are the portable, core abstractions that the
152*61c4878aSAndroid Build Coastguard Worker  applications are composed of, such as the state manager, sensor filtering
153*61c4878aSAndroid Build Coastguard Worker  code, and other hardware-agnostic functionality.
154*61c4878aSAndroid Build Coastguard Worker
155*61c4878aSAndroid Build Coastguard Worker* **Drivers & targets** (C++) - This code covers hardware-specific
156*61c4878aSAndroid Build Coastguard Worker  resources like drivers that sample air quality or proximity.
157*61c4878aSAndroid Build Coastguard Worker
158*61c4878aSAndroid Build Coastguard Worker* **Unit tests & scaffolding** (C++) - The unit tests ensure that the Sense firmware
159*61c4878aSAndroid Build Coastguard Worker  works as expected, even as further changes are made. The tests cover the core
160*61c4878aSAndroid Build Coastguard Worker  functionality of Sense, such as the state manager that coordinates the LED in
161*61c4878aSAndroid Build Coastguard Worker  response to sensor events.
162*61c4878aSAndroid Build Coastguard Worker
163*61c4878aSAndroid Build Coastguard WorkerHost code (for developers only)
164*61c4878aSAndroid Build Coastguard Worker===============================
165*61c4878aSAndroid Build Coastguard Worker
166*61c4878aSAndroid Build Coastguard Worker* **Console** (Python) - Sense’s interactive console is built on top of
167*61c4878aSAndroid Build Coastguard Worker  :ref:`module-pw_console`, but has project-custom extensions. The console
168*61c4878aSAndroid Build Coastguard Worker  facilitates general development, debugging, and bringup.
169*61c4878aSAndroid Build Coastguard Worker
170*61c4878aSAndroid Build Coastguard Worker* **Flashing** (Python) - Flashing device firmware is often fairly custom,
171*61c4878aSAndroid Build Coastguard Worker  necessitating project-specific scripts and associated build machinery.
172*61c4878aSAndroid Build Coastguard Worker  This is still the case in Sense, but Sense does demonstrate a powerful
173*61c4878aSAndroid Build Coastguard Worker  property of Bazel-based embedded projects: the ability to express flashing
174*61c4878aSAndroid Build Coastguard Worker  as just another part of the build graph. In Sense it's possible to clone
175*61c4878aSAndroid Build Coastguard Worker  the repo and jump immediately to flashing. When Bazel detects that the
176*61c4878aSAndroid Build Coastguard Worker  flashing target's firmware has not yet been built, Bazel builds it
177*61c4878aSAndroid Build Coastguard Worker  automatically and then proceeds to run the flashing script.
178*61c4878aSAndroid Build Coastguard Worker
179*61c4878aSAndroid Build Coastguard Worker* **Manufacturing** (Python) - Manufacturing typically requires a series
180*61c4878aSAndroid Build Coastguard Worker  of custom scripts and programs for each step of the manufacturing flow.
181*61c4878aSAndroid Build Coastguard Worker  Sense has a 1-station "fake factory" flow you can run at your desk.
182*61c4878aSAndroid Build Coastguard Worker
183*61c4878aSAndroid Build Coastguard WorkerWeb interface (for end customers)
184*61c4878aSAndroid Build Coastguard Worker=================================
185*61c4878aSAndroid Build Coastguard Worker.. _Web Serial API: https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API
186*61c4878aSAndroid Build Coastguard Worker
187*61c4878aSAndroid Build Coastguard Worker* **Sense web UI** (TypeScript) - The Sense web app lets you monitor
188*61c4878aSAndroid Build Coastguard Worker  and control a connected Sense device from a web browser. The
189*61c4878aSAndroid Build Coastguard Worker  web app and the Sense device communicate with each other via
190*61c4878aSAndroid Build Coastguard Worker  :ref:`module-pw_rpc` and the `Web Serial API`_; the Sense device
191*61c4878aSAndroid Build Coastguard Worker  does not run a web server.
192*61c4878aSAndroid Build Coastguard Worker
193*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense-tutorial:
194*61c4878aSAndroid Build Coastguard Worker
195*61c4878aSAndroid Build Coastguard Worker-------------------
196*61c4878aSAndroid Build Coastguard WorkerSense, the tutorial
197*61c4878aSAndroid Build Coastguard Worker-------------------
198*61c4878aSAndroid Build Coastguard WorkerThe :ref:`tutorial <showcase-sense-tutorial-intro>` provides a
199*61c4878aSAndroid Build Coastguard Workerguided, hands-on walkthrough of everything we've discussed here, including:
200*61c4878aSAndroid Build Coastguard Worker
201*61c4878aSAndroid Build Coastguard Worker* Hermetic building, flashing and testing with Bazel,
202*61c4878aSAndroid Build Coastguard Worker  :ref:`Pigweed's primary build system <seed-0111>`.
203*61c4878aSAndroid Build Coastguard Worker
204*61c4878aSAndroid Build Coastguard Worker* Authoring in Visual Studio Code with full C++ code intelligence
205*61c4878aSAndroid Build Coastguard Worker  through :ref:`pw_ide <module-pw_ide>`.
206*61c4878aSAndroid Build Coastguard Worker
207*61c4878aSAndroid Build Coastguard Worker* Hooking into :ref:`pw_system <module-pw_system>`, Pigweed's application
208*61c4878aSAndroid Build Coastguard Worker  framework.
209*61c4878aSAndroid Build Coastguard Worker
210*61c4878aSAndroid Build Coastguard Worker* Viewing device logs through :ref:`pw_console <module-pw_console>`.
211*61c4878aSAndroid Build Coastguard Worker
212*61c4878aSAndroid Build Coastguard Worker* Sending commands to the device over RPC with :ref:`pw_rpc <module-pw_rpc>`.
213*61c4878aSAndroid Build Coastguard Worker
214*61c4878aSAndroid Build Coastguard Worker* Running host-side and on-device unit tests with
215*61c4878aSAndroid Build Coastguard Worker  :ref:`pw_unit_test <module-pw_unit_test>`.
216*61c4878aSAndroid Build Coastguard Worker
217*61c4878aSAndroid Build Coastguard Worker* Portable software abstractions built on top of Pigweed's
218*61c4878aSAndroid Build Coastguard Worker  extensive collection of :ref:`modules <docs-glossary-module>`.
219*61c4878aSAndroid Build Coastguard Worker
220*61c4878aSAndroid Build Coastguard Worker.. _showcase-sense-complexity:
221*61c4878aSAndroid Build Coastguard Worker
222*61c4878aSAndroid Build Coastguard Worker------------------------------------------------------
223*61c4878aSAndroid Build Coastguard WorkerA note on complexity, or, why is Sense so complicated?
224*61c4878aSAndroid Build Coastguard Worker------------------------------------------------------
225*61c4878aSAndroid Build Coastguard WorkerThere is no getting around that the Sense codebase is complicated and large
226*61c4878aSAndroid Build Coastguard Workerrelative to the complexity of the imaginary Sense product. A straightforward
227*61c4878aSAndroid Build Coastguard Workerimplementation could have less code, potentially much less. So why then use
228*61c4878aSAndroid Build Coastguard Workersomething like Pigweed, which may appear kafkaesque in complexity to some
229*61c4878aSAndroid Build Coastguard Workerengineers, compared to the simpler alternative?
230*61c4878aSAndroid Build Coastguard Worker
231*61c4878aSAndroid Build Coastguard Worker.. Use raw HTML for the next paragraph because it's not possible to bold,
232*61c4878aSAndroid Build Coastguard Worker.. underline, and format a word in reStructuredText.
233*61c4878aSAndroid Build Coastguard Worker
234*61c4878aSAndroid Build Coastguard Worker.. raw:: html
235*61c4878aSAndroid Build Coastguard Worker
236*61c4878aSAndroid Build Coastguard Worker   <p>
237*61c4878aSAndroid Build Coastguard Worker     The short answer is <b><i><u>scale</u></i></b>. Scale in number of
238*61c4878aSAndroid Build Coastguard Worker     engineers, scale in number of subsystems, scale in risk to instability,
239*61c4878aSAndroid Build Coastguard Worker     scale in security concerns, scale in number of units manufactured, scale
240*61c4878aSAndroid Build Coastguard Worker     in brand risk to a bad product, scale of repeatability, and so on.
241*61c4878aSAndroid Build Coastguard Worker   </p>
242*61c4878aSAndroid Build Coastguard Worker
243*61c4878aSAndroid Build Coastguard WorkerLet’s explore some of the ways the Sense codebase is larger than a naive,
244*61c4878aSAndroid Build Coastguard Workerstraightforward implementation of a comparable product.
245*61c4878aSAndroid Build Coastguard Worker
246*61c4878aSAndroid Build Coastguard Worker* **Testing** - A key tenet of Pigweed is that automated testing is useful, and
247*61c4878aSAndroid Build Coastguard Worker  rapidly pays for itself by enabling product delivery in less time and with
248*61c4878aSAndroid Build Coastguard Worker  better reliability. While time-to-first-feature may be higher without a
249*61c4878aSAndroid Build Coastguard Worker  testing-enabled codebase, the time-to-no-bugs is reduced. However,
250*61c4878aSAndroid Build Coastguard Worker  structuring code for testing adds complexity.
251*61c4878aSAndroid Build Coastguard Worker
252*61c4878aSAndroid Build Coastguard Worker* **Security & robustness** - Making host-portable code enables running with modern
253*61c4878aSAndroid Build Coastguard Worker  code analysis tooling like ASAN, TSAN, MSAN, fuzzers, and more that are unlikely
254*61c4878aSAndroid Build Coastguard Worker  to run in the embedded context. Fun fact: We caught real bugs in Sense with this
255*61c4878aSAndroid Build Coastguard Worker  tooling during development!
256*61c4878aSAndroid Build Coastguard Worker
257*61c4878aSAndroid Build Coastguard Worker* **Portability** - Code written with Pigweed abstractions can run on multiple
258*61c4878aSAndroid Build Coastguard Worker  target platforms, including custom hardware as well as Mac and Linux. This
259*61c4878aSAndroid Build Coastguard Worker  portability retains product optionality around hardware selection, and makes
260*61c4878aSAndroid Build Coastguard Worker  reusing the same code across products easier.
261*61c4878aSAndroid Build Coastguard Worker
262*61c4878aSAndroid Build Coastguard Worker.. _hermetic: https://bazel.build/basics/hermeticity
263*61c4878aSAndroid Build Coastguard Worker
264*61c4878aSAndroid Build Coastguard Worker* **Fast and consistent developer setup** - Our Bazel-based development environment
265*61c4878aSAndroid Build Coastguard Worker  enables engineers to become productive quickly. Furthermore, the fact that the
266*61c4878aSAndroid Build Coastguard Worker  environment is repeatable and `hermetic`_ reduces the chance that local developer
267*61c4878aSAndroid Build Coastguard Worker  machine settings will leak into developed code or processes. The product team's
268*61c4878aSAndroid Build Coastguard Worker  infrastructure, e.g. continuous integration (CI) & commit queue (CQ), can
269*61c4878aSAndroid Build Coastguard Worker  leverage the same machinery, reducing the delta between developer machines and
270*61c4878aSAndroid Build Coastguard Worker  infra.
271*61c4878aSAndroid Build Coastguard Worker
272*61c4878aSAndroid Build Coastguard WorkerWith that said, we are still working on Sense, and hope to reduce the
273*61c4878aSAndroid Build Coastguard Workercomplexity and add more comments to make the code more approachable.
274*61c4878aSAndroid Build Coastguard Worker
275*61c4878aSAndroid Build Coastguard Worker----------
276*61c4878aSAndroid Build Coastguard WorkerNext steps
277*61c4878aSAndroid Build Coastguard Worker----------
278*61c4878aSAndroid Build Coastguard Worker.. _Sense source code: https://cs.opensource.google/pigweed/showcase/sense
279*61c4878aSAndroid Build Coastguard Worker
280*61c4878aSAndroid Build Coastguard WorkerStart the :ref:`Sense tutorial <showcase-sense-tutorial-intro>`
281*61c4878aSAndroid Build Coastguard Workeror browse the `Sense source code`_.
282*61c4878aSAndroid Build Coastguard Worker
283*61c4878aSAndroid Build Coastguard Worker.. toctree::
284*61c4878aSAndroid Build Coastguard Worker   :maxdepth: 1
285*61c4878aSAndroid Build Coastguard Worker   :hidden:
286*61c4878aSAndroid Build Coastguard Worker
287*61c4878aSAndroid Build Coastguard Worker   self
288*61c4878aSAndroid Build Coastguard Worker   Tutorial <tutorial/index>
289*61c4878aSAndroid Build Coastguard Worker   Source code <https://pigweed.googlesource.com/pigweed/showcase/sense/>
290