Descriptor Examples
This page lists YAML descriptors available in the repository.
These descriptors are example and reference configurations. They show how to define IO, programs, and protocols for Dawn devices, but they do not all have the same maturity level or resource requirements.
os_required metadata
The metadata.os_required field is informational metadata. Dawn does not use
it at build time or runtime; it tells users which OS-visible resources a
descriptor expects to exist.
Use the following naming rule when filling the field:
use the concrete device-node path for OS-exposed instances (for example
/dev/can0,/dev/adc0,/dev/pwm0,/dev/gpio0,/dev/leds0,/dev/buttons0,/dev/urandom)use the explicit configured path when the descriptor hardcodes a transport endpoint (for example
/dev/ttyS0,/tmp/ttySIM0)use the concrete sensor device path for sensor-backed IO (for example
/dev/uorb/sensor_accel0,/dev/uorb/sensor_humi0)use named subsystem resources for protocol prerequisites without a concrete device path in the descriptor (for example
ethorble)
This keeps os_required aligned with the actual OS-visible paths used by
Dawn on NuttX.
Feature index
Feature |
Descriptors |
|---|---|
Blinky |
Blinky Buttons, Blinky CAN, Blinky NimBLE, Blinky Modbus RTU, Blinky Shell |
CAN |
Blinky CAN, CAN Button/LED, CAN Sensor Producer, CAN Dummy IO, Programs Over CAN, Serial to CAN Gateway |
Dynamic descriptors |
|
Gateway |
|
IPC |
|
Modbus |
Blinky Modbus RTU Demo, Feature Modbus Slot0, Feature Modbus Slot1, NTFC Modbus RTU Dummy Map, Modbus TCP Dummy Map |
NimBLE / BLE |
Blinky NimBLE, NimBLE AIOS, NimBLE Environmental Sensor, NimBLE GPIO and Analog, NimBLE OTS, NimBLE Sensor Producer, NTFC NimBLE All-Services, NTFC NimBLE Buffer, NTFC NimBLE Custom Service, Shell and NimBLE Environmental |
NXScope |
|
Serial |
Dynamic Descriptor Slot0, Dynamic Descriptor Slot1, Serial Core, Serial LEDs and Buttons, Serial to CAN Gateway |
Shell |
Blinky Shell, Shell Core, Shell GPIO and Config, Shell and NimBLE Environmental |
Tests |
|
UDP |
Catalog
Examples
descriptors/examples/blinky_can_demo.yamlBlinky CAN Demo
Sequencer-driven LED output with CAN control. Start/stop, reset, start-index configuration, individual dwell values, current LED state, and segmented access to the full sequencer state table are exposed through CAN frames.
The simple write mappings use standard CAN IDs
0x150through0x154. The host helper updates the blink period by writingcfg_dwell_offon0x153andcfg_dwell_onon0x154.Required resources:
/dev/can0,/dev/leds0Host helper:
tools/examples/can_blinky_cli.py
descriptors/examples/blinky_nimble_demo.yamlBlinky NimBLE Demo
Sequencer-driven LED output with BLE control via NimBLE. Start/stop, full state table, and individual dwell times are exposed over a custom BLE service.
Required resources:
/dev/gpio4,bleHost helper:
tools/examples/nimble_blinky_cli.py
descriptors/examples/blinky_shell_demo.yamlBlinky Shell Demo
Provides a shell-controlled runtime example where a sequencer drives an LED output. The shell exposes start/stop control and runtime configuration via ConfigIO objects (start index and state table).
Required resources:
/dev/leds0
descriptors/examples/blinky_modbus_rtu_demo.yamlBlinky Modbus RTU Demo
Provides a Modbus-RTU controlled blinky demo where a sequencer drives an LED output. Start/stop and runtime parameters are exposed as Modbus registers, including writable dwell values and start-index control.
Required resources:
/dev/leds0,/dev/ttyS1Host helper:
tools/examples/modbus_blinky_cli.py
descriptors/examples/can_sensor_producer.yamlCAN Sensor Producer Demo
Receives environmental values over CAN and republishes them as NuttX user sensor topics. The descriptor creates temperature, humidity, barometer, and light topics using
sensor_producerIOs. Another NuttX application can read those topics through/dev/uorbwhile Dawn only provides the CAN write path.CAN write mappings start at
0x150:can_temp_sensor_pubis one float,can_humi_sensor_pubis one float,can_baro_sensor_pubis two floats (pressure, temperature), andcan_light_sensor_pubis two floats (light, infrared).Required resources:
/dev/can0,/dev/usensor,/dev/uorb/sensor_temp10,/dev/uorb/sensor_humi11,/dev/uorb/sensor_baro12,/dev/uorb/sensor_light13
descriptors/examples/dynamic_desc_slot0.yamlDynamic Descriptor Slot0 Bootstrap
Bootstrap descriptor exposing descriptor slots and selector over serial for runtime descriptor upload and switching.
Required resources:
/dev/ttyS1
descriptors/examples/dynamic_desc_slot1.yamlDynamic Descriptor Slot1 Runtime
Runtime descriptor for switch verification. Uses a different dummy initial value than slot0 to prove descriptor activation.
Required resources:
/dev/ttyS1
descriptors/examples/feature_modbus_slot0.yamlFeature Demo - Modbus RTU Bootstrap (slot 0)
Board-agnostic Modbus RTU bootstrap descriptor. Exposes ADC and PWM plus the descriptor slots and selector so a host can upload and activate the full feature descriptor at runtime.
Required resources:
/dev/ttyS1,/dev/adc0,/dev/pwm0
descriptors/examples/feature_modbus_slot1.yamlFeature Demo - Modbus RTU Full Map (slot 1)
Feature demo over Modbus RTU. Exercises ADC, PWM, one LED, one button, a sequencer-driven blinky program, runtime config, control and trigger bridges, descriptor swap, capabilities, and uname/sysinfo introspection.
Required resources:
/dev/ttyS1,/dev/userleds,/dev/buttons0
descriptors/examples/gateway_serial_can.yamlSerial to CAN Gateway Demo
Provides a gateway that forwards virtual IO traffic between serial and CAN, including both scalar and segmented 64-bit data paths.
Required resources:
/dev/ttyS1,/dev/can0
descriptors/examples/ipc_demo.yamlLocal IPC Demo
Exposes two dummy IO values through the local FIFO-based IPC transport for same-device control and monitoring.
Required resources:
/tmp
descriptors/examples/nimble_aios_demo.yamlNimBLE Automation IO Service (AIOS) Demo
Focused AIOS demo. Exposes four GPIO-backed Digital Inputs, four GPIO-backed Digital Outputs, one dummy Analog Input, and five Analog Outputs backed by a four-channel
/dev/pwm0driver. Four AIOS Analog Outputs write scalar virtual IOs;vecpackcombines those values into one four-element PWM duty vector. The fifth Analog Output writes aconfigIO bound to the PWM frequency. PWM is exposed as Analog Output because duty cycle and frequency are numeric values rather than boolean Digital states.Required resources:
/dev/gpio0,/dev/gpio1,/dev/gpio2,/dev/gpio3,/dev/gpio4,/dev/gpio5,/dev/gpio6,/dev/gpio7,/dev/pwm0,ble
descriptors/examples/nimble_env_sensor_demo.yamlNimBLE Environmental Sensor Demo
Exposes environmental sensor values and one ADC input over NimBLE standard services, with dummy values used for additional demo data.
Required resources:
/dev/adc0,/dev/uorb/sensor_humi0,/dev/uorb/sensor_temp0,/dev/uorb/sensor_baro0,/dev/uorb/sensor_gas0,ble
descriptors/examples/nimble_gpio_analog_demo.yamlNimBLE GPIO and Analog Demo
Exposes digital inputs, digital outputs, and simple analog values over NimBLE services using a mixed GPIO and dummy IO layout.
Required resources:
/dev/gpio0,/dev/gpio1,/dev/gpio2,/dev/gpio3,/dev/gpio4,/dev/gpio5,/dev/gpio6,/dev/gpio7,ble
descriptors/examples/nimble_ots_demo.yamlNimBLE Object Transfer Service Demo
Exposes two pre-populated tmpfs files over BLE using the standard Bluetooth SIG Object Transfer Service. Bulk data is carried over an L2CAP CoC channel; metadata and OACP/OLCP control points are over GATT.
Required resources:
ble,/tmp
descriptors/examples/nimble_sensor_producer.yamlNimBLE Sensor Producer Demo
Receives environmental values over a descriptor-defined NimBLE custom service and republishes them as NuttX user sensor topics. It uses the same topic layout as
can_sensor_producer.yaml: temperature on instance 10, humidity on instance 11, barometer on instance 12, and light on instance 13.The device advertises as
dawn-sensor-prod. Host-side writes are handled bytools/examples/nimble_sensor_producer_cli.py.Required resources:
ble,/dev/usensor,/dev/uorb/sensor_temp10,/dev/uorb/sensor_humi11,/dev/uorb/sensor_baro12,/dev/uorb/sensor_light13
descriptors/examples/nxscope_serial.yamlNXScope Serial Demo
Streams accelerometer, magnetometer, gyroscope, and a writable dummy-notify signal over an NXScope serial endpoint.
Required resources:
/dev/ttyS1,/dev/uorb/sensor_accel0,/dev/uorb/sensor_mag0,/dev/uorb/sensor_gyro0
descriptors/examples/qemu_modbus_tcp_dummy_map.yamlModbus TCP Dummy Map
Provides a Modbus TCP register map backed by a large dummy IO set covering coil, packed coil, holding, and input register access.
Required resources:
eth
descriptors/examples/qemu_nxscope_udp.yamlNXScope UDP Demo
Streams a dummy-notify signal over NXScope UDP and exposes writable channels for NXScope user extension set requests.
Required resources:
eth,/tmp
descriptors/examples/serial_core_demo.yamlSerial Core Demo
Provides the core demo IO set over both shell and serial protocols, including sensors, ADC, DAC, GPIO, PWM, config objects, and descriptor inspection.
Required resources:
/dev/ttyS1,/dev/uorb/sensor_accel0,/dev/uorb/sensor_mag0,/dev/uorb/sensor_gyro0,/dev/gpio0,/dev/gpio1,/dev/gpio2,/dev/gpio3,/dev/gpio8,/dev/gpio9,/dev/gpio10,/dev/gpio4,/dev/gpio5,/dev/gpio6,/dev/gpio7,/dev/adc0,/dev/adc1,/dev/adc2,/dev/dac0,/dev/dac1,/dev/dac2,/dev/pwm0,/dev/pwm1,/dev/pwm2,/dev/qe0,/dev/qe1,/dev/urandom
descriptors/examples/shell_core_demo.yamlShell Core Demo
Provides a broad shell-accessible demo of mixed Dawn IO, including sensors, ADC, DAC, GPIO, PWM, config objects, descriptor inspection, and processing outputs.
Required resources:
/dev/uorb/sensor_accel0,/dev/uorb/sensor_mag0,/dev/uorb/sensor_gyro0,/dev/gpio0,/dev/gpio1,/dev/gpio2,/dev/gpio3,/dev/gpio8,/dev/gpio9,/dev/gpio10,/dev/gpio4,/dev/gpio5,/dev/gpio6,/dev/gpio7,/dev/adc0,/dev/adc1,/dev/adc2,/dev/dac0,/dev/dac1,/dev/dac2,/dev/pwm0,/dev/pwm1,/dev/pwm2,/dev/qe0,/dev/qe1,/dev/urandom
descriptors/examples/shell_gpio_config_demo.yamlShell GPIO and Config Demo
Provides shell access to demo IO, GPIO inputs and outputs, ADC, PWM, config-backed values, system information, and reset control.
Required resources:
/dev/adc0,/dev/pwm0,/dev/gpio0,/dev/gpio1,/dev/gpio2,/dev/gpio3,/dev/gpio4,/dev/gpio5,/dev/gpio6,/dev/gpio7
descriptors/examples/shell_nimble_env_demo.yamlShell and NimBLE Environmental Demo
Provides shell access and NimBLE exposure for an environmental sensor oriented demo with reset and power control objects.
Required resources:
/dev/uorb/sensor_humi0,/dev/uorb/sensor_baro0,ble
descriptors/examples/udp_basic.yamlBasic UDP Demo
Provides basic UDP access to two dummy IO values plus one notify-capable IO for simple network protocol demonstrations.
Required resources:
eth,/tmp
NTFC
descriptors/ntfc/ntfc_can_dummy.yamlCAN Dummy IO Demo
Provides CAN read, write, indexed, and segmented access to demo IO objects, with shell inspection available on the same device.
Required resources:
/dev/can0,/dev/urandom
descriptors/ntfc/ntfc_modbus_rtu_dummy_map.yamlNTFC Modbus RTU Dummy Map
Provides an NTFC Modbus RTU register map backed by a large dummy IO set covering coil, packed coil, holding, input register, seekable, and file access.
Required resources:
/dev/ttyS1,/tmp
descriptors/ntfc/ntfc_nimble_all.yamlNTFC NimBLE All-Services Target
Descriptor used by
ntfc/tests/nimble_ntfc. It advertises asntfc-nimbland enables the supported NimBLE service set used by the NTFC BLE suite: DIS, BAS, TPS, AIOS, ESS, IMDS, and OTS.Most measurement values are backed by
dummy_notifyIOs with short update intervals so the host can test reads and notifications without requiring real sensors. GPIO inputs and outputs are mapped through GPIO devices. Configuration characteristics useconfigIO objects that point back to source IO configuration fields, so writes through GATT update the descriptor-backed runtime settings. The OTS section exposes object-transfer state for the BLE object transfer tests.Required resources:
/dev/gpio0,/dev/gpio1,/dev/gpio2,/dev/gpio3,/dev/gpio4,/dev/gpio5,/dev/gpio6,/dev/gpio7,ble
descriptors/ntfc/ntfc_nimble_custom.yamlNTFC NimBLE Custom Service Target
Minimal descriptor used by
ntfc/tests/nimble_ntfc_customto validate descriptor-declared custom GATT services. It advertises asntfc-nimxand creates one vendor service12345678-1234-5678-1234-56789abcdef0with one read/write characteristic bound to auint32dummy IO initialized to1234.The test reads the characteristic, writes a new value through BLE, then reads it back. This verifies that the descriptor custom-service schema, NimBLE service registration, GATT read callback, and GATT write callback all use the same bound IO object.
Required resources:
ble
descriptors/ntfc/ntfc_nimble_buffer.yamlNTFC NimBLE Buffer Target
Descriptor used by
ntfc/tests/nimble_ntfc_bufferto exercise bulk buffer reads over a descriptor-defined NimBLE custom service. It advertises asntfc-nimband exposes one vendor service12345678-1234-5678-1234-56789abcdf00with four characteristics:...df01readsbuf_out_u32, the selected output window....df02reads and writesbuf_sel_u32, the history selector offset....df03readsbuf_stat_u32, the buffer status words....df04writesbuf_trigger, the start/stop capture trigger.
Data flow:
buf_src_ts_u32 -> buf_buffer1 -> buf_out_u32 | ^ | | +-> buf_stat_u32 | +<- buf_sel_u32 +<- buf_trigger
buf_src_ts_u32is a periodictimestampIO.buf_buffer1is aCProgBufferwith depth1024and one-shot capture enabled. The buffer stores incoming timestamp samples in RAM.buf_sel_u32selects the history offset where0means newest sample; writes to the selector update the output window.buf_stat_u32reports count, depth, head, overflow, snapshot sequence, runtime flags, selected offset, and a reserved word.buf_triggermaps BLE writes to buffer trigger commands: trigger1 restarts capture and trigger2 stops capture.buf_buffer1is configured withchunk_size: 32. Because the source timestamp is oneuint32value, the buffer initializesbuf_out_u32as a 32-element virtual output and each GATT read returns 32 samples, or 128 bytes. The test waits until the 1024-sample buffer is full, stops capture to freeze capture, walks selector offsets0, 32, 64, ..., and reads all pages through the custom characteristic.Required resources:
ble
descriptors/ntfc/ntfc_programs_can.yamlPrograms Over CAN Demo
Provides CAN access to edge-processing programs, including sampled data, control endpoints, push notifications, and segmented transfers.
Required resources:
/dev/can0,/dev/urandom
Tests
descriptors/tests/empty_placeholder.yamlEmpty Placeholder Descriptor
Provides an empty descriptor used as a placeholder for builds that do not require any configured IO, programs, or protocols.
Required resources: none