{"id":22038309,"url":"https://github.com/opencyphal/public_regulated_data_types","last_synced_at":"2025-05-05T22:27:08.529Z","repository":{"id":33546469,"uuid":"37192629","full_name":"OpenCyphal/public_regulated_data_types","owner":"OpenCyphal","description":"Regulated DSDL definitions for Cyphal (standard and third-party)","archived":false,"fork":false,"pushed_at":"2024-03-19T09:52:20.000Z","size":546,"stargazers_count":75,"open_issues_count":12,"forks_count":99,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-04-28T06:32:12.365Z","etag":null,"topics":["aerospace","can","can-bus","communication-protocol","cyphal","databus","drones","onboard-diagnostics","opencyphal","robotics","space","uav","uavcan","vehicle-bus"],"latest_commit_sha":null,"homepage":"https://nunaweb.opencyphal.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenCyphal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"open_collective":"opencyphal","github":"OpenCyphal"}},"created_at":"2015-06-10T11:15:37.000Z","updated_at":"2025-04-28T04:35:29.000Z","dependencies_parsed_at":"2024-04-13T16:04:04.675Z","dependency_job_id":"6f546da7-c5eb-49cd-bf17-035030454ad9","html_url":"https://github.com/OpenCyphal/public_regulated_data_types","commit_stats":{"total_commits":291,"total_committers":9,"mean_commits":"32.333333333333336","dds":0.06872852233676974,"last_synced_commit":"f9f67906cc0ca5d7c1b429924852f6b28f313cbf"},"previous_names":["uavcan/public_regulated_data_types"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Fpublic_regulated_data_types","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Fpublic_regulated_data_types/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Fpublic_regulated_data_types/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Fpublic_regulated_data_types/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenCyphal","download_url":"https://codeload.github.com/OpenCyphal/public_regulated_data_types/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252585416,"owners_count":21772147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aerospace","can","can-bus","communication-protocol","cyphal","databus","drones","onboard-diagnostics","opencyphal","robotics","space","uav","uavcan","vehicle-bus"],"created_at":"2024-11-30T11:05:27.970Z","updated_at":"2025-05-05T22:27:08.507Z","avatar_url":"https://github.com/OpenCyphal.png","language":"Python","readme":"Regulated DSDL definitions\n==========================\n\n[![Main Workflow](https://github.com/OpenCyphal/public_regulated_data_types/actions/workflows/main.yml/badge.svg)](https://github.com/OpenCyphal/public_regulated_data_types/actions/workflows/main.yml)\n[![Forum](https://img.shields.io/discourse/https/forum.opencyphal.org/users.svg)](https://forum.opencyphal.org)\n\nThis repository contains definitions of the regulated Cyphal data types.\n[Cyphal](http://opencyphal.org) is an open technology for real-time intravehicular distributed computing\nand communication based on modern networking standards.\n\nContributors must obey the guidelines defined in this document.\nFeedback and proposals are welcome on the [Cyphal forum](https://forum.opencyphal.org).\n\nA web-based DSDL compiler is available at [nunaweb.opencyphal.org](https://nunaweb.opencyphal.org).\n\n## Namespaces\n\nRegulated data types include the standard data types and domain-specific public definitions.\n\nPer the specification, standard data types are contained in the root namespace `uavcan`,\nand domain-specific public regulated definitions are in the root namespace `reg`.\nThe latter contains nested namespaces named after the domain.\n\nVendors are encouraged to define interfaces to their products or systems using the definitions available\nin this repository instead of defining custom types in order to facilitate reusability and reduce the\nfragmentation of the ecosystem.\n\nIf a fixed regulated port-ID is needed for a new type,\ndevelopers are free to choose any unoccupied identifier from the ranges\ndefined by the specification before submitting the pull request.\n\n## Identifier ranges\n\nRefer to the specification for background information and motivation.\nThe limits specified here are inclusive.\n\nThe upper part of the non-standard ranges may be repurposed for standard types shall that become necessary,\nso new non-standard regulated fixed port-ID allocations should be done near the bottom.\nLikewise, the non-standard ranges may be expanded into the unregulated area if their exhaustion becomes imminent.\n\n### Subjects\n\nFrom    | To        | Purpose\n--------|-----------|-------------------------------------\n0       | 6143      | Unregulated identifiers\n6144    | 7167      | Non-standard regulated identifiers (namespace `reg`)\n7168    | 8191      | Standard regulated identifiers (namespace `uavcan`)\n\n### Services\n\nFrom    | To        | Purpose\n--------|-----------|------------------------------------------------\n0       | 255       | Unregulated identifiers\n256     | 383       | Non-standard regulated identifiers (namespace `reg`)\n384     | 511       | Standard regulated identifiers (namespace `uavcan`)\n\n## Standard data types\n\nThe standard data types are contained in the root namespace `uavcan`.\n\n### Standard fixed identifier allocation\n\n#### Subjects\n\nOrdered by priority from high to low.\n\nNamespace                   | Lower bound (inclusive)\n----------------------------|-------------------------\n`uavcan.time`               | 7168\n`uavcan.node`               | 7509\n`uavcan.pnp`                | 8164\n`uavcan.internet`           | 8174\n`uavcan.diagnostic`         | 8184\n\nThe value 7509 contains the longest possible sequence of alternating bits,\nwhich can be leveraged for automatic bit rate detection (depending on the physical layer).\n\n#### Services\n\nOrdered by priority from high to low.\n\nNamespace                   | Lower bound (inclusive)\n----------------------------|-------------------------\n`uavcan.register`           | 384\n`uavcan.pnp`                | 390\n`uavcan.file`               | 400\n`uavcan.node`               | 430\n`uavcan.internet`           | 500\n`uavcan.time`               | 510\n\n### Generic data type definitions\n\n#### SI\n\nThe namespace `uavcan.si` contains a collection of generic data types describing commonly used\nphysical quantities.\nThe namespace `uavcan.si.unit` contains basic units that can be used as type-safe wrappers over native `float32`\nand other scalar and array types.\nThe namespace `uavcan.si.sample` contains time-stamped versions of these.\n\nAll units follow the [International System of Units](https://en.wikipedia.org/wiki/International_System_of_Units).\nAll units are unscaled basic units of measure -- meters rather than kilometers, kilograms rather than milligrams.\n\nAll coordinate systems are right-handed.\nIn relation to body, the preferred standard is as follows: **X** -- forward, **Y** -- right, **Z** -- down.\nIn case of cameras, the following convention should be preferred: **Z** -- forward, **X** -- right, **Y** -- down.\nFor world frames, the North-East-Down (NED) notation should be preferred.\n\n#### Primitives\n\nA collection of primitive data types is intended as a very generic solution for odd use cases\nand prototyping. They permit the user to broadcast a completely arbitrary value via the bus\nwhile not having to deal with custom data type design and distribution.\n\nSince these types lack any semantic information, their usage in production environments is discouraged.\n\nAnother important application of these types is in the schemaless register protocol defined\nin the namespace `uavcan.register`.\n\n#### Registers\n\nThe register protocol provides a highly generic interface to vendor-specific functionality\nand configuration parameters via named registers.\n\n## Non-standard data types\n\nNon-standard regulated data types are contained in the root namespace `reg`.\nThe root namespace contains nested namespaces, one per application domain, named after the domain.\n\nNote for authors of ***unregulated*** data type definitions:\nthe Cyphal specification explicitly bans namespaces that share the same name but differ in their contents.\nUsers seeking to define unregulated data types shall not put those into the regulated namespace;\ninstead, a new root namespace (named after the vendor) shall be used.\n\n## Guidelines for data type authors\n\nFollow the interface design guidelines provided in [**The Cyphal Guide**](https://opencyphal.org/guide).\n\nEvery data type definition should have a header comment.\nEvery field should be followed by a comment, unless it is certain that it is completely self-explanatory.\nAn exception is made for trivial definitions where the comment would not add useful information.\n\nWhen using void fields for alignment, insert them after the alignee.\nFor example, `bool foo` followed by `void7` is the recommended sequence; the opposite is to be avoided.\nTo understand the motivation, read the DSDL serialization specification.\n\nAttributes shall be separated by exactly one blank line, excepting tightly related attributes and\nvoid fields used for post-alignment (e.g., after bit fields), in which case blank lines are not necessary.\nMore than one blank line is never allowed.\nThere shall be exactly one blank line at the end of the file.\n\nThe lines of text should not be longer than 120 characters.\n\nHere is an example:\n\n    # This is a header comment.\n    # It explains what this data type definition is for and why do we need it.\n\n    void48  # This space is reserved for future use.\n\n    uint8 VALUE_A = 1       # A comment describing the constant.\n    uint8 VALUE_B = 2       # Another one. Constants go before the field they relate to.\n    uint8 value\n    # This is an enumeration.\n    # We don't need blank lines because the items are tightly related.\n\n    float32[\u003c100] aligned_array\n    # This is a new field, mind the blank line above.\n\nRemember, the set of standard data types is an important part of the protocol specification,\nso the quality of the documentation is very important.\n\n## IDE setup\n\nFor editing DSDL definitions, we recommend Visual Studio Code.\nSee `.vscode/` for recommended extensions and workspace settings.\n","funding_links":["https://opencollective.com/opencyphal","https://github.com/sponsors/OpenCyphal"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencyphal%2Fpublic_regulated_data_types","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopencyphal%2Fpublic_regulated_data_types","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencyphal%2Fpublic_regulated_data_types/lists"}