Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified LiquidCAN.pdf
Binary file not shown.
3 changes: 2 additions & 1 deletion LiquidCAN.tex
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@

\vspace{1cm}

{\large Version 1.4}
{\large Version 1.5}

\vspace{0.5cm}

Expand All @@ -116,6 +116,7 @@ \section*{Version History}
1.2 & 2026-02-09 & Fixed inconsistant field value lengths \& typos & Raffael Rott\\
1.3 & 2026-02-28 & Added a status field to field access responses& Raffael Rott\\
1.4 & 2026-03-05 & Variable-length frame serialization; updated payload sizes & Michael Debertol\\
1.5 & 2026-03-21 & Defined reserved Node IDs & Michael Debertol\\
% Make sure to change the version on the first page
\bottomrule
\end{longtable}
Expand Down
2 changes: 1 addition & 1 deletion liquidcan_rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ pub mod payloads;
pub mod raw_can_message;

pub use can_message::CanMessage;
pub use raw_can_message::CanMessageId;
pub use raw_can_message::{CanMessageId, NODE_ID_BROADCAST, NODE_ID_INVALID, NODE_ID_SERVER};
5 changes: 5 additions & 0 deletions liquidcan_rust/src/raw_can_message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ pub enum CanMessagePriority {
High = 1,
}

/// Reserved Node IDs with special meaning.
pub const NODE_ID_INVALID: u8 = 0;
pub const NODE_ID_SERVER: u8 = 1;
pub const NODE_ID_BROADCAST: u8 = 31;

#[bitfield]
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(u16)]
Expand Down
18 changes: 16 additions & 2 deletions sections/02_can_id_scheme.tex
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
\section{CAN Identifier Scheme \& NodeID}\label{sec:can-id-scheme}
Each device on the bus has its own unique Node ID. The Server is assigned the Node ID 0.
Each device on the bus has its own unique Node ID. Node IDs are 5 bits wide, giving a range of 0--31.
The CAN ID is composed of 11 bits. It contains the sender and receiver Node IDs and a priority bit.

\paragraph{}
Expand All @@ -22,4 +22,18 @@ \section{CAN Identifier Scheme \& NodeID}\label{sec:can-id-scheme}

\end{center}

% TODO: Describe ID allocation strategy and priority rules
\subsection{Reserved Node IDs}\label{sec:reserved-node-ids}
Certain Node ID values carry special meaning and must not be assigned to regular client nodes:

\begin{center}
\begin{tabular}{c l p{8cm}}
\toprule
\textbf{Node ID} & \textbf{Name} & \textbf{Description} \\
\midrule
0 & Invalid & Reserved as an invalid/unassigned address. No node may use this ID. \\
1 & Server & The central server node. \\
31 & Broadcast & Broadcast address. Messages sent with this receiver ID are received by all nodes on the bus. \\
\bottomrule
\end{tabular}
\end{center}

2 changes: 1 addition & 1 deletion sections/04_node_registration.tex
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
\section{Node Registration}\label{sec:node-registration}
As soon as a node comes online (or when it receives a \texttt{node\_info\_req}), it enters the registration phase. See Figure \ref{fig:node-registration-flow} for a graphical representation the whole registration procedure. Here it sends out a \texttt{node\_info\_announcement}.
As soon as a node comes online (or when it receives a \texttt{node\_info\_req}), it enters the registration phase. A \texttt{node\_info\_req} is broadcast (\ref{sec:reserved-node-ids}) by the server when \textit{it} comes online. See Figure \ref{fig:node-registration-flow} for a graphical representation the whole registration procedure. Here it sends out a \texttt{node\_info\_announcement}.
This announces the node to the bus and includes its name, number of telemetryValues and parameters, and its firmware version through
the firmware and LiquidCan hashes (see \ref{struct:NodeInfoRes}). The central server registers the new node and waits for \texttt{field\_registration} messages. From this point on the
node is able to send/receive messages on the bus.
Loading