| ►Kernel | Threads, synchronization, interrupts and scheduling (pbl/kernel) |
| Compiler abstraction | Attributes and builtins, independent of the compiler |
| Introspection | Thread introspection for core dumps, fault handling, the task watchdog and telemetry |
| Idle and tick | Interface between the kernel and the SoC's tickless idle code |
| Boot | SoC hook in the kernel's reset path |
| Interrupts | Interrupt locking and build-time interrupt binding |
| Message queues | Fixed-size message rings that copy messages in and out |
| Mutexes | Recursive mutexes with priority inheritance |
| Poll groups | Waiting on several message queues at once |
| Scheduler | Scheduler start, preemption control and uptime |
| Code and data placement | Placement of code and data in special sections |
| Semaphores | Counting semaphores; a binary semaphore has limit 1 |
| Threads | Thread creation, lifecycle and per-thread state |
| Time and priorities | Ticks, timeouts and thread priorities shared by every kernel object |
| ►MCU | CPU core helpers: interrupts, privilege, cache and FPU (pbl/mcu) |
| Cache | Instruction and data cache maintenance |
| FPU | Floating-point unit helpers |
| Execution state | Exception and interrupt-mask state of the CPU |
| MPU | Memory Protection Unit regions |
| Privilege | Thread-mode privilege control |
| ►SoC | SoC-specific interfaces (pbl/soc) |
| nRF | Nordic nRF52 SoC interfaces |
| SF32LB | SiFli SF32LB52 SoC interfaces |
| ►Drivers | Hardware driver interfaces (pbl/drivers) |
| ►Accelerometer | Accelerometer driver interface |
| QEMU accelerometer | Accelerometer fed with samples from the QEMU host |
| Ambient light sensor | Ambient light sensor (ALS) driver interface |
| ►Audio playback | Speaker (audio output) driver interface |
| DA7212 on nRF5 | Audio playback implementation for a DA7212 codec fed by the nRF5 I2S peripheral |
| QEMU audio | Audio playback implementation for the QEMU audio device |
| SF32LB52 audio | Audio playback implementation for the SF32LB52 audio codec (AUDCODEC) DAC |
| ►Backlight | Backlight driver interface |
| AW9364E | Backlight implementation for the AW9364E LED driver |
| PWM backlight | Backlight implementation driving the LED with a PWM output |
| ►Battery | Battery and charger driver interface |
| QEMU battery | Battery state set from the QEMU host |
| Buttons | Raw button state |
| Clock sources | Clock source requests |
| CRC | Hardware CRC acceleration used by CRC |
| Debounced buttons | Debounced button events |
| ►Display | Display driver interface |
| SF32LB JDI display | Display implementation for JDI memory-in-pixel panels driven by the SF32LB LCD controller |
| Sharp LS013B7DH01 | Display implementation for the Sharp LS013B7DH01 memory LCD |
| External interrupts | GPIO edge interrupts |
| ►Flash | External flash access |
| Low-level flash driver | Interface implemented by each flash part driver |
| Flash internals | Internal hooks of the flash API |
| QSPI flash | Generic QSPI NOR flash driver, used by the part drivers to implement Low-level flash driver |
| QSPI flash device | Board description of a QSPI flash device |
| QSPI flash parts | Description of a QSPI NOR flash part: instructions, status bits and timings |
| GPIO | GPIO driver interface |
| ►Heart rate monitor | Heart rate monitor (HRM) driver interface |
| GH3x2x | Heart rate monitor implementation for the Goodix GH3x2x sensors |
| QEMU HRM | Heart rate monitor implementation for QEMU, which emulates no heart rate sensor |
| ►I2C | I2C controller driver interface |
| I2C bus definitions | Bus and device definitions shared by boards, the common I2C code and the bus HALs |
| I2C HAL | Interface between the common I2C code and the per-SoC bus controller drivers |
| nRF5 I2C | I2C HAL implementation for the nRF5 TWIM peripheral |
| SF32LB I2C | I2C HAL implementation for the SF32LB I2C controller |
| ►IMU | Board configuration of inertial and magnetic sensor drivers |
| LIS2DW12 | ST LIS2DW12 accelerometer driver board configuration |
| LSM6DSO | ST LSM6DSO accelerometer driver board configuration |
| ►MMC5603NJ | MEMSIC MMC5603NJ magnetometer driver |
| MMC5603NJ registers | MMC5603NJ register map, from the MEMSIC datasheet (Rev |
| Magnetometer | 3-axis magnetometer driver interface |
| MCU information | Microcontroller identification |
| MCU reset cause | Hardware reset cause reported by the microcontroller |
| ►Microphone | Microphone driver interface |
| nRF5 PDM microphone | Microphone implementation for the nRF5 PDM peripheral |
| QEMU microphone | Microphone implementation for QEMU, delivering silence on a timer |
| SF32LB52 PDM microphone | Microphone implementation for the SF32LB52 PDM peripheral |
| OTP | One-time programmable slots holding factory data |
| ►PMIC | Power management IC: power off, charger and supply monitoring |
| nPM1300 | Nordic nPM1300 PMIC configuration and extra operations |
| Pressure sensor | Barometric pressure sensor driver interface |
| PWM | Pulse-width modulation outputs |
| QSPI port | Board description of a QSPI port |
| RNG | Hardware random number generator |
| RTC | Real-time clock: wall clock time, tick counter, wake-up alarm and timezone storage |
| SF32LB52 | SF32LB52-specific driver definitions |
| Temperature sensor | On-chip temperature sensor |
| ►Touch sensor | Touchscreen controller driver interface |
| CST816 | Hynitron CST816 touch controller board configuration |
| ►UART | Serial port driver interface |
| nRF5 | NRF5 UARTE device definition |
| POSIX | UART on the host: the terminal, a TCP port or a serial device |
| QEMU | QEMU UART device definition |
| SF32LB | SF32LB UART device definition |
| Vibration motor | Vibration motor driver interface |
| Watchdog | Hardware watchdog and reset cause |
| ►Services | System services built on top of the drivers (pbl/services) |
| Accelerometer manager | Shares the accelerometer between subscribers |
| ►Activity | Step counting, sleep tracking, activity sessions and health metrics |
| Activity algorithm interface | Interface between the activity service and the step/sleep algorithm |
| Activity calculators | Distance and calorie estimates from steps and the user profile |
| Activity insights | Sleep and activity rewards, summary pins and session notifications |
| Activity service internals | State, storage formats and helpers shared by the activity service sources |
| Health formatting helpers | Formatting of durations, distances and paces for the health UI |
| Heart rate zones | Heart rate zone classification using the user's heart rate preferences |
| Insights settings | Tunable parameters of the activity insights |
| Kraepelin algorithm | Step counting, sleep and activity session detection |
| Workout service | Manually started and stopped activity sessions |
| ►Alarms | User alarms, persisted across resets |
| Alarm pins | Timeline pins showing alarms |
| ►Analytics | Firmware metrics collected into periodic heartbeats |
| Analytics backends | Interface implemented by analytics backends |
| Animation service | System resources used by the applib animation module |
| App cache | Tracks the applications whose binaries are stored on the watch |
| App fetch endpoint | Fetches app binaries from the phone |
| App glances | App glances: per-app slices shown in the launcher |
| App inbox service | Passes variable-length messages from a kernel service into an app-provided buffer |
| App message | Sending of app Pebble Protocol messages queued in the app outbox |
| App outbox service | Passes variable-length messages from an app buffer to a kernel service |
| Audio endpoint | Streams encoded audio frames from the watch to the phone |
| ►Battery | Battery state of charge, charger state and power state handling |
| Battery curve | Conversion between battery voltage, charge percentage and time remaining |
| Battery monitor | Power state control in response to battery state changes |
| ►BlobDB | Key/value databases the phone synchronizes with the watch |
| App database | Installed apps (BlobDBIdApps) |
| App glance database | App glances (BlobDBIdAppGlance), keyed by app UUID |
| App glance records | Serialized app glance format stored in the app glance database |
| Contacts database | Contacts (BlobDBIdContacts), keyed by contact UUID |
| Endpoint | Messages sent by the watch on the BlobDB sync endpoint |
| Protocol | BlobDB Pebble Protocol definitions |
| Health database | Health typicals and averages synced from the phone (BlobDBIdHealth) |
| iOS notification preferences | Per-app notification preferences for iOS (BlobDBIdiOSNotifPref) |
| Notification database | BlobDB front end of notification storage (BlobDBIdNotifs) |
| Pin database | Timeline pins (BlobDBIdPins), keyed by pin UUID |
| Preferences database | System preferences exposed to the phone (BlobDBIdPrefs) |
| Reminder database | Timeline reminders (BlobDBIdReminders), keyed by reminder UUID |
| Settings database | System and notification settings synced both ways (BlobDBIdSettings) |
| Sync | Write-back of dirty records to the phone |
| Sync helpers | Settings file iteration helpers for databases that track dirty records |
| Timeline item storage | Settings file store of timeline items, shared by the pin and reminder databases |
| Utilities | BlobDB helpers |
| Watch app preferences | Preferences of system apps set from the phone (BlobDBIdWatchAppPrefs) |
| Weather database | Weather locations (BlobDBIdWeather), keyed by location UUID |
| ►Bluetooth services | Firmware-side Bluetooth management on top of the Bluetooth stack |
| Battery service | Feeds the battery level to the BLE Battery Service |
| Heart rate sharing | Shares heart rate over the BLE Heart Rate Service, with per-device user permission |
| Bluetooth control | Start, stop and reset the Bluetooth stack |
| Bonding database | Persistent BLE bondings, CCCDs and local Bluetooth settings |
| Bonding database debug | Shell dumps of the bonding database |
| Bonding storage format | On-flash layout of BLE pairing info in the bonding database |
| Device Information Service | Contents of the BLE Device Information Service |
| Local address | Cycling of the local resolvable private address, and the pinned address |
| Local identity | Local device name and identity address |
| Pairability | Reference-counted requests to be discoverable and pairable over BLE |
| BLE control endpoint | Pebble Protocol endpoint letting the phone make the watch discoverable |
| Boot splash | Splash screen shown while the firmware boots |
| Clock | Wall clock time, timezone and user-facing time formatting |
| ►Communication sessions | Pebble Protocol sessions with the phone |
| App session capability cache | Per-app cache of app session capabilities, persisted in a settings file |
| Default kernel sender | Kernel-heap send buffers behind the session send buffer API |
| Meta endpoint | Protocol error responses sent on the meta endpoint (ID 0) |
| Pebble Protocol framing | Pebble Protocol message header and size limits |
| Session analytics | Connectivity analytics hooks for session open and close |
| Session internals | Session state, for the session module and its transports |
| Receive router | Inbound message parsing and dispatch to endpoint handlers |
| Remote OS | Phone operating system reported in the platform bitfield |
| Remote version | Phone version and capabilities exchange |
| Send buffers | Build an outbound message piecemeal in a kernel-heap buffer |
| Send queue | Per-session queue of outbound jobs, each holding complete messages |
| Transport interface | Interface between sessions and the transports that carry them |
| ►Compositor | Composes the app framebuffer and modal windows into the display framebuffer |
| Display flush | Copies the dirty region of the system framebuffer to the display driver |
| Transitions | Ready-made compositor transitions and helpers to build new ones |
| ►Default transitions | Compositor transitions of the current design |
| Dot transitions | Collapse the screen to a dot, or expand a dot into the new screen |
| Launcher transitions | Transitions between the launcher and apps, moving the launcher's selected row |
| Modal transitions | Transitions pushing and popping modal windows on color displays |
| Peek transitions | Transition from the timeline peek into the timeline |
| Port hole transitions | App transitions through a ring closing in from and opening to the display edge |
| Round flip transitions | Horizontal flip transitions between apps, shaped for round displays |
| Shutter transitions | App transitions where the old app is pushed out behind a colored shutter |
| Slide transitions | Full-screen vertical slides, into the timeline or between apps |
| ►Legacy transitions | Slide transitions used on 1-bit displays |
| App slide transitions | Horizontal slides between apps |
| Modal slides | Vertical slides pushing and popping modal windows on 1-bit displays |
| Screenshot protocol | Pebble Protocol endpoint that sends the system framebuffer to the phone |
| ►Contacts | Contacts stored in the contacts database by the phone |
| Contact addresses | (De)serialization of attribute lists together with contact addresses |
| ►Data logging | Sessions of fixed-size items persisted to flash and spooled to the phone |
| Data logging endpoint | Pebble Protocol endpoint exchanging session data with the phone |
| Session list | In-memory list of data logging sessions, sorted by session ID |
| Data logging internals | Session structures, limits and wire format shared by the data logging service |
| Session storage | Session data stored in a PFS file per session |
| Debounced connection service | Hides short phone disconnections from apps |
| Compass | Magnetometer-based compass heading |
| Event service | Fans out kernel events to the tasks subscribed to them |
| Evented timers | Timers whose callbacks run on the registering task's event loop |
| ►Filesystem | Pebble File System (PFS) on the external NOR flash |
| App files | Consistent naming of per-app files |
| Flash translation layer | Contiguous virtual address space for PFS over several flash regions |
| Firmware update | Tracks a firmware update pushed by the phone |
| ►Get bytes | Transfer of core dumps, files and raw flash from the watch to the phone |
| Get bytes protocol | Get bytes endpoint messages |
| ►Get bytes storage | Backends reading the transferred objects |
| Core dump storage | Backend reading the most recent core dump from flash |
| File storage | Backend reading a PFS file |
| Flash storage | Backend reading a raw flash region |
| ►Heart rate monitor | Shared access to the optical heart rate sensor (BPM, HRV and SpO2) |
| HRM activity scene | What the user is doing, so the sensor algorithm can use a motion-tuned model |
| HRM manager internals | Manager state, tuning constants and kernel subscriptions |
| ►Internationalization | Translates firmware strings with the installed language pack |
| MO file format | Layout of gettext MO files, used for language packs |
| PRF idle watchdog | Shuts down an idle watch running the recovery firmware |
| Image fetch | Fetches images from the phone |
| IMU | IMU definitions shared by the motion sensor services |
| Backlight | Backlight state machine |
| Music | Now-playing metadata cache and media control |
| Music endpoint | Pebble Protocol music backend for Music |
| New timer | Timers and deferred work run on the high priority NewTimer task |
| ►Notifications | Notification storage, alerting policy and Do Not Disturb |
| Action chaining window | Menu window to pick a follow-up action of a chained action result |
| Alerts | Decides whether and how the user is alerted for a call or notification |
| Alert preferences | Persistent user preferences for alerts, Do Not Disturb and the speaker |
| Alert preferences (internal) | Preferences backing the alerts, Do Not Disturb and notification UI services |
| Alerts settings | Alert masks and settings accessors used by the settings UI |
| ►ANCS notifications | Turns notifications received over the Apple Notification Center Service into items |
| ANCS filtering | Per-app mute schedules and filtering rules for ANCS notifications |
| ANCS items | Builds timeline items from ANCS notifications |
| ANCS utilities | App identification and timestamp parsing for ANCS notifications |
| ANCS phone calls | Phone call events derived from ANCS notifications |
| Nexmo reauthentication | Handles the SMS check-in code used to reauthenticate SMS replies |
| Do Not Disturb | Quiet Time state, combining manual, scheduled and calendar-aware activation |
| Do Not Disturb toggle | Quiet Time toggle dialog |
| Notification constants | Constants shared by the SMS reply and phone call UIs |
| Notification images | Single slot holding the phone-supplied image of the notification on screen |
| Notification storage | Flash storage for received notifications |
| Notification storage sizing | Size of the notification storage file |
| Notification types | Kinds of alerting items shared by notifications and reminders |
| Orientation manager | Rotate display and input devices to match the display orientation preference |
| Persist | Per-app persistent key-value stores |
| Phone calls | Incoming call handling |
| Phone endpoint | Pebble Protocol phone control endpoint (0x21) |
| Ping | Periodic ping to the phone, reporting whether the watch is idle |
| Remote polling | Periodic "poll services" requests to the phone app |
| PRF update | Installation of a new recovery firmware (PRF) |
| ►Process management | Storage of installed app and worker binaries |
| App menu order storage | Persisted order of the apps in the launcher menu |
| ►Protobuf log | Protobuf payloads of measurements or events sent to the phone |
| Activity session log | Activity sessions logged as protobuf events |
| Heart rate log | Heart rate samples logged as protobuf measurements |
| Protobuf log internals | Record header and session structure |
| Payload decoding | Decoders of encoded payloads, for debugging and unit tests |
| Encoding helpers | Nanopb encode callbacks used to build payloads |
| ►Put bytes | Transfer of firmware, resources, apps and files from the phone to the watch |
| ►Put bytes storage | Backends storing received objects |
| File storage | Backend writing objects to PFS files |
| Put bytes storage backend interface | Operations implemented by each storage backend |
| Raw flash storage | Backend writing firmware, recovery and system resources to flash |
| Registry endpoint | Pebble Protocol registry endpoints |
| Regular timers | Callbacks run every N seconds or every N minutes |
| ►Runlevels | Global switch of the system operating mode |
| Runlevel enable masks | Definitions used to implement runlevels |
| Send text | Availability of the Send Text app |
| ►Service initialization | Boot-time initialization of all services |
| Common services | Services present in both the normal and the recovery firmware |
| Normal firmware services | Services only present in the normal (non-recovery) firmware |
| ►Settings files | Atomic key-value store on top of PFS |
| Settings file raw iterator | On-flash format of settings files and a cursor over their records |
| ►Shared PRF storage | Bluetooth pairing and settings shared between the recovery (PRF) and normal firmware |
| Shared PRF storage debug | Shell dump of the shared PRF storage |
| Legacy shared PRF storage layout | Former single-struct layout of the shared PRF storage, not used by the firmware |
| Shared PRF storage layout | On-flash layout of shared PRF storage entries |
| ►Speaker | Plays notes, tones, polyphonic tracks and PCM streams on the speaker |
| Note synthesis | Synthesizes PCM from SpeakerNote sequences |
| Stationary mode | Low power mode entered when the watch is not moving |
| System task | Low priority background task (KernelBG) running deferred work |
| Tick timer | Source of the PEBBLE_TICK_EVENT |
| Time | Timezone, DST and local time conversions |
| ►Timeline | Pins, notifications and reminders, their attributes, actions and layouts |
| Timeline action endpoint | Pebble Protocol endpoint 0x2cb0 for actions executed by the phone |
| Alarm layout | Layout of alarm pins (LayoutIdAlarm) |
| Timeline attributes | Typed key/value attributes describing timeline items and actions |
| Attribute groups | Shared code for data made of an attribute list and a group of elements with their own attributes |
| Serialized attributes | Wire format of a timeline attribute |
| Attributes and actions | Storage and serialization of an attribute list with an action group |
| Calendar events | Tracks whether a calendar event is ongoing |
| Calendar layout | Layout of calendar pins (LayoutIdCalendar) |
| Calendar layout icons | Vector icons next to the start and end times on calendar cards |
| Timeline events | Tracks the next or current timeline event for services that react to it |
| Generic layout | Layout of generic pins (LayoutIdGeneric) |
| Health layout | Layout of health pins (LayoutIdHealth) and Health app launch arguments |
| Timeline items | Pins, notifications and reminders |
| Layout layers | Layers that render templated content such as timeline items |
| Layout nodes | Compact, declarative construction of GTextNode trees for layouts |
| Metric groups | Builder for the metric names, values and icons attributes of a pin |
| Jumboji table | Emoji shown large ("Jumboji") when a notification body is just that emoji |
| Notification layout | Layout of notifications and reminders (LayoutIdNotification, LayoutIdReminder) |
| Timeline Peek events | Selects the event shown by Timeline Peek |
| Reminders | Pops up reminders at their time |
| Sports layout | Layout of sports pins (LayoutIdSports) |
| Swap layer | Scrolls through a sequence of layouts, swapping to the previous or next at the ends |
| Timeline action menus | Action menus for timeline items and the handling of action results |
| Timeline layouts | Common base of the pin layouts (generic, calendar, weather, sports, alarm, health) |
| Timeline layout animations | Icon transitions between the pin and card views of a timeline item |
| Timeline resources | Resolves timeline resource ids to image resources |
| Weather layout | Layout of weather pins (LayoutIdWeather) |
| Timezone database | Read access to the timezone database stored in resources |
| ►Touch | Touchscreen input: raw touch and gesture events, navigation gating and injection |
| Touch navigation | Enabling and disabling system touch navigation |
| Touch interaction session | Interaction session gating raw touch navigation |
| Vibe patterns | Vibration motor sequencing and strength control |
| ►Vibe scores | Vibration patterns stored as resources, and their selection per alert type |
| Vibe clients | Vibe score selected by the user for each kind of alert |
| Vibe intensity | Default strength of all vibrations |
| Vibe score catalog | Built-in vibe scores, their names and the alerts they can be used for |
| ►Voice | Dictation sessions: microphone capture, Speex encoding and transcription by the phone |
| Transcription | Validation and traversal of serialized transcriptions received from the phone |
| Speex encoder | Speex wideband (16 kHz) encoder used to stream dictation audio |
| Voice endpoint | Pebble Protocol voice control endpoint (11000) |
| Wakeup | Scheduled app launches |
| ►Weather | Weather forecasts sent by the phone |
| Weather app preferences | Location ordering stored in the watch app preferences database |
| Weather types | Weather conditions and their presentation |
| ►Subsystems | Self-contained OS subsystems (subsys/) |
| ►Bluetooth | Bluetooth Low Energy stack interface (pbl/bluetooth) |
| Advertising | LE advertising |
| Battery Service | GATT Battery Service |
| Bonding synchronization | Keep the stack's bondings and CCCD states in sync with persistent storage |
| Comm session scheduling | Pick the task that sends a comm session's pending data |
| Connection event statistics | Controller statistics of connection events in the peripheral role |
| Device Information Service | Values served by the GATT Device Information Service |
| LE connections | LE connection events and disconnection |
| Peer device names | Read the GAP Device Name of connected peers |
| Scanning | LE scanning |
| GATT | GATT client operations, GATT events and the Service Changed characteristic |
| GATT service discovery | Discover the GATT database of a connected peer |
| GATT service description | Compact description of a discovered remote GATT service |
| HCI types | HCI status codes |
| Heart Rate Service | GATT Heart Rate Service, sharing the watch's heart rate with connected devices |
| Local identity | Local device name and addresses |
| Identity address source | Where the watch's identity address comes from |
| ATT MTU | ATT MTU limits |
| Pairability | Whether new LE pairings are accepted |
| Pairing confirmation | Ask the user to confirm a pairing request |
| Pebble identifiers | Pebble-specific Bluetooth identifiers: service and characteristic UUIDs |
| Pebble Pairing Service | GATT service through which the phone app checks the connection and triggers pairing |
| Reversed PPoGATT | Reversed PPoGATT service: the watch hosts the service and the phone is the GATT client |
| Responsiveness | Connection response time requests and connection parameter updates |
| Security Manager types | Keys and pairing information |
| Types | Error codes, addresses, devices and advertising data shared by the Bluetooth API |
| CRC | Checksums stored or exchanged by the firmware |
| Cron | Wall-clock timers, for alarms, calendar events and the like |
| ►Logging | Leveled logging to the serial console (or PULSE) and to flash |
| Binary logging | Wire format of binary log messages |
| Log hashing | Compile-time replacement of log strings by tokens (CONFIG_LOG_HASHED) |
| ►Shell | Debug command shell (CONFIG_SHELL) |
| Shell backends | Interface between the shell core and the transports that carry it |
| Task watchdog | Software watchdog that catches stuck threads and turns them into core dumps |
| ►Libraries | Generic support libraries (lib/) |
| ►Bluetooth utilities | Stack independent helpers for Bluetooth devices, UUIDs and pairing data (lib/btutil) |
| Bluetooth UUIDs | Expand 16-bit and 32-bit Bluetooth UUIDs to 128 bits |
| Pairing information helpers | Compare and inspect struct pbl_bt_sm_pairing_info |
| ►Utilities | Generic helpers shared by the firmware, the bootloader and host tools (lib/util) |
| Library assertions | Assertions of the utility library |
| Base64 | Base64 encoding |
| Bit operations | Bit sets stored in byte or word arrays, rotation and bit reversal |
| Bits and bit fields | Bit, mask and register field macros |
| Linear buffer | Append-only byte buffer with its storage after the header |
| Build ID | GNU build ID note inserted by the linker |
| Byte order | Conversions between the CPU byte order (always little-endian) and fixed byte orders |
| Circular buffer | Single-reader, single-writer byte ring buffer |
| Circular cache | Fixed-size, array-backed cache that evicts its oldest item |
| Generic attributes | Packed lists of id/length/value attributes, as exchanged with the phone |
| Hashing | Non-cryptographic hash |
| Heap | First-fit heap allocator over a caller-provided memory region |
| Hex dump | Xxd-style hex dumps through a line callback |
| Iterator | Generic bidirectional iterator over caller-defined state |
| Keyed circular cache | Fixed-size cache of items looked up by integer key, evicting the oldest item |
| Linked list | Intrusive doubly linked list |
| Listify | Preprocessor repetition |
| Library logging | Logging hooks of the utility library |
| Integer math | Integer math macros and helpers |
| Fixed-point math | Signed fixed-point types and a generic recursive filter |
| Miscellaneous | Small generic macros |
| Ordering | Comparator type used by the sorted containers |
| Pascal strings | Length-prefixed strings and lists of them |
| Random numbers | Random number source used by the library |
| Ratios | Real numbers in [0, 1] stored as scaled integers |
| Shared circular buffer | Circular buffer with one writer and several independent readers |
| Sizes | Array and member size helpers |
| Singly linked list | Intrusive singly linked list |
| Sorting | In-place sorting of small arrays |
| Statistics | Basic statistics over arrays of int32_t |
| Strings | String helpers |
| String lists | Serialized arrays of NUL-separated strings |
| Structure access | Structure access helpers |
| Unit test hooks | Linkage helpers that let unit tests override firmware functions |
| Calendar time | Calendar arithmetic independent of the time zone and the RTC |
| Trigonometry | Fixed-point trigonometry helpers |
| Units | Size, distance and time unit conversion factors |
| UTF-8 | UTF-8 decoder (Bjoern Hoehrmann's DFA) |
| UUID | 128-bit universally unique identifiers |
| ►Shared definitions | Definitions shared with the bootloader and host tooling (pebbleos/) |
| Processor IDs | IDs of the processors of a multi-processor device |
| Core dump records | Register records stored in a core dump |
| Firmware metadata | Build information stored at the end of every firmware image |
| ►UI | |
| Clicks | Dealing with button input |
| Light | Controlling Pebble's backlight |
| ►Foundation | |
| Battery | Functions related to getting the battery status |
| Wall Time | Functions, data structures and other things related to wall clock time |
| Math | |