Update doc

This commit is contained in:
RowanC 2026-04-06 17:33:15 +01:00
parent 0694fdacb8
commit 0a6ebedd84
2 changed files with 35 additions and 1 deletions

View file

@ -0,0 +1,24 @@
= nrai_ADS-DV_CAN-API
This is the Newcastle Racing AI (nrai) implementation of the ADS-DV software
interface specification (including all other sensors accessed via CAN e.g. GPS).
it aims to be as minimal as possible, facilitating on the bare minimum to pack
and unpack CAN frames, only implementing checks where required for the packing
of frames (e.g. stat clamping). All data sanity checks are expected to be
implemented by the calling program.
== Usage
This API provides 2 structs for storing data to be written to, and received from
the VCU over CAN. They are `nrai_can_ai_read` and `nrai_can_ai_write` for data
received from the VCU and data to write to the VCU respectively.
This API provides functions for the AI to pack data into CAN frames, named in
the format
`int32_t nrai_can_mkframe_<frame_name>(struct nrai_can_ai_write *, struct can_frame *);`
and function for the AI to unpack CAN frames, named in the format
`int32_t nrai_can_unpack_<frame_name>(struct nrai_can_ai_read *, struct can_frame *);`.
This API also provides an enum for translating CAN message names into their ID,
all entry's are named in the format `NRAI_CAN_ID_<frame_name>`
== Notes
This API makes use of limited use of C23 extensions for the purpose of either
improving clarity or simplifying code. While all C23 extensions used are
supported by GCC and Clang, not all compilers support them.

View file

@ -30,7 +30,9 @@
#include <linux/can.h> #include <linux/can.h>
#ifndef NRAI_FT
#define NRAI_FT #define NRAI_FT
#endif //NRAI)FT
enum{ enum{
NRAI_CAN_ID_NMT = 0, NRAI_CAN_ID_NMT = 0,
@ -553,6 +555,14 @@ struct nrai_can_ai_read {
uint8_t Acc_StartFastCalib; // 24|1@1+ (1,0) [0|1] uint8_t Acc_StartFastCalib; // 24|1@1+ (1,0) [0|1]
}; };
/*
* The following funcitons ALL unpack the data from the CAN frame corresponding
* to their name into the nrai_can_ai_read struct.
* All functions return:
* -1 on error
* 0 on success
* On error the struct nrai_can_ai_read AND the can_frame are not modified.
*/
NRAI_FT int32_t nrai_can_unpack_VCU2AI_Status (struct nrai_can_ai_read *, struct can_frame *); NRAI_FT int32_t nrai_can_unpack_VCU2AI_Status (struct nrai_can_ai_read *, struct can_frame *);
NRAI_FT int32_t nrai_can_unpack_VCU2AI_Steer (struct nrai_can_ai_read *, struct can_frame *); NRAI_FT int32_t nrai_can_unpack_VCU2AI_Steer (struct nrai_can_ai_read *, struct can_frame *);
NRAI_FT int32_t nrai_can_unpack_VCU2AI_Speeds (struct nrai_can_ai_read *, struct can_frame *); NRAI_FT int32_t nrai_can_unpack_VCU2AI_Speeds (struct nrai_can_ai_read *, struct can_frame *);