Usage considerations
- Allowed context for the API call
- Interrupt handler: No
- Signal handler: No
- Thread-safe: No
- Re-entrant: Yes
- Async/Sync: Sync
- Required privileges: Yes, with the following conditions:
- Grants: nonroot, allow
- Abilities: public_channel
- Application needs to have access to the SGIDs that SIPL depends on as mentioned in the NVIDIA DRIVE OS Safety Developer Guide
- API group
- Init: Yes
- Runtime: Yes
- De-Init: Yes
Program elements related to DevBlkCDIDeviceDriver, which defines a device driver. The core DevBlkCDI calls the driver when the client calls the related public DevBlkCDI function.
Before the client can create an DevBlkCDIDevice object (a device), it must provide a device driver. The DevBlkCDIDeviceDriver object contains the following data fields and function pointers.
- Data Fields
- deviceName The name of the device. This is a null-terminated string.
- regLength Target device offset length in bytes. Valid Range: [1, 2].
- dataLength Target device data length in bytes. Valid Range: [1, 2].
- Function Pointers
- DriverCreate (mandatory). Invoked when the client calls DevBlkCDIDeviceCreate().
- DriverDestroy (mandatory). Invoked when the client calls DevBlkCDIDeviceDestroy().
- GetModuleConfig (optional). Invoked when the client calls DevBlkCDIGetModuleConfig(). Not supported for safety use cases.
- ParseTopEmbDataInfo (optional). Invoked when the client calls DevBlkCDIParseTopEmbDataInfo().
- ParseTopEmbDataInfo (optional). Invoked when the client calls DevBlkCDIParseTopEmbDataInfo().
- SetSensorControls (optional). Invoked when the client calls DevBlkCDISetSensorControls().
- GetSensorAttributes (optional). Invoked when the client calls DevBlkCDIGetSensorAttributes().
- SetSensorCharMode (optional). Invoked when the client calls DevBlkCDISetSensorCharMode(). Not supported for safety use cases.
- ReadRegister (optional). Not supported for safety use cases.
- WriteRegister (optional). Not supported for safety use cases.
Here is a sample device driver implementation. The source file defines the driver by creating an DevBlkCDIDeviceDriver struct and setting its function pointers. The header file provides a function that retrieves a pointer to the driver struct.
- Header File
Source File
#include "cdi_sample_device.h"
DriverCreate(
void *clientContext)
{
if(!handle)
Can be used to maintain local device context
or can be set to NULL.
}
.DriverCreate = DriverCreate
};
GetSAMPLEDEVICEDriver(void)
{
Return device driver descriptor structure
return &deviceDriver;
}