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