DriveWorks SDK Reference
5.4.5418 Release
For Test and Development only

SensorManager.h
Go to the documentation of this file.
1 //
3 // Notice
4 // ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES
5 // NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
6 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT,
7 // MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8 //
9 // NVIDIA CORPORATION & AFFILIATES assumes no responsibility for the consequences of use of such
10 // information or for any infringement of patents or other rights of third parties that may
11 // result from its use. No license is granted by implication or otherwise under any patent
12 // or patent rights of NVIDIA CORPORATION & AFFILIATES. No third party distribution is allowed unless
13 // expressly authorized by NVIDIA. Details are subject to change without notice.
14 // This code supersedes and replaces all information previously supplied.
15 // NVIDIA CORPORATION & AFFILIATES products are not authorized for use as critical
16 // components in life support devices or systems without express written approval of
17 // NVIDIA CORPORATION & AFFILIATES.
18 //
19 // SPDX-FileCopyrightText: Copyright (c) 2017-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
20 // SPDX-License-Identifier: LicenseRef-NvidiaProprietary
21 //
22 // NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
23 // property and proprietary rights in and to this material, related
24 // documentation and any modifications thereto. Any use, reproduction,
25 // disclosure or distribution of this material and related documentation
26 // without an express license agreement from NVIDIA CORPORATION or
27 // its affiliates is strictly prohibited.
28 //
30 
45 #ifndef DW_SENSORS_SENSORMANAGER_H_
46 #define DW_SENSORS_SENSORMANAGER_H_
47 
48 #include <dw/rig/Rig.h>
49 #include <dw/sensors/Sensors.h>
51 #include <dw/sensors/imu/IMU.h>
52 #include <dw/sensors/lidar/Lidar.h>
53 #include <dw/sensors/gps/GPS.h>
54 #include <dw/sensors/canbus/CAN.h>
55 #include <dw/sensors/radar/Radar.h>
56 #include <dw/sensors/lidar/Lidar.h>
57 #include <dw/sensors/data/Data.h>
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 #if defined(LINUX)
64 #define DW_SENSORMANGER_MAX_CAMERAS 64U
65 #else
66 // The camera limit is to match the max CSI port limit on HW
67 #define DW_SENSORMANGER_MAX_CAMERAS 16U
68 #endif
69 #define DW_SENSORMANGER_MAX_NUM_SENSORS 64U
70 
71 typedef struct dwSensorManagerObject* dwSensorManagerHandle_t;
72 
74 typedef struct _dwUltrasonicEnvelope dwUltrasonicEnvelope;
75 
77 typedef struct
78 {
81 
85  uint32_t sensorTypeIndex;
86 
89 
93  uint32_t sensorIndex;
94 
96  uint32_t sensorIndices[DW_SENSORMANGER_MAX_CAMERAS];
97 
101  uint32_t numCamFrames;
103 
111  const uint8_t* rawData;
112  size_t rawDataSize;
114 } dwSensorEvent;
115 
117 {
120 };
121 
122 typedef struct
123 {
131 
132 typedef struct
133 {
136 
138  uint32_t enableSensors[DW_SENSORMANGER_MAX_NUM_SENSORS];
139 
143 
153 
154 typedef void (*dwSensorManagerDispatcher_t)(const dwSensorEvent*, void*, dwStatus);
155 
168 dwStatus dwSensorManager_initialize(dwSensorManagerHandle_t* sm,
169  size_t poolSize, dwSALHandle_t const sal);
170 
191 dwStatus dwSensorManager_initializeFromRig(dwSensorManagerHandle_t* sm,
192  dwRigHandle_t rc,
193  size_t poolSize, dwSALHandle_t sal);
194 
217 dwStatus dwSensorManager_initializeFromRigWithParams(dwSensorManagerHandle_t* sm,
218  dwRigHandle_t const rc,
219  const dwSensorManagerParams* params,
220  size_t poolSize, dwSALHandle_t const sal);
221 
231 dwStatus dwSensorManager_release(dwSensorManagerHandle_t sm);
232 
251 dwStatus dwSensorManager_addSensor(dwSensorParams params, uint64_t clientData,
252  dwSensorManagerHandle_t sm);
253 
276 dwStatus dwSensorManager_addCameraSensor(const char8_t* groupName, uint32_t siblingIndex,
277  dwSensorParams params, uint64_t clientData,
278  dwSensorManagerHandle_t sm);
279 
290 dwStatus dwSensorManager_start(dwSensorManagerHandle_t sm);
291 
302 dwStatus dwSensorManager_stop(dwSensorManagerHandle_t sm);
303 
314 dwStatus dwSensorManager_reset(dwSensorManagerHandle_t sm);
315 
333 dwStatus dwSensorManager_acquireNextEvent(const dwSensorEvent** ev, dwTime_t timeoutMicroSeconds,
334  dwSensorManagerHandle_t sm);
335 
349 dwStatus dwSensorManager_releaseAcquiredEvent(const dwSensorEvent* ev,
350  dwSensorManagerHandle_t sm);
351 
364 dwStatus dwSensorManager_getNumSensors(uint32_t* count, dwSensorType type, dwSensorManagerHandle_t sm);
365 
378 dwStatus dwSensorManager_getSensorHandle(dwSensorHandle_t* handle, uint32_t sensorIndex, dwSensorManagerHandle_t sm);
379 
392 dwStatus dwSensorManager_getSensorClientData(uint64_t* cd, uint32_t sensorIndex, dwSensorManagerHandle_t sm);
393 
407 dwStatus dwSensorManager_getSensorIndex(uint32_t* sensorIndex, dwSensorType type,
408  uint32_t sensorTypeIndex, dwSensorManagerHandle_t sm);
409 
424 dwStatus dwSensorManager_getSensorTypeIndex(uint32_t* sensorTypeIndex, dwSensorType* type,
425  uint32_t sensorIndex, dwSensorManagerHandle_t sm);
426 
439 dwStatus dwSensorManager_setDispatcher(dwSensorManagerDispatcher_t dispatchPtr, void* const cookie, dwSensorManagerHandle_t sm);
440 
453 dwStatus dwSensorManager_setTimeout(dwTime_t timeout, dwSensorManagerHandle_t sm);
454 #ifdef __cplusplus
455 }
456 #endif
457 
459 #endif // DW_SENSORS_SENSORMANAGER_H_
dwDispatcherParams dispatcherParams
Parameters to configure dispatcher mode.
DW_API_PUBLIC dwStatus dwSensorManager_setDispatcher(dwSensorManagerDispatcher_t dispatchPtr, void *const cookie, dwSensorManagerHandle_t sm)
Sets sensor&#39;s dispatcher function when the feature is turned on.
Holds sets of parameters for sensor creation.
Definition: Sensors.h:93
Defines the structure for a complete radar scan.
Definition: Radar.h:220
NVIDIA DriveWorks API: Rig Configuration
NVIDIA DriveWorks API: Radar
DW_API_PUBLIC dwStatus dwSensorManager_reset(dwSensorManagerHandle_t sm)
Resets all sensors.
uint32_t sensorIndex
The index of the sensor as defined by the order in which it was created.
Definition: SensorManager.h:93
NVIDIA DriveWorks API: Lidar
const dwRadarScan * radFrame
NVIDIA DriveWorks API: Cameras
dwSensorType
Defines the type of sensors that are available in DriveWorks.
Definition: Sensors.h:149
#define DW_SENSORMANGER_MAX_NUM_SENSORS
Definition: SensorManager.h:69
DW_API_PUBLIC dwStatus dwSensorManager_acquireNextEvent(const dwSensorEvent **ev, dwTime_t timeoutMicroSeconds, dwSensorManagerHandle_t sm)
Called by the application to consume the next available sensor event ready for consumption.
DW_API_PUBLIC dwStatus dwSensorManager_start(dwSensorManagerHandle_t sm)
Starts all sensors.
DW_API_PUBLIC dwStatus dwSensorManager_getSensorHandle(dwSensorHandle_t *handle, uint32_t sensorIndex, dwSensorManagerHandle_t sm)
Gets the sensor handle to the specified sensor.
void(* dwSensorManagerDispatcher_t)(const dwSensorEvent *, void *, dwStatus)
uint32_t numEnableSensors
Number of entries in the &#39;enableSensors&#39; list.
Structure for returning data upon any sensor event.
Definition: SensorManager.h:77
DW_API_PUBLIC dwStatus dwSensorManager_addSensor(dwSensorParams params, uint64_t clientData, dwSensorManagerHandle_t sm)
Adds a sensor to the SAL instance.
uint32_t numCamFrames
Data accessor for camera.
struct _dwUltrasonicEnvelope dwUltrasonicEnvelope
Not available as of current release. Will be added in future releases.
Definition: SensorManager.h:74
struct dwSensorManagerObject * dwSensorManagerHandle_t
Definition: SensorManager.h:71
NVIDIA DriveWorks API: Data
DW_API_PUBLIC dwStatus dwSensorManager_getNumSensors(uint32_t *count, dwSensorType type, dwSensorManagerHandle_t sm)
Gets the number of sensors instantiated for a given sensor type.
DW_API_PUBLIC dwStatus dwSensorManager_getSensorClientData(uint64_t *cd, uint32_t sensorIndex, dwSensorManagerHandle_t sm)
Gets sensor&#39;s clientData.
dwTime_t timestamp_us
Timestamp (us)
Definition: SensorManager.h:88
dwTime_t camFramesTimeDiffLimit
Up to how much can timstamps of camera frames accumulated in a single event differ.
DW_API_PUBLIC dwStatus dwSensorManager_stop(dwSensorManagerHandle_t sm)
Stops all sensors.
size_t rawDataSize
DW_API_PUBLIC dwStatus dwSensorManager_setTimeout(dwTime_t timeout, dwSensorManagerHandle_t sm)
Sets the timeout to wait for a new frame across all sensors.
struct dwSensorObject * dwSensorHandle_t
Handle representing a sensor.
Definition: Sensors.h:85
dwStatus
Status definition.
Definition: Status.h:180
NVIDIA DriveWorks API: Sensors
const dwLidarDecodedPacket * lidFrame
const dwDataPacket * dataFrame
uint32_t sensorTypeIndex
Index of the given sensor as defined by the order in which it was created and the type of sensor it i...
Definition: SensorManager.h:85
DW_API_PUBLIC dwStatus dwSensorManager_releaseAcquiredEvent(const dwSensorEvent *ev, dwSensorManagerHandle_t sm)
Releases a previously acquired event back to the pool.
int64_t dwTime_t
Specifies a timestamp unit, in microseconds.
Definition: Types.h:82
Holds a data packet.
Definition: Data.h:60
DW_API_PUBLIC dwStatus dwSensorManager_initialize(dwSensorManagerHandle_t *sm, size_t poolSize, dwSALHandle_t const sal)
Creates and initializes a SensorManager module.
An IMU frame containing sensor readings from the IMU sensor.
Definition: IMU.h:102
dwSensorManagerDataMode
bool accumCamFrames
Whether Dispatcher shall accumulated frames from all cameras into a single event. ...
struct dwSALObject * dwSALHandle_t
Handle representing the Sensor Abstraction Layer interface.
Definition: Sensors.h:82
DW_API_PUBLIC dwStatus dwSensorManager_getSensorTypeIndex(uint32_t *sensorTypeIndex, dwSensorType *type, uint32_t sensorIndex, dwSensorManagerHandle_t sm)
Gets sensor&#39;s relative index and type based upon its sensor index.
const uint8_t * rawData
DW_API_PUBLIC dwStatus dwSensorManager_initializeFromRig(dwSensorManagerHandle_t *sm, dwRigHandle_t rc, size_t poolSize, dwSALHandle_t sal)
Creates and initializes a SensorManager module, adding all sensors in the provided Rig Configuration...
NVIDIA DriveWorks API: GPS
NVIDIA DriveWorks API: CAN
DW_API_PUBLIC dwStatus dwSensorManager_getSensorIndex(uint32_t *sensorIndex, dwSensorType type, uint32_t sensorTypeIndex, dwSensorManagerHandle_t sm)
Gets sensor&#39;s index.
dwIMUFrame imuFrame
#define DW_SENSORMANGER_MAX_CAMERAS
Definition: SensorManager.h:67
dwGPSFrame gpsFrame
Data accessor for all other sensors.
DW_API_PUBLIC dwStatus dwSensorManager_addCameraSensor(const char8_t *groupName, uint32_t siblingIndex, dwSensorParams params, uint64_t clientData, dwSensorManagerHandle_t sm)
Adds a camera sensor to the SAL instance.
struct dwCameraFrame * dwCameraFrameHandle_t
Handle to captured frame.
Definition: Camera.h:70
char char8_t
Definition: Types.h:72
DW_API_PUBLIC dwStatus dwSensorManager_initializeFromRigWithParams(dwSensorManagerHandle_t *sm, dwRigHandle_t const rc, const dwSensorManagerParams *params, size_t poolSize, dwSALHandle_t const sal)
Creates and initializes a SensorManager module, adding enabled sensors in the provided Rig Configurat...
dwTime_t timeout
Timeout value to be used in dispatcher mode for virtual files.
bool singleVirtualCameraGroup
Whether to associate virtual cameras to individual &#39;camera-group&#39;s (default), or to a single &#39;camera-...
DW_API_PUBLIC dwStatus dwSensorManager_release(dwSensorManagerHandle_t sm)
Releases the SensorManager module.
dwCANMessage canFrame
const dwUltrasonicEnvelope * ultrasonicFrame
#define DW_API_PUBLIC
Definition: Exports.h:54
NVIDIA DriveWorks API: IMU
dwSensorType type
Type of sensor providing data for this event.
Definition: SensorManager.h:80
Holds a CAN package.
Definition: CAN.h:112
A GPS packet containing localization information.
Definition: GPS.h:78
struct dwRigObject * dwRigHandle_t
Handle representing the Rig interface.
Definition: Rig.h:70