cands_transport/cyphal/defines/
constants.rs

1/// Semantic version of this library (not the CYPHAL specification).
2/// API will be backward compatible within the same major version.
3pub const CYPHAL_VERSION_MAJOR: u8 = 1;
4pub const CYPHAL_VERSION_MINOR: u8 = 1;
5
6/// The version number of the CYPHAL specification implemented by this library.
7pub const CYPHAL_SPECIFICATION_VERSION_MAJOR: u8 = 1;
8pub const CYPHAL_SPECIFICATION_VERSION_MINOR: u8 = 0;
9
10/// These error codes may be returned from the library API calls whose return type is a signed integer in the negated
11/// form (e.g., error code 2 returned as -2). A non-negative return value represents success.
12/// API calls whose return type is not a signed integer cannot fail by contract.
13/// No other error states may occur in the library.
14/// By contract, a well-characterized application with a properly sized memory pool will never encounter errors.
15/// The error code 1 is not used because -1 is often used as a generic error code in 3rd-party code.
16pub const CYPHAL_ERROR_INVALID_ARGUMENT: u8 = 2;
17pub const CYPHAL_ERROR_OUT_OF_MEMORY: u8 = 3;
18
19/// MTU values for the supported protocols.
20/// Per the recommendations given in the CYPHAL/CAN Specification, other MTU values should not be used.
21pub const CYPHAL_MTU_CAN_CLASSIC: u8 = 8;
22pub const CYPHAL_MTU_CAN_FD: u8 = 64;
23
24/// Parameter ranges are inclusive; the lower bound is zero for all. See CYPHAL/CAN Specification for background.
25pub const CYPHAL_SUBJECT_ID_MAX: u16 = 8191;
26pub const CYPHAL_SERVICE_ID_MAX: u16 = 511;
27pub const CYPHAL_NODE_ID_MAX: u8 = 127;
28pub const CYPHAL_PRIORITY_MAX: u8 = 7;
29pub const CYPHAL_TRANSFER_ID_BIT_LENGTH: u8 = 5;
30pub const CYPHAL_TRANSFER_ID_MAX: u8 =  (1 << CYPHAL_TRANSFER_ID_BIT_LENGTH) - 1;
31
32/// This value represents an undefined node-ID: broadcast destination or anonymous source.
33/// Library functions treat all values above CYPHAL_NODE_ID_MAX as anonymous.
34pub const CYPHAL_NODE_ID_UNSET: u8 = 255;
35
36/// This is the recommended transfer-ID timeout value given in the CYPHAL Specification. The application may choose
37/// different values per subscription (i.e., per data specifier) depending on its timing requirements.
38pub const CYPHAL_DEFAULT_TRANSFER_ID_TIMEOUT_USEC: usize = 2000000;
39
40pub const CYPHAL_NUM_TRANSFER_KINDS: usize = 3;
41
42pub const CAN_DLC_TO_DLEN: [u8;16] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20, 24, 32, 48, 64];
43pub const CAN_DLEN_TO_DLC: [u8; 65] = [
44    0,  1,  2,  3,  4,  5,  6,  7,  8,                               // 0-8
45    9,  9,  9,  9,                                                   // 9-12
46    10, 10, 10, 10,                                                  // 13-16
47    11, 11, 11, 11,                                                  // 17-20
48    12, 12, 12, 12,                                                  // 21-24
49    13, 13, 13, 13, 13, 13, 13, 13,                                  // 25-32
50    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,  // 33-48
51    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  // 49-64
52];
53
54pub const BITS_PER_BYTE: u8 = 8;
55pub const BYTE_MAX: u16 = 0xff;
56
57pub const CAN_EXT_ID_MASK: u32 = (1 << 29) - 1;
58
59pub const MFT_NON_LAST_FRAME_PAYLOAD_MIN: u8 = 7;
60
61pub const PADDING_BYTE_VALUE: u8 = 0;
62
63pub const OFFSET_PRIORITY:u8 = 26;
64pub const OFFSET_SUBJECT_ID: u8 = 8;
65pub const OFFSET_SERVICE_ID: u8 = 14;
66pub const OFFSET_DST_NODE_ID: u8 = 7;
67
68pub const FLAG_SERVICE_NOT_MESSAGE: u32 =1 << 25;
69pub const FLAG_ANONYMOUS_MESSAGE: u32 = 1 << 24;
70pub const FLAG_REQUEST_NOT_RESPONSE: u32 = 1 << 24;
71pub const FLAG_RESERVED_23: u32 = 1 << 23;
72pub const FLAG_RESERVED_07: u32 = 1 << 7;
73
74pub const TAIL_START_OF_TRANSFER: u8 = 128;
75pub const TAIL_END_OF_TRANSFER: u8 = 64;
76pub const TAIL_TOGGLE: u8 = 32;
77pub const TAIL_SIZE_BYTES: u8 = 1;
78
79pub const INITIAL_TOGGLE_STATE: bool = true;
80
81pub const CRC_INITIAL: u16 = 0xFFFF;
82pub const CRC_RESIDUE: u16 = 0x0000;
83pub const CRC_SIZE_BYTES: u8 = 2;