+ * @brief A CAN signal to decode from the bus and output over USB.
+ */
+struct CanSignal {
+ struct CanMessageDefinition* message; /*!< message - The message this signal is a part of. */
+ const char* generic_name; /*!< generic_name - The name of the signal to be output over USB.*/
+ uint8_t bitPosition; /*!< bitPosition - The starting bit of the signal in its CAN message (assuming
+ * non-inverted bit numbering, i.e. the most significant bit of
+ * each byte is 0) */
+ uint8_t bitSize; /*!< bitSize - The width of the bit field in the CAN message. */
+ float factor; /*!< factor - The final value will be multiplied by this factor. Use 1 if you
+ * don't need a factor. */
+ float offset; /*!< offset - The final value will be added to this offset. Use 0 if you
+ * don't need an offset. */
+ float minValue; /*!< minValue - The minimum value for the processed signal.*/
+ float maxValue; /*!< maxValue - The maximum value for the processed signal. */
+ FrequencyClock frequencyClock; /*!< frequencyClock - A FrequencyClock struct to control the maximum frequency to
+ * process and send this signal. To process every value, set the
+ * clock's frequency to 0. */
+ bool sendSame; /*!< sendSame - If true, will re-send even if the value hasn't changed.*/
+ bool forceSendChanged; /*!< forceSendChanged - If true, regardless of the frequency, it will send the
+ * value if it has changed. */
+ const CanSignalState* states; /*!< states - An array of CanSignalState describing the mapping
+ * between numerical and string values for valid states. */
+ uint8_t stateCount; /*!< stateCount - The length of the states array. */
+ bool writable; /*!< writable - True if the signal is allowed to be written from the USB host
+ * back to CAN. Defaults to false.*/
+ SignalDecoder decoder; /*!< decoder - An optional function to decode a signal from the bus to a human
+ * readable value. If NULL, the default numerical decoder is used. */
+ SignalEncoder encoder; /*!< encoder - An optional function to encode a signal value to be written to
+ * CAN into a byte array. If NULL, the default numerical encoder
+ * is used. */
+ bool received; /*!< received - True if this signal has ever been received.*/
+ float lastValue; /*!< lastValue - The last received value of the signal. If 'received' is false,
+ * this value is undefined. */
+};
+typedef struct CanSignal CanSignal;