DriveWorks SDK Reference
4.0.0 Release
For Test and Development only

Interpreter.h
Go to the documentation of this file.
1 // This code contains NVIDIA Confidential Information and is disclosed
3 // under the Mutual Non-Disclosure Agreement.
4 //
5 // Notice
6 // ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES
7 // NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
8 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT,
9 // MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
10 //
11 // NVIDIA Corporation assumes no responsibility for the consequences of use of such
12 // information or for any infringement of patents or other rights of third parties that may
13 // result from its use. No license is granted by implication or otherwise under any patent
14 // or patent rights of NVIDIA Corporation. No third party distribution is allowed unless
15 // expressly authorized by NVIDIA. Details are subject to change without notice.
16 // This code supersedes and replaces all information previously supplied.
17 // NVIDIA Corporation products are not authorized for use as critical
18 // components in life support devices or systems without express written approval of
19 // NVIDIA Corporation.
20 //
21 // Copyright (c) 2016-2020 NVIDIA Corporation. All rights reserved.
22 //
23 // NVIDIA Corporation and its licensors retain all intellectual property and proprietary
24 // rights in and to this software and related documentation and any modifications thereto.
25 // Any use, reproduction, disclosure or distribution of this software and related
26 // documentation without an express license agreement from NVIDIA Corporation is
27 // strictly prohibited.
28 //
30 
46 #ifndef DW_SENSORS_CANBUS_INTERPRETER_H_
47 #define DW_SENSORS_CANBUS_INTERPRETER_H_
48 
49 #include <dw/core/Config.h>
50 #include <dw/core/base/Exports.h>
51 
52 #include <dw/sensors/canbus/CAN.h>
54 
56 #define DW_SENSORS_CAN_INTERPRETER_MESSAGE_MAX_SIGNALS 128
57 
59 #define DW_SENSORS_CAN_INTERPRETER_MAX_MESSAGE_NAME_LEN 32
60 
62 #define DW_SENSORS_CAN_INTERPRETER_MAX_SIGNAL_NAME_LEN 32
63 
64 #ifdef __cplusplus
65 extern "C" {
66 #endif
67 
69 typedef struct dwCANInterpreterObject* dwCANInterpreterHandle_t;
70 
72 typedef void (*dwCANInterpreterAddMessageFunc_t)(const dwCANMessage* msg, void* userData);
73 
75 typedef uint32_t (*dwCANInterpreterGetNumAvailableFunc_t)(void* userData);
76 
79  dwCANVehicleData* data,
80  uint32_t idx, void* userData);
81 
83 typedef bool (*dwCANInterpreterGetDataf32Func_t)(float32_t* value, dwTime_t* timestamp_us, uint32_t idx, void* userData);
84 
86 typedef bool (*dwCANInterpreterGetDataf64Func_t)(float64_t* value, dwTime_t* timestamp_us, uint32_t idx, void* userData);
87 
89 typedef bool (*dwCANInterpreterGetDatai32Func_t)(int32_t* value, dwTime_t* timestamp_us, uint32_t idx, void* userData);
90 
93 {
101 
120 dwStatus dwCANInterpreter_buildFromCallbacks(dwCANInterpreterHandle_t* interpreter, dwCANInterpreterInterface callbacks,
121  void* userData, dwContextHandle_t context);
122 
145 dwStatus dwCANInterpreter_buildFromDBC(dwCANInterpreterHandle_t* interpreter,
146  const char8_t* inputDBC,
147  dwContextHandle_t ctx);
148 
163 dwStatus dwCANInterpreter_buildFromDBCString(dwCANInterpreterHandle_t* interpreter,
164  const char8_t* dbc,
165  dwContextHandle_t ctx);
166 
180 dwStatus dwCANInterpreter_release(dwCANInterpreterHandle_t interpreter);
181 
182 // ------------ encoding
200  const dwCANMessage* msg,
201  dwCANInterpreterHandle_t interpreter);
202 
220 dwStatus dwCANInterpreter_getSignalNameInMessage(const char8_t** name, uint32_t idx,
221  const dwCANMessage* msg,
222  dwCANInterpreterHandle_t interpreter);
223 
238 dwStatus dwCANInterpreter_createMessage(dwCANMessage* msg, uint32_t id, dwCANInterpreterHandle_t interpreter);
239 
255  dwCANInterpreterHandle_t interpreter);
256 
277  dwCANMessage* msg,
278  dwCANInterpreterHandle_t interpreter);
279 
285  dwCANMessage* msg,
286  dwCANInterpreterHandle_t interpreter);
287 
292 dwStatus dwCANInterpreter_encodei32(int32_t value, const char8_t* signal,
293  dwCANMessage* msg,
294  dwCANInterpreterHandle_t interpreter);
295 
296 // ----------------- consumption
311  dwCANInterpreterHandle_t interpreter);
312 
326 dwStatus dwCANInterpreter_getNumberSignals(uint32_t* num, dwCANInterpreterHandle_t interpreter);
327 
347  dwCANInterpreterHandle_t interpreter);
348 
361 dwStatus dwCANInterpreter_getSignalName(const char8_t** name, uint32_t idx,
362  dwCANInterpreterHandle_t interpreter);
363 
378  dwCANInterpreterHandle_t interpreter);
379 
393 dwStatus dwCANInterpreter_getSignalRange(float64_t* minimum, float64_t* maximum, uint32_t idx,
394  dwCANInterpreterHandle_t interpreter);
395 
416 dwStatus dwCANInterpreter_getf32(float32_t* value, dwTime_t* timestamp_us, uint32_t idx, dwCANInterpreterHandle_t interpreter);
417 
422 dwStatus dwCANInterpreter_getf64(float64_t* value, dwTime_t* timestamp_us, uint32_t idx, dwCANInterpreterHandle_t interpreter);
423 
428 dwStatus dwCANInterpreter_geti32(int32_t* value, dwTime_t* timestamp_us, uint32_t idx, dwCANInterpreterHandle_t interpreter);
429 
430 #ifdef __cplusplus
431 }
432 #endif
433 
434 #endif // DW_SENSORS_CANBUS_INTERPRETER_H_
float float32_t
Specifies POD types.
Definition: Types.h:70
dwCANInterpreterGetDatai32Func_t getDatai32
Definition: Interpreter.h:99
DW_API_PUBLIC dwStatus dwCANInterpreter_geti32(int32_t *value, dwTime_t *timestamp_us, uint32_t idx, dwCANInterpreterHandle_t interpreter)
Same as dwCANInterpreter_getf32, but for int32 types.
dwTrivialDataType
Specifies a type indicator of the underlying trivial data type.
Definition: Types.h:103
DW_API_PUBLIC dwStatus dwCANInterpreter_createMessageFromName(dwCANMessage *msg, const char8_t *msgName, dwCANInterpreterHandle_t interpreter)
Initializes an empty can message an interpreter can encoded signals into.
DW_API_PUBLIC dwStatus dwCANInterpreter_encodei32(int32_t value, const char8_t *signal, dwCANMessage *msg, dwCANInterpreterHandle_t interpreter)
Same as dwCANInterpreter_encodef32, but for int32 types.
Interface for callback based CAN data interpreter.
Definition: Interpreter.h:92
dwCANInterpreterGetDataf32Func_t getDataf32
Definition: Interpreter.h:97
bool(* dwCANInterpreterGetSignalInfoFunc_t)(const char8_t **name, dwTrivialDataType *type, dwCANVehicleData *data, uint32_t idx, void *userData)
Gets the name and type of a signal; the callback must return false if the query fails.
Definition: Interpreter.h:78
dwCANInterpreterGetDataf64Func_t getDataf64
Definition: Interpreter.h:98
NVIDIA DriveWorks API: Vehicle Data
DW_API_PUBLIC dwStatus dwCANInterpreter_buildFromDBCString(dwCANInterpreterHandle_t *interpreter, const char8_t *dbc, dwContextHandle_t ctx)
Creates a CAN data interpreter based on DBC file format and initializes the interpreter from a string...
DW_API_PUBLIC dwStatus dwCANInterpreter_release(dwCANInterpreterHandle_t interpreter)
Closes previously opened interpreter.
double float64_t
Definition: Types.h:71
dwCANVehicleData
A set of enumeration constants representing the default data signals.
Definition: VehicleData.h:66
DW_API_PUBLIC dwStatus dwCANInterpreter_encodef64(float64_t value, const char8_t *signal, dwCANMessage *msg, dwCANInterpreterHandle_t interpreter)
Same as dwCANInterpreter_encodef32, but for float64 types.
dwCANInterpreterGetNumAvailableFunc_t getNumAvailableSignals
Definition: Interpreter.h:95
dwStatus
Status definition.
Definition: Status.h:180
DW_API_PUBLIC dwStatus dwCANInterpreter_getSignalType(dwTrivialDataType *type, uint32_t idx, dwCANInterpreterHandle_t interpreter)
Returns the type of the value of a signal available for consumption by the application.
DW_API_PUBLIC dwStatus dwCANInterpreter_getSignalName(const char8_t **name, uint32_t idx, dwCANInterpreterHandle_t interpreter)
Gets the name of a signal available for consumption by the application as a string.
int64_t dwTime_t
Specifies a timestamp unit, in microseconds.
Definition: Types.h:82
bool(* dwCANInterpreterGetDataf64Func_t)(float64_t *value, dwTime_t *timestamp_us, uint32_t idx, void *userData)
Returns false if no float64 data is available.
Definition: Interpreter.h:86
DW_API_PUBLIC dwStatus dwCANInterpreter_getNumberSignals(uint32_t *num, dwCANInterpreterHandle_t interpreter)
Gets the number of signals decoded and available for consumption by the application side...
DW_API_PUBLIC dwStatus dwCANInterpreter_buildFromCallbacks(dwCANInterpreterHandle_t *interpreter, dwCANInterpreterInterface callbacks, void *userData, dwContextHandle_t context)
Creates a CAN data interpreter based on user provided callbacks.
DW_API_PUBLIC dwStatus dwCANInterpreter_getDataSignalIndex(uint32_t *idx, dwCANVehicleData data, dwCANInterpreterHandle_t interpreter)
Gets the index of a signal of the last consumed message that corresponds to a certain predefined data...
DW_API_PUBLIC dwStatus dwCANInterpreter_createMessage(dwCANMessage *msg, uint32_t id, dwCANInterpreterHandle_t interpreter)
Initializes an empty can message an interpreter can encoded signals into.
bool(* dwCANInterpreterGetDatai32Func_t)(int32_t *value, dwTime_t *timestamp_us, uint32_t idx, void *userData)
Returns false if no int32 data is available.
Definition: Interpreter.h:89
NVIDIA DriveWorks API: CAN
dwCANInterpreterGetSignalInfoFunc_t getSignalInfo
Definition: Interpreter.h:96
struct dwContextObject * dwContextHandle_t
Context handle.
Definition: Context.h:79
char char8_t
Definition: Types.h:72
DW_API_PUBLIC dwStatus dwCANInterpreter_getf32(float32_t *value, dwTime_t *timestamp_us, uint32_t idx, dwCANInterpreterHandle_t interpreter)
Gets a &#39;float32_t&#39; value from the available values.
DW_API_PUBLIC dwStatus dwCANInterpreter_getNumberSignalsInMessage(uint32_t *num, const dwCANMessage *msg, dwCANInterpreterHandle_t interpreter)
Gets the number of signals a CAN interpreter can encode into the provided message.
DW_API_PUBLIC dwStatus dwCANInterpreter_encodef32(float32_t value, const char8_t *signal, dwCANMessage *msg, dwCANInterpreterHandle_t interpreter)
Encodes a value for a signal into a given message.
DW_API_PUBLIC dwStatus dwCANInterpreter_getSignalRange(float64_t *minimum, float64_t *maximum, uint32_t idx, dwCANInterpreterHandle_t interpreter)
Returns the range of validity of data for a signal available for consumption by the application...
DW_API_PUBLIC dwStatus dwCANInterpreter_getf64(float64_t *value, dwTime_t *timestamp_us, uint32_t idx, dwCANInterpreterHandle_t interpreter)
Same as dwCANInterpreter_getf32, but for float64 types.
DW_API_PUBLIC dwStatus dwCANInterpreter_buildFromDBC(dwCANInterpreterHandle_t *interpreter, const char8_t *inputDBC, dwContextHandle_t ctx)
Creates a CAN data interpreter based on DBC file format.
void(* dwCANInterpreterAddMessageFunc_t)(const dwCANMessage *msg, void *userData)
Pushes new messages to the interpreter.
Definition: Interpreter.h:72
bool(* dwCANInterpreterGetDataf32Func_t)(float32_t *value, dwTime_t *timestamp_us, uint32_t idx, void *userData)
Returns false if no float32 data is available.
Definition: Interpreter.h:83
DW_API_PUBLIC dwStatus dwCANInterpreter_getSignalNameInMessage(const char8_t **name, uint32_t idx, const dwCANMessage *msg, dwCANInterpreterHandle_t interpreter)
Gets the name of a signal that the CAN interpreter can encode in the currently active encoded message...
#define DW_API_PUBLIC
Definition: Exports.h:54
uint32_t(* dwCANInterpreterGetNumAvailableFunc_t)(void *userData)
Gets the number of signals available to be retrieved. The same signal may be available multiple times...
Definition: Interpreter.h:75
DW_API_PUBLIC dwStatus dwCANInterpreter_consume(const dwCANMessage *msg, dwCANInterpreterHandle_t interpreter)
Pushes a new message to the interpreter.
Holds a CAN package.
Definition: CAN.h:112
dwCANInterpreterAddMessageFunc_t addMessage
Definition: Interpreter.h:94
struct dwCANInterpreterObject * dwCANInterpreterHandle_t
CAN message interpreter handle.
Definition: Interpreter.h:69
NVIDIA DriveWorks API: Core Exports