Skip to content

Commit

Permalink
branding: UAVCAN -> OpenCyphal (#194)
Browse files Browse the repository at this point in the history
Release v3.0

Co-authored-by: Kalyan Sriram <kalyan@coderkalyan.com>
  • Loading branch information
pavel-kirienko and coderkalyan authored Apr 12, 2022
1 parent d128f4e commit 75bb34c
Show file tree
Hide file tree
Showing 22 changed files with 99 additions and 93 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ jobs:
# Don't run sonar-scanner on builds originating from forks due to secrets not being available
run: >
[ -z "$SONAR_TOKEN" ] || sonar-scanner
--define sonar.organization=uavcan
--define sonar.organization=opencyphal
--define sonar.projectName=libcanard
--define sonar.projectKey=libcanard
--define sonar.sources=libcanard
Expand Down
2 changes: 2 additions & 0 deletions .idea/dictionaries/pavel.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
The library is intended for use in real-time high-integrity applications.
It is paramount that its temporal properties and resource utilization are plain to model and predict statically.
The code shall follow applicable high-reliability coding guidelines as explained later in this document.
The implementation shall be fully compliant with the UAVCAN/CAN specification.
The implementation shall be fully compliant with the Cyphal/CAN specification.

The implementation and the API should be kept simple.
There will be no high-level abstractions -- if that is desired, other implementations of UAVCAN should be used.
There will be no high-level abstractions -- if that is desired, other implementations of Cyphal should be used.

The library is intended for deeply embedded systems where the resources may be scarce.
The ROM footprint is of a particular concern because the library should be usable with embedded bootloaders.
Expand Down Expand Up @@ -83,7 +83,7 @@ To reformat the sources, generate the project and build the target `format`; e.g
### SonarQube

SonarQube is a cloud solution so its use is delegated to the CI/CD pipeline.
If you need access, please get in touch with the UAVCAN Development Team members.
If you need access, please get in touch with the OpenCyphal Development Team members.

### IDE

Expand All @@ -106,4 +106,4 @@ Never use `REQUIRE` etc. anywhere but the main thread.

## Releasing

Simply create a new release on GitHub: <https://github.com/UAVCAN/libcanard/releases/new>
Simply create a new release on GitHub: <https://github.com/OpenCyphal/libcanard/releases/new>
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2016-2020 UAVCAN Development Team
Copyright (c) 2016 OpenCyphal

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
37 changes: 21 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
# Compact UAVCAN/CAN v1 in C
# Compact Cyphal/CAN v1 in C

[![Main Workflow](https://github.com/UAVCAN/libcanard/actions/workflows/main.yml/badge.svg)](https://github.com/UAVCAN/libcanard/actions/workflows/main.yml)
[![Main Workflow](https://github.com/OpenCyphal/libcanard/actions/workflows/main.yml/badge.svg)](https://github.com/OpenCyphal/libcanard/actions/workflows/main.yml)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=libcanard&metric=alert_status)](https://sonarcloud.io/dashboard?id=libcanard)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=libcanard&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=libcanard)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=libcanard&metric=coverage)](https://sonarcloud.io/dashboard?id=libcanard)
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=libcanard&metric=ncloc)](https://sonarcloud.io/dashboard?id=libcanard)
[![Forum](https://img.shields.io/discourse/users.svg?server=https%3A%2F%2Fforum.uavcan.org&color=1700b3)](https://forum.uavcan.org)
[![Forum](https://img.shields.io/discourse/users.svg?server=https%3A%2F%2Fforum.opencyphal.org&color=1700b3)](https://forum.opencyphal.org)

Libcanard is a compact implementation of the UAVCAN/CAN protocol stack in C99/C11 for high-integrity real-time
Libcanard is a compact implementation of the Cyphal/CAN protocol stack in C99/C11 for high-integrity real-time
embedded systems.

[UAVCAN](https://uavcan.org) is an open lightweight data bus standard designed for reliable intravehicular
[Cyphal](https://opencyphal.org) is an open lightweight data bus standard designed for reliable intravehicular
communication in aerospace and robotic applications via CAN bus, Ethernet, and other robust transports.
The acronym UAVCAN stands for *Uncomplicated Application-level Vehicular Computing And Networking*.

**Read the docs in [`libcanard/canard.h`](/libcanard/canard.h).**

Find examples, starters, tutorials on the
[UAVCAN forum](https://forum.uavcan.org/t/libcanard-examples-starters-tutorials/935).
[Cyphal forum](https://forum.opencyphal.org/t/libcanard-examples-starters-tutorials/935).

If you want to contribute, please read [`CONTRIBUTING.md`](/CONTRIBUTING.md).

## Features

- Full test coverage and extensive static analysis.
- Compliance with automatically enforceable MISRA C rules (reach out to <https://forum.uavcan.org> for details).
- Compliance with automatically enforceable MISRA C rules (reach out to <https://forum.opencyphal.org> for details).
- Detailed time complexity and memory requirement models for the benefit of real-time high-integrity applications.
- Purely reactive API without the need for background servicing.
- Support for the Classic CAN and CAN FD.
Expand All @@ -51,8 +50,8 @@ The platform-specific media IO layer (driver) is supposed to be provided by the
| Hardware |
+---------------+

The UAVCAN Development Team maintains a collection of various platform-specific components in a separate repository
at <https://github.com/UAVCAN/platform_specific_components>.
The OpenCyphal Development Team maintains a collection of various platform-specific components in a separate repository
at <https://github.com/OpenCyphal/platform_specific_components>.
Users are encouraged to search through that repository for drivers, examples, and other pieces that may be
reused in the target application to speed up the design of the media IO layer (driver) for the application.

Expand Down Expand Up @@ -119,7 +118,8 @@ if (result < 0)
}
```

Use [Nunavut](https://github.com/UAVCAN/nunavut) to automatically generate (de)serialization code from DSDL definitions.
Use [Nunavut](https://github.com/OpenCyphal/nunavut) to automatically generate
(de)serialization code from DSDL definitions.

The CAN frames generated from the message transfer are now stored in the `queue`.
We need to pick them out one by one and have them transmitted.
Expand Down Expand Up @@ -219,7 +219,7 @@ CanardFilter register_access_config = canardMakeFilterForService(384, ins.node_i
// You can also combine the two filter configurations into one (may also accept irrelevant messages).
// This allows consolidating a large set of configurations to fit the number of hardware filters.
// For more information on the optimal subset of configurations to consolidate to minimize wasted CPU,
// see the UAVCAN specification.
// see the Cyphal specification.
CanardFilter combined_config =
canardConsolidateFilters(&heartbeat_config, &register_access_config);
configureHardwareFilters(combined_config.extended_can_id, combined_config.extended_mask);
Expand All @@ -230,6 +230,11 @@ If you find the examples to be unclear or incorrect, please, open a ticket.
## Revisions
### v3.0
- Update branding as [UAVCAN v1 is renamed into Cyphal](https://forum.opencyphal.org/t/uavcan-v1-is-now-cyphal/1622).
There are no changes in this release aside from renaming.
### v2.0
- Dedicated transmission queues per redundant CAN interface with depth limits.
Expand All @@ -239,20 +244,20 @@ If you find the examples to be unclear or incorrect, please, open a ticket.
([Cavl](https://github.com/pavel-kirienko/cavl) library is distributed with libcanard).
Traversing the list of RX subscriptions now requires recursive traversal of the tree.
- Manual DSDL serialization helpers removed; use [Nunavut](https://github.com/UAVCAN/nunavut) instead.
- Manual DSDL serialization helpers removed; use [Nunavut](https://github.com/OpenCyphal/nunavut) instead.
- Replace bitwise CRC computation with much faster static table by default
([#185](https://github.com/UAVCAN/libcanard/issues/185)).
([#185](https://github.com/OpenCyphal/libcanard/issues/185)).
This can be disabled by setting `CANARD_CRC_TABLE=0`, which is expected to save ca. 500 bytes of ROM.
- Fixed issues with const-correctness in the API ([#175](https://github.com/UAVCAN/libcanard/issues/175)).
- Fixed issues with const-correctness in the API ([#175](https://github.com/OpenCyphal/libcanard/issues/175)).
- `canardRxAccept2()` renamed to `canardRxAccept()`.
- Support build configuration headers via `CANARD_CONFIG_HEADER`.
- Add API for generating CAN hardware acceptance filter configurations
([#169](https://github.com/UAVCAN/libcanard/issues/169)).
([#169](https://github.com/OpenCyphal/libcanard/issues/169)).
### v1.1
Expand Down
12 changes: 6 additions & 6 deletions libcanard/canard.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// This software is distributed under the terms of the MIT License.
/// Copyright (c) 2016 UAVCAN Consortium.
/// Author: Pavel Kirienko <pavel@uavcan.org>
/// Copyright (c) 2016 OpenCyphal.
/// Author: Pavel Kirienko <pavel@opencyphal.org>

#include "canard.h"
#include "cavl.h"
Expand Down Expand Up @@ -577,7 +577,7 @@ typedef struct
const void* payload;
} RxFrameModel;

/// Returns truth if the frame is valid and parsed successfully. False if the frame is not a valid UAVCAN/CAN frame.
/// Returns truth if the frame is valid and parsed successfully. False if the frame is not a valid Cyphal/CAN frame.
CANARD_PRIVATE bool rxTryParseFrame(const CanardMicrosecond timestamp_usec,
const CanardFrame* const frame,
RxFrameModel* const out)
Expand Down Expand Up @@ -800,9 +800,9 @@ CANARD_PRIVATE int8_t rxSessionAcceptFrame(CanardInstance* const ins,
return out;
}

/// RX session state machine update is the most intricate part of any UAVCAN transport implementation.
/// RX session state machine update is the most intricate part of any Cyphal transport implementation.
/// The state model used here is derived from the reference pseudocode given in the original UAVCAN v0 specification.
/// The UAVCAN/CAN v1 specification, which this library is an implementation of, does not provide any reference
/// The Cyphal/CAN v1 specification, which this library is an implementation of, does not provide any reference
/// pseudocode. Instead, it takes a higher-level, more abstract approach, where only the high-level requirements
/// are given and the particular algorithms are left to be implementation-defined. Such abstract approach is much
/// advantageous because it allows implementers to choose whatever solution works best for the specific application at
Expand Down Expand Up @@ -1121,7 +1121,7 @@ int8_t canardRxAccept(CanardInstance* const ins,
}
else
{
out = 0; // A non-UAVCAN/CAN input frame.
out = 0; // A non-Cyphal/CAN input frame.
}
}
CANARD_ASSERT(out <= 1);
Expand Down
Loading

0 comments on commit 75bb34c

Please sign in to comment.