<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\subsection{NodeInfo (0x09)}

A CATS station may want to communicate information about itself. This may be relatively immutable information, such as the hardware revision of the station. It may also include variable information, such as the station's uptime. The NodeInfo whisker provides a range of variables which the station can choose to populate. The NodeInfo uses a bitmap to select which variables are used. This increases efficiency, as unused variables do not need to be transmitted. \textbf{A valid CATS packet contains a maximum of one NodeInfo whisker.}

\subsubsection{Structure}

\begin{tabular}{|l|l|l|l|}
  \hline
  \textbf{Byte offset} &amp; \textbf{Length} &amp; \textbf{Value} &amp; \textbf{Description} \\
  \hline
  0 &amp; 1 &amp; 0x09 &amp; Whisker type \\
  \hline
  1 &amp; 1 &amp; $N$ &amp; Whisker length in bytes \\
  \hline
  2 &amp; 3 &amp; &amp; Bitmap \\
  \hline
  5 &amp; $N - 3$ &amp; &amp; Data \\
  \hline
\end{tabular}

\subsubsection{Variables}

Below is a table of variables. Each variable has an index, which indicates which bit in the bitmap to set to use the variable. A conversion function is also given, which shows how to convert the given value to the raw value stored in the whisker. Note that the ``Transceiver Temperature'' should be a measurement of some part of the transceiver itself. It should not be used to report air temperature or other meteorological data. \newline

\noindent
\begin{tabular}{|l|l|l|l|l|l|}
  \hline
  \textbf{Index} &amp; \textbf{Name} &amp; \textbf{Length} &amp; \textbf{Data Type} &amp; \textbf{Conversion function} &amp; \textbf{Units} \\
  \hline
  0 &amp; Hardware ID &amp; 2 &amp; u16 &amp; $f(x) = x$ &amp; N/A \\
  \hline
  1 &amp; Software ID &amp; 1 &amp; u8 &amp; $f(x) = x$ &amp; N/A \\
  \hline
  2 &amp; Uptime &amp; 4 &amp; u32 &amp; $f(x) = x$ &amp; seconds \\
  \hline
  3 &amp; Antenna height &amp; 1 &amp; u8 &amp; $f(x) = x$ &amp; meters \\
  \hline
  4 &amp; Antenna gain &amp; 1 &amp; u8 &amp; $f(x) = 4x$ &amp; dBi \\
  \hline
  5 &amp; TX power &amp; 1 &amp; u8 &amp; $f(x) = 4x$ &amp; dBm \\
  \hline
  6 &amp; Voltage &amp; 1 &amp; u8 &amp; $f(x) = 10x$ &amp; volts \\
  \hline
  7 &amp; Transceiver temperature &amp; 1 &amp; i8 &amp; $f(x) = x$ &amp; \degree C \\
  \hline
  8 &amp; Battery charge &amp; 1 &amp; u8 &amp; $f(x) = 2.55x$ &amp; percent \\
  \hline
  9 &amp; Altitude (See below) &amp; 4 &amp; f32 &amp; $f(x)= x$ &amp; meters \\
  \hline
  10 &amp; Balloon (See below) &amp; 0 &amp; N/A &amp; N/A &amp; N/A \\
  \hline
  11 &amp; Ambient temperature &amp; 1 &amp; i8 &amp; $f(x) = x$ &amp; \degree C \\
  \hline
  12 &amp; Ambient relative humidity &amp; 1 &amp; u8 &amp; $f(x) = 2.55x$ &amp; percent \\
  \hline
  13 &amp; Ambient pressure &amp; 2 &amp; u16 &amp; $f(x) = x$ &amp; decapascal (daPa) \\
  \hline
\end{tabular}

\textbf{Altitude}: Although the GPS whisker contains altitude already, it is only 2 bytes long. For most applications this is sufficient, but some require additional precision. For example, high altitude balloons need precise altitude information for accurate landing predictions. The NodeInfo whisker provides the ability to use a 4 byte float for altitude. If set, the NodeInfo whisker altitude should take precedence over the GPS whisker altitude. However, the GPS altitude should be set as close as possible to the NodeInfo altitude. This allows a system which does not implement the NodeInfo whisker to still have correct altitude information.

\textbf{Balloon}: If set, this packet was emitted by a high altitude balloon. Please only set this bit on an actual balloon payload. Transmitters incorrectly marked as balloons cause additional work, and complications, for downstream users of CATS. If, for some reason, you want a non-balloon to show up as a balloon, instead set the icon to be a balloon in the identification whisker, and leave the balloon bit clear.

\subsubsection{Bitmap}

The NodeInfo whisker contains a 3-byte, or 24-bit, bitmap to keep track of which variables are actually used. The extra bits are intended to allow additional variables in the future. The MSB is assigned the index 23; the LSB is index 0. This corresponds to the variables in the above table.

\subsubsection{Example}

\begin{tabular}{|l|l|}
  \hline
  \textbf{Variables} &amp; \textbf{Whisker Data (Hex)} \\
  \hline
  \makecell{
  Hardware ID: 7408 \\
  Uptime: 98 seconds \\
  TX Power: 30 dBm \\
  Voltage: 12.8 V} &amp; 09 0B 00 00 65 F0 1C 62 00 00 00 78 80 \\
  \hline
\end{tabular}
</pre></body></html>