Documentation
STM32WB55 BLE suite
One engineering reference for the nine companion descriptors that observe the STM32WB5MM-DK peer-to-peer BLE demo.
Download the complete suite · Domain catalog
Scope and compatibility
These files target the STM32WB55-based STM32WB5MM-DK demo with its single-link BLE observation ABI 1, matching Debug ELF and current Trace Domains v1 host. They do not acquire private CPU2 state or sniff radio traffic. Generic connection/GATT/journal concepts can be adapted to another producer, but require the same verified observation contract. IPCC fields are STM32WB-specific and the P2P profile uses ST application symbols. No broader target compatibility is claimed.
Each file remains separate to bound its input count. Install the files you need; no runtime file has been merged. The P2P Send action additionally requires command mailbox ABI 1 and a live BKPT Debug host with typed-actions-v1. Desktop and history views are read-only.
Files and sections
Reading the suite
Read availability and Present flags first. The observer retains four services, eight characteristics, 16 payload bytes per characteristic and 16 significant journal records. Polls may span several firmware generations; retained data can outlive a connection. A local stack success or application acknowledgement does not prove phone receipt. Registry overflow and truncation describe observation limits. The bundled ST P2P app registers one service and two characteristics, so GATT pages for slots 2–7 normally show unused entries.
All values are separately sampled firmware observations; the requested poll rates below are not guaranteed achieved rates. Unavailable or stale inputs are not zero. DWARF paths require the exact ELF. Unknown value codes remain numeric. Counters can reset with the application, and raw journal timestamps/sequences can wrap. Inspect retained records after halting only when a consistent multi-field snapshot is needed; a halt also interrupts BLE application handling.
A value is a raw code, count, handle or register word unless its explanation gives a scale; a table has a unit column only where the descriptor declares units. A wrapping counter accounts for rollover at its integer width; a reset can look like a wrap, and several wraps between two samples cannot be recovered. Only BLE overview declares automatic findings; the absence of a finding does not establish healthy operation.
BLE overview
com.bkpt.ble.overview · version 0.1.0 · API 1. Download · GitHub
Connection cards establish whether a live link exists. Command/error rows retain outcomes, while service tables describe only intercepted successful registrations, not CPU2's complete database.
61 inputs, 0 derived channels; requested polling 2 Hz per input.
BLE overview · Cards and tables
BLE overview · Connection
Single-link peripheral observation ABI 1. Connection intervals use 1.25 ms units; supervision timeout uses 10 ms units. Values persist until superseded; disconnected timing/PHY values describe the previous link.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Advertising · ble.advertising | Application advertising state updated after successful start/stop requests and connection events. It is not a measurement of packets transmitted over the air. |
Connected · ble.connected | Single-link connection observation: 1 after a successful connection event, 0 after successful disconnect. Polls can miss an entire short connection. |
Connection handle (65535 = none) · ble.connection_handle | Current connection handle; 65535 means none. Use it to distinguish a live link from retained timing/version fields. |
Successful connections · ble.connects | Successful connection events since boot, a 32-bit count. No wrapping policy is declared for this display. |
Disconnections · ble.disconnects | Successful disconnect events since boot, a 32-bit count. Compare its increase with the retained reason. |
Last disconnect reason · ble.disconnect_reason | Last disconnect reason: 0 none, 8 supervision timeout, 19 remote user terminated, 22 local host terminated; other codes stay numeric. It is retained context and may describe an earlier link, not the current state. |
Connection interval (1.25 ms units) · ble.interval_units | Negotiated interval in 1.25 ms units: multiply by 1.25 for milliseconds. Retained after disconnect. |
Peripheral latency (events) · ble.latency | Negotiated peripheral latency in connection events, not milliseconds. Retained after disconnect. |
Supervision timeout (10 ms units) · ble.timeout_units | Supervision timeout in 10 ms units: multiply by 10 for milliseconds. Retained after disconnect. |
TX PHY · ble.tx_phy | Last observed transmit PHY: 0 unknown, 1 1 Mbit/s, 2 2 Mbit/s, 3 coded. Not measured application throughput. |
RX PHY · ble.rx_phy | Last observed receive PHY using the same codes. Retained after disconnect; not RF-quality data. |
ATT MTU (0 = no link) · ble.att_mtu | Observed ATT MTU in bytes: initialized to 23 on connection, updated from the MTU response, cleared to 0 on disconnect. It is not notification payload length. |
Link encrypted · ble.encrypted | Observed encryption-enabled state, cleared on disconnect. This flag alone does not establish authentication strength or secure pairing. |
BLE overview · Command outcomes and observation health
Firmware-retained application observation. Polls may span updates; halt for a consistent snapshot. Not private CPU2 state or proof of radio delivery.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Observation ABI · ble.abi | Firmware observation contract version. This adapter uses 1; it is distinct from descriptor format compatibility. |
Application uptime · ble.tick_ms | HAL_GetTick milliseconds refreshed by the application poll loop, stored in 32 bits and wrapping with the tick counter. Useful for checking that mirrors are being refreshed. |
CPU2 ready event observed · ble.cpu2_ready | A CPU2 ready event was observed. It does not prove successful BLE stack/application initialization. |
Wireless version (major:minor:patch packed) · ble.stack_version | Wireless stack version packed as major << 16, minor << 8, patch. Decode those bytes; it is not a decimal version number. |
FUS version (major:minor:patch packed) · ble.fus_version | FUS version packed as major << 16, minor << 8, patch. Context for firmware compatibility; it is not a request to update FUS. |
Wireless stack type · ble.stack_type | Reported wireless stack type. This descriptor names value 1 as BLE full stack; other codes remain numeric. |
HCI/ACI requests since boot · ble.commands | Wrapped HCI/ACI requests since boot. Counts requests even when their outcome fails. |
Command awaiting response · ble.command_pending | Set around hci_send_req and cleared on return. A sustained 1 suggests response processing is not completing; a single sample can be normal. |
Last command · ble.last_opcode | Most recent HCI/ACI opcode, assembled from OGF and OCF. Match with last_status; fields may span different requests. Shown by name for 209 codes, listed in the JSON download. |
Last command status · ble.last_status | Most recent command outcome: stack status byte, 256 transport failure, or 257 no response status. Zero means local command success, not remote receipt. Values. |
Non-success command outcomes · ble.command_errors | Count of nonzero command outcomes, including transport/no-response cases. Inspect retained error fields before retrying. |
Last failed command (retained) · ble.last_error_opcode | Most recent failed command, retained even after later success. It is not necessarily the currently pending command. Shown by name for 209 codes, listed in the JSON download. |
Last error status (retained) · ble.last_error_status | Status of that retained failure. It can remain nonzero throughout subsequent healthy operation. Values. |
Asynchronous events since boot · ble.events | Asynchronous application events observed since boot, including radio activity callbacks omitted from the journal. Not a packet count. |
Rejected malformed application events · ble.malformed_events | Attribute-modified events rejected by the adapter’s length checks. It is not a comprehensive radio/protocol error counter. |
Observations omitted: registry full · ble.registry_overflows | Successful registrations omitted because the four-service/eight-characteristic observer registry was full. This is missing observation, not necessarily failed stack registration. |
Payload observations longer than 16 bytes · ble.value_truncations | Payload observations longer than the 16-byte retention limit. The application/stack may have received the full value. |
Registered services observed · ble.services_count | Successfully registered services retained by the adapter, at most four. Internal GAP/GATT services are not enumerated. |
Registered characteristics observed · ble.characteristics_count | Successfully registered characteristics retained by the adapter, at most eight. Other APIs need observer hooks to be represented. |
Journal slots overwritten since boot · ble.journal_overwritten | Significant records written beyond the first 16, replacing older slots. This is expected rolling-history eviction, not proof of lost radio traffic. |
BLE overview · Service slots 0–3
Present=0 means unused. These are successful application add-service calls, not an enumeration of CPU2's entire database; GAP/GATT built-ins are not intercepted. UUID words 3,2,1,0 form the 128-bit UUID in hexadecimal; type 1 uses word 0's low 16 bits. All 4 slots have these fields; N is the slot number, 0 to 3.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Present · ble.services.N.present | 1 marks a populated service slot; 0 means unused. Ignore the rest of an unused slot. |
Service handle · ble.services.N.handle | Handle returned by a successful application add-service call. It identifies the local service, not a remote device. |
UUID type (1=16 bit, 2=128 bit) · ble.services.N.uuid_type | UUID type: 1 is 16-bit, 2 is 128-bit. Type determines how many words are meaningful. |
UUID / UUID word 0 (least-significant first) · ble.services.N.uuid.0 | One raw UUID word. For 128-bit UUIDs concatenate hexadecimal words 3,2,1,0, each padded to eight digits; for type 1 use word 0’s low 16 bits. |
UUID / UUID word 1 (least-significant first) · ble.services.N.uuid.1 | Same as the row above. |
UUID / UUID word 2 (least-significant first) · ble.services.N.uuid.2 | Same as the row above. |
UUID / UUID word 3 (least-significant first) · ble.services.N.uuid.3 | Same as the row above. |
BLE overview · Sampled inputs
Every input is read from firmware at the member path its channel name spells out: ble.* from ble_observer (u32). For example, ble.services.N.uuid.0 reads ble_observer.services[N].uuid[0].
wrapping counters: ble.commands, ble.command_errors, ble.events, ble.malformed_events, ble.registry_overflows, ble.value_truncations.
BLE overview · Findings
BLE overview · A command returned non-success
warning · command-errors. ble.command_errors increases between valid samples.
The retained command error count increased. Inspect the retained opcode/status and journal; an accepted GATT update is not remote delivery.
Evidence: ble.command_errors.
BLE overview · Observation registry capacity exceeded
warning · registry-full. ble.registry_overflows increases between valid samples.
The firmware omitted an object because its fixed registry is full. Increase adapter capacity and generate matching bounded descriptor pages.
Evidence: ble.registry_overflows.
BLE overview · Command response still pending
warning · command-pending. ble.command_pending ≥ 1 for 2000 ms of observations.
A command has remained pending across at least two seconds of running samples. Inspect shared transport flags and application execution. Halting pauses observations.
Evidence: ble.command_pending.
BLE GATT slots 0–7
4 files that differ only in the slots they cover, each version 0.1.0 · API 1.
| JSON DOWNLOAD | SLOTS | DESCRIPTOR | SOURCE |
|---|---|---|---|
| ble-gatt-1.vadomain | 0–1 | com.bkpt.ble.gatt-1 | GitHub |
| ble-gatt-2.vadomain | 2–3 | com.bkpt.ble.gatt-2 | GitHub |
| ble-gatt-3.vadomain | 4–5 | com.bkpt.ble.gatt-3 | GitHub |
| ble-gatt-4.vadomain | 6–7 | com.bkpt.ble.gatt-4 | GitHub |
Each GATT file covers two physical characteristic slots. Read Present and Value source before interpreting payload words. Slots 0–1 serve the supplied P2P application; later slots require additional registrations.
Each file: 48 inputs, 10 derived channels; requested polling 1 Hz per input.
BLE GATT slots 0–7 · Cards and tables
BLE GATT slots 0–7 · Characteristic slots 0–7
Present=0 means unused. Handles, UUIDs and properties come from successful registration. Value origin=0 means no observed value. Payload is the retained 16-byte prefix in four little-endian words. Values and counters are application observations; update success does not prove client receipt. CCCD is for the single current connection. All 8 slots have these fields; N is the slot number, 0 to 7.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Present · ble.characteristics.N.present | 1 means a successfully registered characteristic occupies the slot; 0 means unused. Do not interpret other fields of an unused slot. |
Parent service handle · ble.characteristics.N.service | Parent local service handle; match it to the service registry in Overview. |
Identity / Characteristic declaration handle · ble.characteristics.N.declaration | Characteristic declaration handle returned by the registration API. |
Identity / Value handle · ble.characteristics.N.value_handle | Local value handle, declaration + 1 in this adapter. Remote writes are matched against this handle. |
Identity / CCCD handle (0 = none) · ble.characteristics.N.cccd_handle | Local client-configuration handle, declaration + 2 for notify/indicate characteristics in this adapter; 0 means none. This layout is adapter-specific. |
Identity / UUID type · ble.characteristics.N.uuid_type | 1 is a 16-bit UUID, 2 a 128-bit UUID. Use the corresponding UUID words. |
Properties / Property bitmask · ble.characteristics.N.properties | Raw characteristic property bitmask from successful registration. The derived booleans decode only the named bits, not every possible property. |
Value / Maximum value bytes · ble.characteristics.N.max_length | Maximum bytes declared at registration. It is not the length of the retained payload. |
Value / Last observed payload bytes · ble.characteristics.N.length | Length of the latest observed update/write fragment before truncation. With offset-origin 3 it is fragment length, not total characteristic length. |
Value / Retained prefix bytes · ble.characteristics.N.captured | Bytes actually retained in the four payload words, at most 16. Ignore zero padding beyond this count. |
Value / Value source · ble.characteristics.N.value_origin | 0 unobserved; 1 accepted local update; 2 remote write callback; 3 nonzero-offset fragment, not a complete value. A displayed zero word is not evidence of an observed zero value when origin is 0. |
Subscription / Client subscription · ble.characteristics.N.cccd | Subscription for the single current link: 0 disabled, 1 notifications, 2 indications, 3 both. Cleared on disconnect. |
Activity / Remote value writes observed · ble.characteristics.N.writes | Remote value-write callbacks observed. This does not include CCCD writes, which update subscription state separately. |
Activity / Local update requests · ble.characteristics.N.updates | Local update API calls for this registered characteristic, including failed calls. |
Activity / Local updates accepted · ble.characteristics.N.update_ok | Local update calls accepted by the stack. Compare with updates/last_status; acceptance does not prove radio delivery or client consumption. |
Activity / Last local update status · ble.characteristics.N.last_status | Most recent local update result. It describes update calls, not the success of every remote write or notification. Values. |
Identity / UUID / UUID word 0 (least-significant first) · ble.characteristics.N.uuid.0 | Raw UUID word: concatenate hexadecimal words 3,2,1,0 for 128 bits; type 1 uses low 16 bits of word 0. |
Identity / UUID / UUID word 1 (least-significant first) · ble.characteristics.N.uuid.1 | Same as the row above. |
Identity / UUID / UUID word 2 (least-significant first) · ble.characteristics.N.uuid.2 | Same as the row above. |
Identity / UUID / UUID word 3 (least-significant first) · ble.characteristics.N.uuid.3 | Same as the row above. |
Value / Payload / Payload bytes 0-3 (little-endian word) · ble.characteristics.N.value.0 | Four payload bytes packed little-endian in one 32-bit word. Reconstruct bytes least-significant first and honor captured length/origin; the bytes have no generic physical unit. |
Value / Payload / Payload bytes 4-7 (little-endian word) · ble.characteristics.N.value.1 | Same as the row above. |
Value / Payload / Payload bytes 8-11 (little-endian word) · ble.characteristics.N.value.2 | Same as the row above. |
Value / Payload / Payload bytes 12-15 (little-endian word) · ble.characteristics.N.value.3 | Same as the row above. |
Properties / Readable · ble.characteristics.N.property.1 | One decoded property bit: bit 1 readable, 2 write without response, 3 write with response, 4 notifiable, 5 indicatable. No/Yes describes capability, not current subscription or observed traffic. |
Properties / Write without response · ble.characteristics.N.property.2 | Same as the row above. |
Properties / Write with response · ble.characteristics.N.property.3 | Same as the row above. |
Properties / Notifiable · ble.characteristics.N.property.4 | Same as the row above. |
Properties / Indicatable · ble.characteristics.N.property.5 | Same as the row above. |
BLE GATT slots 0–7 · Sampled inputs
Every input is read from firmware at the member path its channel name spells out: ble.* from ble_observer (u32). For example, ble.characteristics.N.uuid.0 reads ble_observer.characteristics[N].uuid[0].
wrapping counters: ble.characteristics.N.writes, ble.characteristics.N.updates, ble.characteristics.N.update_ok.
Derived from ble.characteristics.N.properties: ble.characteristics.N.property.1 is bit 1, ble.characteristics.N.property.2 is bit 2, ble.characteristics.N.property.3 is bit 3, ble.characteristics.N.property.4 is bit 4, ble.characteristics.N.property.5 is bit 5.
BLE ST peer-to-peer profile
com.bkpt.ble.profile.st-p2p · version 0.2.0 · API 1. Download · GitHub
The P2P service UUID is 0000fe40-cc7a-482a-984a-7f2ed5b3e58f, LED FE41 and button FE42 in their full ST UUIDs. Values contain device selection (1 here) then state. Little-endian word 257 means bytes 01 01, word 1 means 01 00. The LED characteristic does not notify, so a client may need a fresh read. Missing profile symbols affect this profile without making generic GATT observations valid or invalid.
8 inputs, 0 derived channels; requested polling 2 Hz per input.
BLE ST peer-to-peer profile · Cards and tables
BLE ST peer-to-peer profile · LED and button
Optional profile decoder for ST's P2P application context. Missing P2P symbols make this profile unavailable while the generic GATT domains still work. LED is applied application state; button is local state even when notifications are disabled.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Button notifications enabled · p2p.Notification_Status | Application flag for button notifications enabled by the client. A local button toggle can still occur with notifications disabled. |
Blue LED state · p2p.LedControl.Led1 | Applied application LED state: 0 Off, 1 On. The Send action routes through the application’s real GATT/LED handler. Explicit action: set_led; see Actions below. |
Button toggle value · p2p.ButtonControl.ButtonStatus | Local button toggle value, alternating 0/1. It is not a count and does not prove a phone received a notification. |
Button actions since boot · ble.button_presses | Button actions handled since boot, including the application’s supported simulated button path. It is not exclusively a physical switch count. |
Button actions without subscription · ble.notifications_skipped | Button actions handled without a subscription. This is deliberate suppression, not a radio-delivery failure count. |
BLE ST peer-to-peer profile · Application commands
Send calls the application's LED handler and updates the readable P2P LED characteristic. An acknowledgement is a local application result; it does not prove phone receipt.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Published request · command.request_seq | Published mailbox request sequence. A draft choice does not advance it; host publication is the command commit point. |
Completed request · command.response_seq | Last completed mailbox request sequence. Compare with request sequence and fresh application result; the host also matches a nonce internally. |
Application result · command.status | Application result for the completed request: 0 accepted; 65537 malformed request; 65538 application not ready; 65539 unsupported operation/value. Other values can be returned BLE stack statuses; this card leaves them numeric. |
BLE ST peer-to-peer profile · Sampled inputs
Every input is read from firmware at the member path its channel name spells out: p2p.* from P2P_Server_App_Context (u8), ble.* from ble_observer (u32), command.* from domain_command (u32). For example, p2p.LedControl.Led1 reads P2P_Server_App_Context.LedControl.Led1.
wrapping counters: ble.button_presses, ble.notifications_skipped.
BLE ST peer-to-peer profile · Actions
The Blue LED draft offers Off (0) or On (1), encoded as one u8. Only explicit Send publishes operation 1 to domain_command; selecting a draft does not write. Firmware validates the mailbox and operation, updates the actual GATT value and applies the LED state, then publishes its result. The host waits up to 3000 ms for matching completion. Rejection/unknown completion is not success, and the host does not automatically retry. Acknowledgement proves local handling, not physical LED verification or phone receipt.
BLE ST peer-to-peer profile · Blue LED
set_led; completion: application.
{
"input": {
"ty": "u8",
"choices": [
{
"value": "0",
"label": "Off"
},
{
"value": "1",
"label": "On"
}
]
},
"target": {
"kind": "mailbox",
"symbol": "domain_command",
"operation": 1,
"timeout_ms": 3000
}
}
BLE STM32WB shared transport
com.bkpt.ble.stm32wb-transport · version 0.1.0 · API 1. Download · GitHub
Three application-copied IPCC registers help correlate a pending command with inter-core transport flags. They measure neither queue depth nor RF activity; the descriptor provides raw words without per-bit decoding.
3 inputs, 0 derived channels; requested polling 2 Hz per input.
BLE STM32WB shared transport · Cards and tables
BLE STM32WB shared transport · IPCC status samples
Application-copied read-only IPCC status and mask registers. Transient flags between samples may be missed; these are not queue lengths. CPU2 private radio/GATT state is inaccessible.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
M4 to M0+ channel flags · ble.ipcc_c1_status | Firmware copy of IPCC C1TOC2SR (M4 to M0+ channel flags). Transient flags can disappear between updates; this is not queue depth. |
M0+ to M4 channel flags · ble.ipcc_c2_status | Firmware copy of IPCC C2TOC1SR (M0+ to M4 channel flags). Use as transport context, not a packet/RF metric. |
M4 interrupt mask · ble.ipcc_c1_mask | Firmware copy of IPCC C1MR, the M4 interrupt mask. It is a raw mask; the descriptor declares no per-bit decoding or fault threshold. |
BLE STM32WB shared transport · Sampled inputs
Every input is read from firmware at the member path its channel name spells out: ble.* from ble_observer (u32). For example, ble.ipcc_c1_status reads ble_observer.ipcc_c1_status.
BLE activity slots 0–15
2 files that differ only in the slots they cover, each version 0.1.0 · API 1.
| JSON DOWNLOAD | SLOTS | DESCRIPTOR | SOURCE |
|---|---|---|---|
| ble-journal-1.vadomain | 0–7 | com.bkpt.ble.journal-1 | GitHub |
| ble-journal-2.vadomain | 8–15 | com.bkpt.ble.journal-2 | GitHub |
Each journal file exposes eight physical slots of the shared 16-record journal. The journal is a retained window, not a complete event log. Order by sequence; unused/in-progress sequence zero is not an event.
Each file: 48 inputs, 0 derived channels; requested polling 1 Hz per input.
BLE activity slots 0–15 · Cards and tables
BLE activity slots 0–15 · Journal slots 0–15
Physical ring slots, not sorted rows. Sort mentally by sequence; sequence 0 is unused/in-progress. Last 16 significant observations are retained. Radio-activity callbacks only increment the event counter. Halt for a consistent journal; polling does not capture every entry. All 16 slots have these fields; N is the slot number, 0 to 15.
| CARD OR ROW | READING AND SIGNIFICANCE |
|---|---|
Sequence · ble.journal.N.sequence | Publication sequence of this physical ring slot. Zero means unused or currently being written. Order nonzero records by sequence; slots are not chronological rows. |
Firmware time (ms) · ble.journal.N.tick_ms | HAL_GetTick timestamp in milliseconds recorded when the event is retained. It wraps at 32 bits and is not host wall-clock time. |
Kind · ble.journal.N.kind | 0 unused, 1 command outcome, 2 asynchronous event. It selects how code/status should be interpreted. |
Opcode / encoded event code · ble.journal.N.code | For commands, (OGF << 10) | OCF. For ordinary events, HCI event code; LE meta events use (event << 8) | subevent; vendor events use 0xFF0000 | 16-bit subevent. This field stays numeric in this descriptor. |
Command status (events use 0) · ble.journal.N.status | Command outcome status; asynchronous records use 0 as a placeholder. Event status 0 does not prove the event represents a successful operation. Values. |
Connection handle · ble.journal.N.handle | Connection handle retained at recording time, or 65535 for none. A disconnect record can therefore show none after cleanup. |
BLE activity slots 0–15 · Sampled inputs
Every input is read from firmware at the member path its channel name spells out: ble.* from ble_observer (u32). For example, ble.journal.N.sequence reads ble_observer.journal[N].sequence.
Value lookups
Shared by the linked fields throughout the suite. Unlisted codes remain numeric and must not be treated as success.
Last command status values
| RAW VALUE | DECODED LABEL |
|---|---|
0 | Success |
89 | Dev in blacklist |
90 | Csrk not found |
91 | Irk not found |
92 | Dev not found |
94 | Dev not bonded |
96 | Invalid handle |
97 | Out of handle |
98 | Invalid operation |
100 | Insufficient resources |
101 | Sec permission error |
112 | Address not resolved |
130 | No valid slot |
131 | Scan window short |
132 | New interval failed |
133 | Interval too large |
134 | Length failed |
145 | Failed |
146 | Invalid params |
147 | Busy |
149 | Pending |
151 | Error |
152 | Out of memory |
255 | Timeout |
256 | Transport failure |
257 | No response status |
Source verification and contributions
Verified against observation ABI 1 in ble_observer.h, API wrappers/event decoding/poll copies in ble_observer.c, version/advertising producers in app_entry.c and app_ble.c, the pinned ST BLE status/opcode headers, and descriptor-driven card/enum rendering. Action semantics were checked in domain_command.c and P2PS_APP_Command.
Contribute a correction or an adapted domain. The nine individual downloads are exact copies of the canonical definitions; the ZIP contains those same files.