# C++

**Detailed Description**

This section contains C++ APIs related to Cellular-V2X operation. Applications need to have “radio” Linux group permissions to be able to operate successfully with underlying services.

- *group* Telematics\_cv2x\_cpp

    - - 

Typedefs

- using RxMetaDataValidity = uint32\_t

    - 

- using setVerificationLoadCallback = std::function&lt;void(telux::common::[ErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga84acdb74b7d34616b1ca497c7369810d.html#_CPPv4N5telux6common9ErrorCodeE) error)&gt;

    - This function is called as a response to [ICv2xThrottleManager::setVerificationLoad](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00324_1afb3417fce17fc9fb64a7af138cff6da3)

- Param error:

    - **[in]** - SUCCESS if verification load was set successfully

- SUCCESS
- GENERIC\_FAILURE

- using CongestionControlMap = std::map&lt;uint64\_t, CongestionControlData&gt;

    - uin64\_t refers to the a vehicle’s identity field provided in messages

Enums

- enum TrafficCategory

    - Defines CV2X Traffic Types.

*Values:*

- enumerator SAFETY\_TYPE

    - Safety message traffic category

- enumerator NON\_SAFETY\_TYPE

    - Non-safety message traffic category

- enum Cv2xStatusType

    - Defines possible values for CV2X radio RX/TX status.

1. If Rx is in inactive state, Tx should also be in inactive state.
2. If Rx is in active state, Tx should be in active(normal case) or suspended state(sensing or tunnel mode).
3. If Rx is in suspended state, Tx should be in suspended state. Used in [Cv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00306.html#a00306)

*Values:*

- enumerator INACTIVE

    - RX/TX is inactive

- enumerator ACTIVE

    - RX/TX is active

- enumerator SUSPENDED

    - RX/TX is suspended

- enumerator UNKNOWN

    - RX/TX status unknown

- enum Cv2xCauseType

    - Defines possible values for cause of CV2X radio failure. The cause code is only associated with cv2x suspend/inactive status, if cv2x is active, the cause code has no meaning. Used in [Cv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00306.html#a00306)

*Values:*

- enumerator TIMING

    - CV2X is suspended due to the outage of timing reference.

- enumerator CONFIG

    - CV2X is inactive due to v2x.xml is missing, invalid,
    Copy to clipboard

 or expired.

- enumerator UE\_MODE

    - CV2X is inactive due to CV2X mode is not started.

- enumerator GEOPOLYGON

    - CV2X is inactive due to UE enters a geo-polygon that does not support cv2x.

- enumerator THERMAL

    - CV2X is suspended when the device’s temperature is high.

- enumerator THERMAL\_ECALL

    - CV2X is suspended when the device’s temperature is high and emergency call is ongoing.

- enumerator GEOPOLYGON\_SWITCH

    - CV2X is suspended when UE switches to a new geopolygon that also supports CV2X and UE is already in CV2X active status, CV2X status will change to active after the update is done.

- enumerator SENSING

    - CV2X Tx is suspended when GNSS signal recovers or CV2X mode
    Copy to clipboard

 just starts. UE needs sensing for 1 second before Tx can begin, Tx status will change to active after sensing is done.

- enumerator LPM

    - CV2X is inactive due to unexpected operating mode.

- enumerator DISABLED

    - CV2X is inactive due to CV2X is disabled in the EFS.

- enumerator NO\_GNSS

    - CV2X is inactive due to GNSS signal is not available when
    Copy to clipboard

 starting CV2X.

- enumerator INVALID\_LICENSE

    - CV2X is inactive due to invalid license.

- enumerator NOT\_READY

    - CV2X is inactive due to low layer is not ready to start CV2X.

- enumerator NTN

    - CV2X is suspended due to NTN is in progress.

- enumerator NO\_DATA\_CALL

    - CV2X is inactive due to no cv2x data call.

- enumerator UNKNOWN

    - Invalid cause type only used internally.

- enum SlssSyncPattern

    - Defines possible values for SLSS sync pattern. Used in [SyncRefUeInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00312.html#a00312)

*Values:*

- enumerator OFFSET\_IND\_1

    - UE transmits SLSS in subframes indicated by the syncOffsetIndicator1 specified in V2X configuration.

- enumerator OFFSET\_IND\_2

    - UE transmits SLSS in subframes indicated by the syncOffsetIndicator2 specified in V2X configuration.

- enumerator OFFSET\_IND\_3

    - UE transmits SLSS in subframes indicated by the syncOffsetIndicator3 specified in V2X configuration.

- enumerator ODD\_RESERVED

    - UE transmits SLSS in odd-numbered reserved subframes.

- enumerator EVEN\_RESERVED

    - UE transmits SLSS in even-numbered reserved subframes.

- enumerator UNKNOWN

    - Invalid cause type only used internally.

- enum TrafficIpType

    - Defines CV2X traffic type in terms of IP or NON-IP.

*Values:*

- enumerator TRAFFIC\_IP

    - IP message traffic

- enumerator TRAFFIC\_NON\_IP

    - NON-IP message traffic

- enum RadioConcurrencyMode

    - Defines CV2X modes of concurrency with cellular WWAN.

Used in [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00297.html#a00297)

*Values:*

- enumerator WWAN\_NONCONCURRENT

    - No simultaneous WWAN + CV2X on this interface

- enumerator WWAN\_CONCURRENT

    - Interface supports requests for concurrent WWAN + CV2X connections.

- enum Cv2xEvent

    - Defines CV2X status change events. The state can change in response to the loss of timing precision or a geofencing change.

Used in [ICv2xRadioListener::onStatusChanged](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00305_1a41d4be928da4391efc1b33e7449941bb)

*Values:*

- enumerator CV2X\_INACTIVE

    - 

- enumerator CV2X\_ACTIVE

    - 

- enumerator TX\_SUSPENDED

    - 

- enumerator TXRX\_SUSPENDED

    -

- enum Priority

    - Range of supported priority levels, where a lower number means a higher priority. For example, 8 is the current 3GPP standard.

Used in [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00297.html#a00297) and [SpsFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00296.html#a00296)

*Values:*

- enumerator MOST\_URGENT

    - 

- enumerator PRIORITY\_1

    - 

- enumerator PRIORITY\_2

    - 

- enumerator PRIORITY\_3

    - 

- enumerator PRIORITY\_4

    - 

- enumerator PRIORITY\_5

    - 

- enumerator PRIORITY\_6

    - 

- enumerator PRIORITY\_BACKGROUND

    - 

- enumerator PRIORITY\_UNKNOWN

    -

- enum Periodicity

    - Range of supported periodicities in milliseconds.

Used in [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00297.html#a00297) and [SpsFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00296.html#a00296)

Deprecated: enum class not going to be supported in future releases. Clients should stop using this. Once a class has been marked as Deprecated, the class could be removed in future releases.

*Values:*

- enumerator PERIODICITY\_10MS

    - 

- enumerator PERIODICITY\_20MS

    - 

- enumerator PERIODICITY\_50MS

    - 

- enumerator PERIODICITY\_100MS

    - 

- enumerator PERIODICITY\_UNKNOWN

    -

- enum ConfigSourceType

    - V2X configuration source types listed in ascending order of priority. The system always uses the V2X configuration with the highest priority if multiple V2X configuration sources exist.

Used in [ConfigEventInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00294.html#a00294)

*Values:*

- enumerator UNKNOWN

    - V2X config file source is unknown

- enumerator PRECONFIG

    - V2X config file source is preconfig

- enumerator SIM\_CARD

    - V2X config file source is SIM card

- enumerator OMA\_DM

    - V2X config file source is OMA-DM

- enum ConfigEvent

    - Defines possible values for the events relevant to CV2X config file.

Used in [ConfigEventInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00294.html#a00294)

*Values:*

- enumerator CHANGED

    - V2X config file is changed

- enumerator EXPIRED

    - V2X config file is expired

- enum RFTxStatus

    - Fault detection for Tx chain that including PA and front end.

Used in [RFTxInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00318.html#a00318)

*Values:*

- enumerator INACTIVE

    - The Tx chain is not working.

- enumerator OPERATIONAL

    - The Tx chain is operational.

- enumerator FAULT

    - Fault detected on the Tx chain.

- enum SegmentType

    - Defines possible values for the segment type of a transport block.

Used in [TxStatusReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00319.html#a00319)

*Values:*

- enumerator FIRST

    - V2X packet is segmented, it’s the first transport block.

- enumerator LAST

    - V2X packet is segmented, it’s the last transport block.

- enumerator MIDDLE

    - V2X packet is segmented, it’s a transport block between first and last.

- enumerator ONLY\_ONE

    - V2X packet is not segmented, it’s the only one transport block.

- enum TxType

    - Defines new Tx or re-Tx type relevant to a transport block.

Used in [TxStatusReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00319.html#a00319)

*Values:*

- enumerator NEW\_TX

    - New Tx of the V2X transport block.

- enumerator RE\_TX

    - Re-Tx of the V2X transport block.

- enumerator SLSS\_TX

    - Tx of SLSS.

- enum RxMetaDataValidityType

    - Specify set of RX Meta data that contribute to received packet’s meta data report. Used in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

*Values:*

- enumerator RX\_SUBFRAME\_NUMBER

    - Bit mask to specify whether sfn is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320) Bit mask to specify whether subChannelIndex is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_SUBCHANNEL\_INDEX

    - Bit mask to specify whether subChannelNum is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_SUBCHANNEL\_NUMBER

    - Bit mask to specify whether rssi0 is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_PRX\_RSSI

    - Bit mask to specify whether rssi1 is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_DRX\_RSSI

    - Bit mask to specify whether l2DestinationId is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_L2\_DEST\_ID

    - Bit mask to specify whether sciFormat1Info is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_SCI\_FORMAT1

    - Bit mask to specify whether delayEstimation is valid in [RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320)

- enumerator RX\_DELAY\_ESTIMATION

    -

- enum CCErrorCode

    - *Values:*

- enumerator SUCCESS

    - No error

- enumerator GENERIC\_FAILURE

    - Generic Failure

- enumerator NO\_PERMISSION

    - No permission

- enum CongestionControlType

    - Type of congestion control

*Values:*

- enumerator SAE

    - Default type of congestion control. Based on J3161/1 and J2945/1.

Functions

- void printPosition(Position &position)

    - Print [Position](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00366.html#a00366) items

- Parameters:

    - **position** – **[in]** - position struct reference

- void printChannelData(ChannelData &channelData)

    - Print [ChannelData](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00370.html#a00370) items

- Parameters:

    - **channelData** – **[in]** - channel data struct reference

- void printTrackingErrorData(TrackingErrorData &teData)

    - Print [TrackingErrorData](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00372.html#a00372) items

- Parameters:

    - **teData** – **[in]** - tracking error input struct reference

- void printSPSEnhanceConfig(SPSEnhanceConfig &spsEnhanceConfig)

    - Print [SPSEnhanceConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00375.html#a00375) items

- Parameters:

    - **spsEnhanceConfig** – **[in]** - sps enhancements config struct reference

- void printDensityConfig(DensityConfig &densConfig)

    - Print [DensityConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00376.html#a00376) items

- Parameters:

    - **densConfig** – **[in]** - density config struct reference

- void printPERConfig(PERConfig &perConfig)

    - Print [PERConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00377.html#a00377) items

- Parameters:

    - **perConfig** – **[in]** - packet error rate config struct reference

- void printCQIConfig(CQIConfig &cqiConfig)

    - Print [CQIConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00378.html#a00378)

- Parameters:

    - **cqiConfig** – **[in]** - channel quality indication config struct reference

- void printCBPConfig(CBPConfig &cbpConfig)

    - Print [CBPConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00379.html#a00379) items

- Parameters:

    - **cbpConfig** – **[in]** - channel busy percentage config struct reference

- void printTEConfig(TEConfig &teConfig)

    - Print [TEConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00380.html#a00380) items

- Parameters:

    - **teConfig** – **[in]** - tracking error config struct reference

- void printITTConfig(ITTConfig &ittConfig)

    - Print [ITTConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00381.html#a00381) items

- Parameters:

    - **ittConfig** – **[in]** - inter transmit time config struct reference

- void printPowerConfig(PowerConfig &powerConfig)

    - Print [PowerConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00382.html#a00382) items

- Parameters:

    - **powerConfig** – **[in]** - power config struct reference

Variables

- constexpr uint8\_t MAX\_ANTENNAS\_SUPPORTED = 2u

    - Defines Maximum number of antennas that is supported.

Used in [TxStatusReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00319.html#a00319)

- class ICv2xConfigListener : public virtual telux::common::[ISDKListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00046.html#_CPPv4N5telux6common12ISDKListenerE)

    - Listeners for [ICv2xConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00292) must implement this interface.

Public Functions

- inline virtual void onConfigChanged(const [ConfigEventInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x15ConfigEventInfoE) &info)

    - Called when CV2X configuration has changed in the below scenarios:

1. The specified configuration source has expired.
2. The active configuration source has changed to the specified configuration source type due to the expiration of the configuration source being used.
3. The specified configuration source has been updated.

- Parameters:

    - **info** – **[in]** - Information of CV2X configuration event.

- inline virtual ~ICv2xConfigListener()

    - Destructor for [ICv2xConfigListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00293)

- class ICv2xConfig

    - Cv2xConfig provide operations to update or request cv2x configuration.

Public Functions

- inline virtual ~ICv2xConfig()

    - 

- virtual bool isReady() = 0

    - Checks if the Cv2x Config Manager is ready.

Deprecated use getServiceStatus instead

- Returns:

    - True if Cv2x Config is ready for service, otherwise returns false.

- virtual std::future&lt;bool&gt; onReady() = 0

    - Wait for Cv2x Config to be ready.

Deprecated the readiness can be notified via the callback passed to [Cv2xFactory::getCv2xConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00295_1ad2381229cd304c228d8d3bd775986308).

- Returns:

    - A future that caller can wait on to be notified when Cv2x Radio Manager is ready.

- virtual telux::common::[ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga7063b4a1071b6581022e30b730684e4d.html#_CPPv4N5telux6common13ServiceStatusE) getServiceStatus() = 0

    - This status indicates whether the Cv2xConfig is in a usable state.

- Returns:

    - SERVICE\_AVAILABLE - If cv2x config is ready for service. SERVICE\_UNAVAILABLE - If cv2x config is temporarily unavailable. SERVICE\_FAILED - If cv2x config encountered an irrecoverable failure.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) updateConfiguration(const std::string &configFilePath, telux::common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Updates CV2X configuration. Requires CV2X TX/RX radio status be Inactive. If CV2X radio status is Active or Suspended, call [ICv2xRadioManager::stopCv2x](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1a62a53154c8ac46223d9e422380b2645c) before trying to update configuration. The functionality of V2X configuration expiration is supported by adding an expiration leaf to the V2X configuration file passed in. When the active configuration expires, the system fallbacks to a lower priority V2X configuration [ConfigSourceType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga24e94b0d14844358d76294120207489f.html#a00015_1ga24e94b0d14844358d76294120207489f) if existed. If the V2X stauts is active, it changes to suspended when the active V2X configuration expires and then changes to active after the system fallbacks to a lower priority V2X configuration or changes to inactive if no V2X configuration is available.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **configFilePath** – **[in]** - Path to config file. This is the fully qualified file path including the name of the file.
- **cb** – **[in]** - Callback that is invoked when the send is complete. This may be null.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) retrieveConfiguration(const std::string &configFilePath, telux::common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Retrieve active CV2X configuration. The calling application should have write access to the path specified by configFilePath. And if the v2x configuration retrieval request succeed, the file specified by configFilePath will be created and filled with the configuration contents. Otherwise, no file will be created.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **configFilePath** – **[in]** - Path to config file. This is the fully qualified file path including the name of the file.
- **cb** – **[in]** - Callback that is invoked when the configuration retrival is complete. This may be null.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) registerListener(std::weak\_ptr&lt;[ICv2xConfigListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00293.html#_CPPv4N5telux4cv2x19ICv2xConfigListenerE)&gt; listener) = 0

    - Registers a listener for this [ICv2xConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00292).

- Parameters:

    - **listener** – **[in]** - Listener that implements [ICv2xConfigListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00293) interface.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) deregisterListener(std::weak\_ptr&lt;[ICv2xConfigListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00293.html#_CPPv4N5telux4cv2x19ICv2xConfigListenerE)&gt; listener) = 0

    - Deregisters a listener for this [ICv2xConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00292).

- Parameters:

    - **listener** – **[in]** - Previously registered [ICv2xConfigListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00293) that is to be deregistered.

- class Cv2xFactory

    - [Cv2xFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00295) is the factory that creates the Cv2x Radio.

Public Functions

- virtual std::shared\_ptr&lt;[ICv2xRadioManager](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00311.html#_CPPv4N5telux4cv2x17ICv2xRadioManagerE)&gt; getCv2xRadioManager(telux::common::[InitResponseCb](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1ab92f90010203f914a62cec6bd7af0a1a.html#_CPPv4N5telux6common14InitResponseCbE) cb = nullptr)

    - Get Cv2xRadioManager instance.

- Parameters:

    - **cb** – **[in]** - Optional callback to get Cv2xRadioManager initialization status

- Returns:

    - shared pointer to Cv2x Radio Manager upon success. nullptr otherwise.

- virtual std::shared\_ptr&lt;[ICv2xConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00292.html#_CPPv4N5telux4cv2x11ICv2xConfigE)&gt; getCv2xConfig(telux::common::[InitResponseCb](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1ab92f90010203f914a62cec6bd7af0a1a.html#_CPPv4N5telux6common14InitResponseCbE) cb = nullptr)

    - Get Cv2xConfig instance.

- Parameters:

    - **cb** – **[in]** - Optional callback to get Cv2xConfig initialization status

- Returns:

    - shared pointer to Cv2x Config upon success. nullptr otherwise.

- virtual std::shared\_ptr&lt;[ICv2xThrottleManager](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00324.html#_CPPv4N5telux4cv2x20ICv2xThrottleManagerE)&gt; getCv2xThrottleManager(telux::common::[InitResponseCb](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1ab92f90010203f914a62cec6bd7af0a1a.html#_CPPv4N5telux6common14InitResponseCbE) cb = nullptr)

    - Get Cv2xThrottleManager instance.

- Returns:

    - shared pointer to Cv2x ThrottleManager upon success. nullptr otherwise.

Public Static Functions

- static [Cv2xFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00295.html#_CPPv4N5telux4cv2x11Cv2xFactoryE) &getInstance()

    - Get [Cv2xFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00295) instance

- Returns:

    - Reference to [Cv2xFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00295) singleton.

- class ICv2xRadio

    - This is class encapsulates a Cv2xRadio interface.

Returned from [ICv2xRadioManager::getCv2xRadio](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1abf7ce83eb5ba0da6dab30031f822dc26)

Public Functions

- virtual bool isInitialized() const = 0

    - Returns true if the radio interface has completed initialization.

- Returns:

    - True if initialized. False otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) registerListener(std::weak\_ptr&lt;[ICv2xRadioListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00305.html#_CPPv4N5telux4cv2x18ICv2xRadioListenerE)&gt; listener) = 0

    - Registers a listener for this Cv2xRadio.

- Parameters:

    - **listener** – **[in]** - Listener that implements Cv2xRadioListener interface.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) deregisterListener(std::weak\_ptr&lt;[ICv2xRadioListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00305.html#_CPPv4N5telux4cv2x18ICv2xRadioListenerE)&gt; listener) = 0

    - Deregisters a listener from this Cv2xRadio.

- Parameters:

    - **listener** – **[in]** - Previously registered Cv2xRadioListener that is to be deregistered.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) createRxSubscription([TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) ipType, uint16\_t port, [CreateRxSubscriptionCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a75074de975b76cdd83b3915258f38106.html#_CPPv4N5telux4cv2x28CreateRxSubscriptionCallbackE) cb, std::shared\_ptr&lt;std::vector&lt;uint32\_t&gt;&gt; idList = nullptr) = 0

    - Creates and initializes a new Rx subscription which will be returned in the user-supplied callback.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- **Dependencies The interface must be pre-initialized with init().**
    - 

- Parameters:

    - - **ipType** – **[in]** - IP traffic type (IP or NON-IP)
- **port** – **[in]** - Rx port number
- **cb** – **[in]** - Callback function that is invoked when socket creation is complete.
- **idList** – **[in]** - Service ID list to subscribe, optional parameter using nullptr by default. Subscribe wildcard if this parameter is set to nullptr.

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga7063b4a1071b6581022e30b730684e4d.html#_CPPv4N5telux6common13ServiceStatusE) getServiceStatus() = 0

    - This status indicates whether the Cv2xRadio is in a usable state.

- Returns:

    - SERVICE\_AVAILABLE - If cv2x radio is ready for service. SERVICE\_UNAVAILABLE - If cv2x radio is temporarily unavailable. SERVICE\_FAILED - If cv2x radio encountered an irrecoverable failure.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) enableRxMetaDataReport([TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) ipType, bool enable, std::shared\_ptr&lt;std::vector&lt;std::uint32\_t&gt;&gt; idList, telux::common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Enable or disable (depends on the parameter “bool enable”) the received packets’ meta data report for the service IDs provided.

The meta data consist of RF RSSI (received signal strength indicator) status, 32-bit SCI Format 1 (3GPP TS 36.213, section 14.1), packet delay estimation, L2 destination ID, and the resource blocks used for the packet’s transmission: subframe, subchannel index.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_INFO permission to successfully invoke this API.

- **Meta data report for IP packets is not supported yet, it will return NOSUPPORTED.**
    - 

- Parameters:

    - - **ipType** – **[in]** - IP traffic type (IP or NON-IP)
- **enable** – **[in]** - enable the rx meta data if set to true, otherwise disable
- **idList** – **[in]** - Service ID list of which the received packets’ report are desired
- **cb** – **[in]** - Callback that is invoked when meta data is enabled or disabled.

- Returns:

    - SUCCESS if no error occurred

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) createTxSpsFlow([TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) ipType, uint32\_t serviceId, const [SpsFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x11SpsFlowInfoE) &spsInfo, uint16\_t spsSrcPort, bool eventSrcPortValid, uint16\_t eventSrcPort, [CreateTxSpsFlowCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a7cd7564d8c1780a131696c23b637b712.html#_CPPv4N5telux4cv2x23CreateTxSpsFlowCallbackE) cb) = 0

    - Creates a Tx SPS flow with the specified IP type, serviceId, and other parameters specified in reservation. Additionally, an option event flow will be created with the same IP type and serviceId. A Tx socket will be created and initialized for the SPS flow. A Tx socket will be created and initialized for the event flow if the optional event flow is specified.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- **This caller is expected to identify two unused local port numbers**
    - to use for binding: one for the event-driven flow and one for the SPS flow.

- Parameters:

    - - **ipType** – **[in]** - IP traffic type (IP or NON-IP)
- **serviceId** – **[in]** - ID used for transmissions that will be mapped to an L2 destination address. Variable length 4-byte PSID or ITS\_AID, or another service ID.
- **spsInfo** – **[in]** - SPS reservation parameters.
- **spsSrcPort** – **[in]** - Requested source port number for the bandwidth reserved SPS transmissions.
- **eventSrcPortValid** – **[in]** - True if an optional event flow is desired. If this field is left false, the event flow will not be created.
- **eventSrcPort** – **[in]** - Requested source port number for the optional event flow.
- **cb** – **[in]** - Callback function that is invoked when socket creation is complete. This must not be null.

- Returns:

    - SUCCESS upon success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) createTxEventFlow([TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) ipType, uint32\_t serviceId, uint16\_t eventSrcPort, [CreateTxEventFlowCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1ab20677cfbb310c51101b97a59190ba69.html#_CPPv4N5telux4cv2x25CreateTxEventFlowCallbackE) cb) = 0

    - Creates an event flow. An associated Tx socket will be created and initialized.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- **Detailed description This function is used only for TX when no periodicity is**
    - available for the application type. If your transmit data periodicity is known, use [createTxSpsFlow()](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a71117716539a866af3564044b73f7030) instead.

- **These even-driven sockets pay attention to the QoS parameters in**
    - the IP socket.

- Parameters:

    - - **ipType** – **[in]** - IP traffic type (IP or NON-IP)
- **serviceId** – **[in]** - ID used for transmissions that will be mapped to an L2 destination address. Variable length 4-byte PSID or ITS\_AID, or another service ID.
- **eventSrcPort** – **[in]** - Local port number to which the socket is bound. Used for transmissions of this ID.
- **cb** – **[in]** - Callback function that is invoked when socket creation is complete. This must not be null.

- Returns:

    - SUCCESS upon success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) createTxEventFlow([TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) ipType, uint32\_t serviceId, const [EventFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x13EventFlowInfoE) &flowInfo, uint16\_t eventSrcPort, [CreateTxEventFlowCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1ab20677cfbb310c51101b97a59190ba69.html#_CPPv4N5telux4cv2x25CreateTxEventFlowCallbackE) cb) = 0

    - Creates an event flow. An associated Tx socket will be created and initialized.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- **Detailed description This function is used only for TX when no periodicity is**
    - available for the application type. If your transmit data periodicity is known, use [createTxSpsFlow()](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a71117716539a866af3564044b73f7030) instead.

- **These even-driven sockets pay attention to the QoS parameters in**
    - the IP socket.

- Parameters:

    - - **ipType** – **[in]** - IP traffic type (IP or NON-IP)
- **serviceId** – **[in]** - ID used for transmissions that will be mapped to an L2 destination address. Variable length 4-byte PSID or ITS\_AID, or another service ID.
- **flowInfo** – **[in]** - Flow configuration parameters
- **eventSrcPort** – **[in]** - Local port number to which the socket is bound. Used for transmissions of this ID.
- **cb** – **[in]** - Callback function that is invoked when socket creation is complete. This must not be null.

- Returns:

    - SUCCESS upon success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) closeRxSubscription(std::shared\_ptr&lt;[ICv2xRxSubscription](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00322.html#_CPPv4N5telux4cv2x19ICv2xRxSubscriptionE)&gt; rxSub, [CloseRxSubscriptionCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1aacb5f496bff106f3ad4dafb1b6efe432.html#_CPPv4N5telux4cv2x27CloseRxSubscriptionCallbackE) cb) = 0

    - Closes the RxSubscription and frees resources (such as the Rx socket) associated with it.

- Parameters:

    - - **rxSub** – **[in]** - RxSubscription to close
- **cb** – **[in]** - Callback that is invoked when socket close is complete. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) closeTxFlow(std::shared\_ptr&lt;[ICv2xTxFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00325.html#_CPPv4N5telux4cv2x11ICv2xTxFlowE)&gt; txFlow, [CloseTxFlowCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a967584bf86b6e0b8d99f5adfba612206.html#_CPPv4N5telux4cv2x19CloseTxFlowCallbackE) cb) = 0

    - Closes the TxFlow and frees resources associated with it (such as reserved SPS bandwidth contracts and sockets). This function works on both SPS and event flows.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- Parameters:

    - - **txFlow** – **[in]** - Tx (SPS or event) flow to close.
- **cb** – **[in]** - Callback that is invoked when Tx flow close is complete. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) changeSpsFlowInfo(std::shared\_ptr&lt;[ICv2xTxFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00325.html#_CPPv4N5telux4cv2x11ICv2xTxFlowE)&gt; txFlow, const [SpsFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x11SpsFlowInfoE) &spsInfo, [ChangeSpsFlowInfoCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1ae79a9702ed5eb904cbf7c58a8bf7459c.html#_CPPv4N5telux4cv2x25ChangeSpsFlowInfoCallbackE) cb) = 0

    - Request to change TX SPS Flow reservation parameters.

- Parameters:

    - - **txFlow** – **[in]** - Tx SPS flow
- **spsInfo** – **[in]** - Desired SPS reservation parameters
- **cb** – **[in]** - Callback that is invoked upon reservation change. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) requestSpsFlowInfo(std::shared\_ptr&lt;[ICv2xTxFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00325.html#_CPPv4N5telux4cv2x11ICv2xTxFlowE)&gt; txFlow, [RequestSpsFlowInfoCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a4a966d41031606aeda43a3566f7c27ad.html#_CPPv4N5telux4cv2x26RequestSpsFlowInfoCallbackE) cb) = 0

    - Request SPS flow info.

- Parameters:

    - - **txFlow** – **[in]** - Tx SPS flow
- **cb** – **[in]** - Callback that will be invoked and returns the SPS info. Must not be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) changeEventFlowInfo(std::shared\_ptr&lt;[ICv2xTxFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00325.html#_CPPv4N5telux4cv2x11ICv2xTxFlowE)&gt; txFlow, const [EventFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x13EventFlowInfoE) &flowInfo, [ChangeEventFlowInfoCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a994b92f4916fc9ed35f4ebcd49d087bf.html#_CPPv4N5telux4cv2x27ChangeEventFlowInfoCallbackE) cb) = 0

    - Request to change TX Event Flow reservation parameters.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- Parameters:

    - - **txFlow** – **[in]** - Tx Event flow
- **flowInfo** – **[in]** - Desired Event flow parameters
- **cb** – **[in]** - Callback that is invoked upon parameter change. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) requestCapabilities([RequestCapabilitiesCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1ac67d3881e73dc209de250f5f1230611b.html#_CPPv4N5telux4cv2x27RequestCapabilitiesCallbackE) cb) = 0

    - Request modem Cv2x capability information.

- Parameters:

    - **cb** – **[in]** - Callback that will be invoked and returns the capability info. Must not be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) requestDataSessionSettings([RequestDataSessionSettingsCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a05a5ac78e79368080d4f4ff67acfb08b.html#_CPPv4N5telux4cv2x34RequestDataSessionSettingsCallbackE) cb) = 0

    - Request data session settings currently in use.

- Parameters:

    - **cb** – **[in]** - Callback that will be invoked and returns the data session settings. Must not be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) updateSrcL2Info([UpdateSrcL2InfoCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a4345f92d3ffd3ed442ddbaa5a8012339.html#_CPPv4N5telux4cv2x23UpdateSrcL2InfoCallbackE) cb) = 0

    - Requests modem to change L2 info.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - **cb** – **[in]** - Callback that will be invoked and returns status. Must not be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) updateTrustedUEList(const [TrustedUEInfoList](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x17TrustedUEInfoListE) &infoList, [UpdateTrustedUEListCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1ab4b343cc4b9c6ae64919369bbf77d361.html#_CPPv4N5telux4cv2x27UpdateTrustedUEListCallbackE) cb) = 0

    - Send request to modem to update the list of malicious UE source IDs and trusted UE source IDs with corresponding confidence information.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to invoke this API successf

- Parameters:

    - - **infoList** – **[in]** - Trusted and malicious UE information list
- **cb** – **[in]** - Callback that will be invoked and returns status. Must not be null.

- Returns:

    - SUCCESS if no error occurred.

- inline virtual ~ICv2xRadio()

    - Destructor for [ICv2xRadio](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299)

- virtual std::string getIfaceNameFromIpType([TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) ipType) = 0

    - Get interface name based on ipType.

- Parameters:

    - **ipType** – - IP traffic type (IP or NON-IP)

- Returns:

    - Interface name as a string

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) createCv2xTcpSocket(const [EventFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x13EventFlowInfoE) &eventInfo, const [SocketInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x10SocketInfoE) &sockInfo, [CreateTcpSocketCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a15bd9f2f1c32a9520a61760ee8da855d.html#_CPPv4N5telux4cv2x23CreateTcpSocketCallbackE) cb) = 0

    - Creates a CV2X TCP socket with specified event flow information and TCP socket information. The TCP socket will be created and bound to the IPv6 address of local IP interface with specifed source port. Additionally, this API also registers a Tx event flow and subscribes Rx with specified service ID. If the created socket is expected to work as TCP client mode, the caller must connect the created socket to a destination using connect() and then use the socket for send() and recv() on successful connection. If the created socket is expected to work as TCP server mode, the caller must mark this socket as a listening socket using listen() and accept connections received from this listening socket using accept(), and then use the accepted sockets returned from accept() for send() or recv().

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- **The caller is expected to identify an unused local port number as the source**
    - port number in structure [SocketInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00302.html#a00302) to use for binding.

- **The caller must release the created socket and associated resources with**
    - [closeCv2xTcpSocket](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a7e079b571b5bb04ba33158d6405f2d78). Additionally, if the created socket is marked as a listening socket, the caller must close all the accepted sockets returned by accept() using close() first, and then release the listening socket and associated resources by calling [closeCv2xTcpSocket](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a7e079b571b5bb04ba33158d6405f2d78).

- Parameters:

    - - **eventInfo** – **[in]** - Information for the Event flow.
- **sockInfo** – **[in]** - Information for the TCP socket.
- **cb** – **[in]** - Callback function that is invoked when socket creation is complete. This must not be null.

- Returns:

    - SUCCESS upon success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) closeCv2xTcpSocket(std::shared\_ptr&lt;[ICv2xTxRxSocket](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00326.html#_CPPv4N5telux4cv2x15ICv2xTxRxSocketE)&gt; sock, [CloseTcpSocketCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a04888ba4db8533a8d5a6a029aa5844f5.html#_CPPv4N5telux4cv2x22CloseTcpSocketCallbackE) cb) = 0

    - Closes the CV2X TCP socket and frees resources associated with it (such as registered event Tx flow and subscribed Rx service ID and created TCP socket).

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_FLOW\_OPS permission to successfully invoke this API.

- Parameters:

    - - **sock** – **[in]** - CV2X TCP socket to close.
- **cb** – **[in]** - Callback that is invoked when CV2X TCP socket close is complete. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) registerTxStatusReportListener(uint16\_t port, std::shared\_ptr&lt;[ICv2xTxStatusReportListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00327.html#_CPPv4N5telux4cv2x27ICv2xTxStatusReportListenerE)&gt; listener, telux::common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Registers a listener for Tx status report.

- Parameters:

    - - **port** – **[in]** - Set this value to the port number of registered Tx Flow if user wants to receive Tx status report associated with its own Tx flow. If user wants to receive Tx status report associated with all Tx flows in system, set this value to 0.
- **listener** – **[in]** - Listener that implements [ICv2xTxStatusReportListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00327) interface.
- **cb** – **[in]** - Callback that is invoked when the registration of CV2X Tx status report is complete.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) deregisterTxStatusReportListener(uint16\_t port, telux::common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Deregisters a listener for Tx status report.

- Parameters:

    - - **port** – **[in]** - Port number of previously registered [ICv2xTxStatusReportListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00327) that is to be deregistered. If the listener is registered with port number 0, set this value to 0 to deregister the listener.
- **cb** – **[in]** - Callback that is invoked when the deregistration of CV2X Tx status report is complete.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) setGlobalIPInfo(const [IPv6AddrType](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x12IPv6AddrTypeE) &ipv6Addr, common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Set CV2X global IP address for the IP interface.

Use case and Precondition: OBU: Registers a TX/RX *NON IP* flow for receiving the signed WSA/WRA for IP session initiation; Once receives the IP prefix in the WDS/WRA from RSU, call this method.

RSU: Specifies its own global prefix via this method, and creates/composes WSA/WRA advertising the IP configs.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **ipv6Addr** – **[in]** - CV2X global IP address.
- **cb** – **[in]** - Callback that is invoked when set the global IP address complete. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) setGlobalIPUnicastRoutingInfo(const [GlobalIPUnicastRoutingInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x26GlobalIPUnicastRoutingInfoE) &destL2Addr, common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Set CV2X IP interface global IP unicast routing information.

Use case and Precondition: OBU: Registers a TX/RX *NON IP* flow for receiving the signed WSA/WRA for IP session initiation; Once receives the IP prefix in the WSA/WRA from RSU, call the [setGlobalIPInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1aaa6339d71504d59d425c5f317e44855f) method to update the ip interface with global IP; Now call this method to set the routing information with dest L2 addr negotiated in WSA/WRA.

RSU: Specifies its own global prefix via [setGlobalIPInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1aaa6339d71504d59d425c5f317e44855f), and creates/composes WSA/WRA advertising the IP configs; Now set routing information of its own via this method.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **destL2Addr** – **[in]** - CV2X destination L2 address for unicast routing purpose.
- **cb** – **[in]** - Callback that is invoked when set global IP unicast routing information complete. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- virtual [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x21Cv2xRadioCapabilitiesE) getCapabilities() const = 0

    - Get the capabilities of this Cv2xRadio.

Deprecated Use [requestCapabilities()](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a3adeff7e5395f7533a83b2b73bd68dfc) API

- Returns:

    - [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00297.html#a00297) - Contains capabilities of this Cv2xRadio.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) injectVehicleSpeed(uint32\_t speed, telux::common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Inject vehicle speed, which will be used to select radio resources for C-V2X transmission when GNSS is not available.

User could inject speed at any time, the last injected value will be used when GNSS is not available.

The strategy for speed injection could be

- inject periodically, recommended interval bigger than 1 second
- inject when speed is crossing 60/80/100/120/140/160/180/200 kmph

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **speed** – **[in]** - Vehicle speed in kmph.
- **cb** – **[in]** - Callback that is invoked when speed injection is done.

- Returns:

    - SUCCESS if no error occurred.

- virtual bool isReady() const = 0

    - Returns true if the radio interface was successfully initialized.

Deprecated use getServiceStatus instead

- Returns:

    - True if ready. False otherwise.

- virtual std::future&lt;telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE)&gt; onReady() = 0

    - Returns a future that indicated if the radio interface is ready or if radio failed to initialize.

Deprecated the readiness can be notified via the callback passed to [ICv2xRadioManager::getCv2xRadio](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1abf7ce83eb5ba0da6dab30031f822dc26).

- Returns:

    - SUCCESS if Cv2xRadio initialization was successful. Otherwise it returns an Error Code.

- class ICv2xRadioListener : public virtual telux::common::[ISDKListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00046.html#_CPPv4N5telux6common12ISDKListenerE)

    - Listeners for Cv2xRadio must implement this interface.

Public Functions

- inline virtual void onStatusChanged([Cv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x10Cv2xStatusE) status)

    - Called when the status of the CV2X radio has changed.

Deprecated use onStatusChanged in Cv2xListener

- Parameters:

    - **status** – **[in]** - CV2X radio status.

- inline virtual void onStatusChanged([Cv2xStatusEx](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x12Cv2xStatusExE) status)

    - Called when the status of the CV2X radio has changed.

Deprecated use onStatusChanged in Cv2xListener

- Parameters:

    - **status** – **[in]** - CV2X radio status.

- inline virtual void onL2AddrChanged(uint32\_t newL2Address)

    - Called when the L2 Address has changed.

- Parameters:

    - **newL2Address** – **[in]** - The new L2 address.

- inline virtual void onSpsOffsetChanged(int spsId, [MacDetails](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x10MacDetailsE) details)

    - Called when SPS offset has changed.

Deprecated use onSpsSchedulingChanged

- Parameters:

    - - **spsId** – **[in]** - SPS Id of the SPS flow
- **details** – **[in]** - new SPS MAC PHY details.

- inline virtual void onSpsSchedulingChanged(const [SpsSchedulingInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x17SpsSchedulingInfoE) &schedulingInfo)

    - Called when SPS scheduling has changed.

- Parameters:

    - **schedulingInfo** – **[in]** - SPS scheduling information .

- inline virtual void onCapabilitiesChanged(const [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x21Cv2xRadioCapabilitiesE) &capabilities)

    - Called when Cv2x radio capabilities have changed.

- Parameters:

    - **capabilities** – **[in]** - Capabilities of the CV2X radio .

- inline virtual void onMacAddressCloneAttack(const bool detected)

    - Called when a MAC address cloning attack is detected or cleared. MAC address collisions should be extremely rare. If they are happening frequently within a detetion period, it will be identified as a MAC address cloning attack and users will be notified through this API. This API is also invoked when the attack is cleared. The collision count threshold and the detection period for MAC address cloning attack detection are configurable by setting parameter cv2x.collision.threshold and cv2x.collision.window.size in the file /etc/tel.conf on device.

- Parameters:

    - **detected** – **[out]** - True when a MAC address cloning attack is detected. False when a MAC address cloning attack is cleared.

- inline virtual ~ICv2xRadioListener()

    - Destructor for [ICv2xRadioListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00305)

- class ICv2xRadioManager

    - Cv2xRadioManager manages instances of Cv2xRadio.

Public Functions

- virtual bool isReady() = 0

    - Checks if the Cv2x Radio Manager is ready.

Deprecated use getServiceStatus instead

- Returns:

    - True if Cv2x Radio Manager is ready for service, otherwise returns false.

- virtual std::future&lt;bool&gt; onReady() = 0

    - Wait for Cv2x Radio Manager to be ready.

Deprecated the readiness can be notified via the callback passed to [Cv2xFactory::getCv2xRadioManager](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00295_1a5268d82df06745789d962405437e7de8).

- Returns:

    - A future that caller can wait on to be notified when Cv2x Radio Manager is ready.

- virtual telux::common::[ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga7063b4a1071b6581022e30b730684e4d.html#_CPPv4N5telux6common13ServiceStatusE) getServiceStatus() = 0

    - This status indicates whether the Cv2xRadioManager is in a usable state.

- Returns:

    - SERVICE\_AVAILABLE - If cv2x radio manager is ready for service. SERVICE\_UNAVAILABLE - If cv2x radio manager is temporarily unavailable. SERVICE\_FAILED - If cv2x radio manager encountered an irrecoverable failure.

- virtual std::shared\_ptr&lt;[ICv2xRadio](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00299.html#_CPPv4N5telux4cv2x10ICv2xRadioE)&gt; getCv2xRadio([TrafficCategory](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaaa6181d9ff5873818ddabd638eb881c4.html#_CPPv4N5telux4cv2x15TrafficCategoryE) category, telux::common::[InitResponseCb](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1ab92f90010203f914a62cec6bd7af0a1a.html#_CPPv4N5telux6common14InitResponseCbE) cb = nullptr) = 0

    - Get Cv2xRadio instance

- Parameters:

    - - **category** – **[in]** - Specifies the category of the client application. This field is currently unused.
- **cb** – **[in]** - Optional callback to get Cv2xRadio initialization status

- Returns:

    - Reference to Cv2xRadio interface that corresponds to the Cv2x Traffic Category specified.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) startCv2x([StartCv2xCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a6022d3263e5de423939f88540abcd384.html#_CPPv4N5telux4cv2x17StartCv2xCallbackE) cb) = 0

    - Put modem into CV2X mode.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_OPS permission to successfully invoke this API.

- Parameters:

    - **cb** – **[in]** - Callback that is invoked when Cv2x mode is started

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) stopCv2x([StopCv2xCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a0e5c8ab74a244f9bc288e50ffb1e56d2.html#_CPPv4N5telux4cv2x16StopCv2xCallbackE) cb) = 0

    - Take modem outo of CV2X mode

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_OPS permission to successfully invoke this API.

- Parameters:

    - **cb** – **[in]** - Callback that is invoked when Cv2x mode is stopped

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) requestCv2xStatus([RequestCv2xStatusCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a12e7a294c29aa99ef9fa7f0e24f89133.html#_CPPv4N5telux4cv2x25RequestCv2xStatusCallbackE) cb) = 0

    - request CV2X status from modem

Deprecated use requestCv2xStatus(RequestCv2xCalbackEx)

- Parameters:

    - **cb** – **[in]** - Callback that is invoked when Cv2x status is retrieved

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) requestCv2xStatus([RequestCv2xStatusCallbackEx](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1ad68dea81b9766777ff93b45883182686.html#_CPPv4N5telux4cv2x27RequestCv2xStatusCallbackExE) cb) = 0

    - request CV2X status from modem

- Parameters:

    - **cb** – **[in]** - Callback that is invoked when Cv2x status is retrieved

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) registerListener(std::weak\_ptr&lt;[ICv2xListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00034.html#_CPPv4N5telux4cv2x13ICv2xListenerE)&gt; listener) = 0

    - Registers a listener for this manager.

- Parameters:

    - **listener** – **[in]** - Listener that implements Cv2xListener interface.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) deregisterListener(std::weak\_ptr&lt;[ICv2xListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00034.html#_CPPv4N5telux4cv2x13ICv2xListenerE)&gt; listener) = 0

    - Deregisters a Cv2xListener for this manager.

- Parameters:

    - **listener** – **[in]** - Previously registered CvListener that is to be deregistered.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) setPeakTxPower(int8\_t txPower, common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Set RF peak cv2x transmit power. This affects the power for all existing flows and for any flow created int the future

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **txPower** – **[in]** - Desired global Cv2x peak tx power in dBm, The value should be in the range from -40 to 31. CV2X modem will set the TX power to -40dBm or 31dBm respectively if the value provided is less than -40 or bigger than 31.
- **cb** – **[in]** - Callback that is invoked when Cv2x peak tx power is set

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) setL2Filters(const std::vector&lt;[L2FilterInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x12L2FilterInfoE)&gt; &filterList, common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Request to install remote UE src L2 filters. This affects receiving of the UEs’ packets in specified period with specified PPPP

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **filterList** – **[in]** - remote UE src L2 Id, filter duration and PPPP list, max size 50
- **cb** – **[in]** - Callback that is invoked when the request is sent

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) removeL2Filters(const std::vector&lt;uint32\_t&gt; &l2IdList, common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Remove the previously installed filters matching src L2 address list. Hence forth this would allow reception of packets from specified UE’s

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **l2IdList** – **[in]** - remote UE src L2 Id list, max size 50
- **cb** – **[in]** - Callback that is invoked when the request is sent

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) getSlssRxInfo([GetSlssRxInfoCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00237_1a65ffae6e4eebf1b07e5d72f44cd4c1b1.html#_CPPv4N5telux4cv2x21GetSlssRxInfoCallbackE) cb) = 0

    - Get CV2X SLSS Rx information from modem.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_INFO permission to successfully invoke this API.

- Parameters:

    - **cb** – **[in]** - Callback that is invoked when Cv2x SLSS Rx information is retrieved.

- Returns:

    - SUCCESS on success. Error status otherwise.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) injectCoarseUtcTime(uint64\_t utc, common::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00235_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) cb) = 0

    - Inject coarse UTC time when UE is synchronized to SLSS.

GNSS fix is not available when UE is synchronized to SLSS. To get accurate UTC time in this case, user can register a listener by invoking [ICv2xRadioManager::registerListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1ac0e56ceaaef6e8d1a5a24540780180a3) and then inject coarse UTC time derrived from received application messages using this API. The age of injected UTC time could be nearly 10 seconds at most. After that, accurate UTC time will be notified to user periodically through the registered listener.

On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONFIG permission to successfully invoke this API.

- Parameters:

    - - **utc** – **[in]** - UTC time since Jan. 1, 1970. Units: Milliseconds.
- **cb** – **[in]** - Callback that is invoked when UTC inject complete. This may be null.

- Returns:

    - SUCCESS if no error occurred.

- inline virtual ~ICv2xRadioManager()

    -

- struct SyncRefUeInfo

    - Encapsulates parameters of an SLSS sync reference UE. Used in [SlssRxInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00310.html#a00310).

Public Members

- uint16\_t slssId

    - The SLSS ID of the sync reference UE that is defined in 3GPP TS 36.331 chapter 6.3.8.

- bool inCoverage

    - Indicates whether or not the UE is in coverage of GNSS that is defined in 3GPP TS 36.331 chapter 6.5.2.

- [SlssSyncPattern](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga2ee462736c559a6514923baf8eb0cfb9.html#_CPPv4N5telux4cv2x15SlssSyncPatternE) pattern = [SlssSyncPattern](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga2ee462736c559a6514923baf8eb0cfb9.html#_CPPv4N5telux4cv2x15SlssSyncPatternE)::[UNKNOWN](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga2ee462736c559a6514923baf8eb0cfb9.html#_CPPv4N5telux4cv2x15SlssSyncPattern7UNKNOWNE)

    - Indicates the SLSS sync pattern of the UE that is defined in 3GPP TS 36.331 chapter 6.3.8.

- uint8\_t rsrp

    - SLSS RSRP value of the UE in dBm is ((float)rsrp - 256)/2.

- bool selected

    - Indicates whether or not the sync reference UE has been selected as the timing source.

- struct SlssRxInfo

    - Encapsulates parameters of CV2X SLSS Rx Information.

Used in [telux::cv2x::ICv2xListener::onSlssRxInfoChanged](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00034.html#a00034_1a6838d29b320d934fe782a0a13d2efb73).

Public Members

- std::vector&lt;[SyncRefUeInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x13SyncRefUeInfoE)&gt; ueInfo

    - Vector of detected SLSS sync reference UEs.

- struct SocketInfo

    - Encapsulates parameters of a CV2X socket.

Used in [ICv2xRadio::createCv2xTcpSocket](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1aa2e4a2b9fbd3b5b5cddfbae6d964e396).

Public Members

- uint32\_t serviceId

    - V2X service ID bound to the socket.

- uint16\_t localPort

    - Local port number of the socket used for binding.

- struct Cv2xStatus

    - Encapsulates status of CV2X radio.

Used in [ICv2xRadioManager::requestCv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1abeabc9761df4b51c280c539c1f8ecc18) and [ICv2xRadioListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00305).

Public Members

- [Cv2xStatusType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga7fdfa5cc46b8613c033fe568c12cc486.html#_CPPv4N5telux4cv2x14Cv2xStatusTypeE) rxStatus = [Cv2xStatusType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga7fdfa5cc46b8613c033fe568c12cc486.html#_CPPv4N5telux4cv2x14Cv2xStatusTypeE)::[UNKNOWN](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga7fdfa5cc46b8613c033fe568c12cc486.html#_CPPv4N5telux4cv2x14Cv2xStatusType7UNKNOWNE)

    - RX status

- [Cv2xStatusType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga7fdfa5cc46b8613c033fe568c12cc486.html#_CPPv4N5telux4cv2x14Cv2xStatusTypeE) txStatus = [Cv2xStatusType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga7fdfa5cc46b8613c033fe568c12cc486.html#_CPPv4N5telux4cv2x14Cv2xStatusTypeE)::[UNKNOWN](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga7fdfa5cc46b8613c033fe568c12cc486.html#_CPPv4N5telux4cv2x14Cv2xStatusType7UNKNOWNE)

    - TX status

- [Cv2xCauseType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga8e1a665fb9a6aa55397cf051e87473c9.html#_CPPv4N5telux4cv2x13Cv2xCauseTypeE) rxCause = [Cv2xCauseType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga8e1a665fb9a6aa55397cf051e87473c9.html#_CPPv4N5telux4cv2x13Cv2xCauseTypeE)::[UNKNOWN](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga8e1a665fb9a6aa55397cf051e87473c9.html#_CPPv4N5telux4cv2x13Cv2xCauseType7UNKNOWNE)

    - RX cause of failure

- [Cv2xCauseType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga8e1a665fb9a6aa55397cf051e87473c9.html#_CPPv4N5telux4cv2x13Cv2xCauseTypeE) txCause = [Cv2xCauseType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga8e1a665fb9a6aa55397cf051e87473c9.html#_CPPv4N5telux4cv2x13Cv2xCauseTypeE)::[UNKNOWN](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga8e1a665fb9a6aa55397cf051e87473c9.html#_CPPv4N5telux4cv2x13Cv2xCauseType7UNKNOWNE)

    - TX cause of failure

- uint8\_t cbrValue = 255

    - Channel Busy Ratio

- bool cbrValueValid = false

    - CBR value is valid

- struct Cv2xPoolStatus

    - Encapsulates status for single pool.

Used in [Cv2xStatusEx](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00307.html#a00307).

Public Members

- uint8\_t poolId = 0u

    - pool ID

- [Cv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x10Cv2xStatusE) status

    - status

- struct Cv2xStatusEx

    - Encapsulates status of CV2X radio and per pool status.

Used in [ICv2xRadioManager::requestCv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1abeabc9761df4b51c280c539c1f8ecc18) and Cv2xRadioListener.

Public Members

- [Cv2xStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x10Cv2xStatusE) status

    - Overall Cv2x status

- std::vector&lt;[Cv2xPoolStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x14Cv2xPoolStatusE)&gt; poolStatus

    - Multi pool status vector

- bool timeUncertaintyValid = false

    - Time uncertainty value is valid

- float timeUncertainty

    - Time uncertainty value in milleseconds

- struct TxPoolIdInfo

    - Contains minimum and maximum EARFCNs for a given Tx pool ID. Multiple Tx Pools allow the same radio and overall frequency range to be shared for multiple types of traffic like V2V and V2X. Each pool ID and frequency range corresponds to a certain type of traffic. Both edge guard bands are not included in the EARFCN range reported. The calculation for the full bandwidth includes both edge guard bands is: bandwidth(MHz) = (maxFreq-minFreq)/9.

Used in [Cv2xRadioCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00297.html#a00297)

Public Members

- uint8\_t poolId

    - TX pool ID.

- uint16\_t minFreq

    - Minimum EARFCN of this pool.

- uint16\_t maxFreq

    - Maximum EARFCN of this pool.

- struct EventFlowInfo

    - Contains event flow configuration parameters.

Used in [ICv2xRadio::createTxEventFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1ae04887d79242a3fbafe876b2362c70f0)

Public Members

- bool autoRetransEnabledValid = true

    - Set to true if autoRetransEnabled field is specified. If false, the system will use the default setting.

- bool autoRetransEnabled = true

    - Used to enable automatic-retransmissions.

- bool peakTxPowerValid = false

    - Set to true if peakTxPower is used. If false, the system will use the default setting.

- int32\_t peakTxPower

    - Max Tx power setting in dBm.

- bool mcsIndexValid = false

    - Set to true if mcsIndex is used. If false, the system will use its default setting.

- uint8\_t mcsIndex

    - Modulation and Coding Scheme Index to use.

- bool txPoolIdValid = false

    - Set to true if txPoolId is used. If false, the system will use its default setting.

- uint8\_t txPoolId = 0u

    - Transmission Pool ID.

- bool isUnicast = false

    - Set to true if isUnicast flow. If false, Non-Unicast flow will be created. Note: Unicast flows ignore subscribed Service Ids

- struct SpsFlowInfo

    - Used to request the QoS bandwidth contract, implemented in PC5 3GPP V2X radio as a *Semi Persistent Flow* (SPS).

The underlying radio providing the interface might support periodicities of various granularity in 100ms integer multiples (e.g. 200ms, 300ms).

Used in [ICv2xRadio::createTxSpsFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a71117716539a866af3564044b73f7030) and [ICv2xRadio::changeSpsFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a24188f31854976192697906c7faf7ebc)

Public Members

- [Priority](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafbbc02b8b2a6da0634295c10da43703d.html#_CPPv4N5telux4cv2x8PriorityE) priority = [Priority](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafbbc02b8b2a6da0634295c10da43703d.html#_CPPv4N5telux4cv2x8PriorityE)::[PRIORITY\_2](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafbbc02b8b2a6da0634295c10da43703d.html#_CPPv4N5telux4cv2x8Priority10PRIORITY_2E)

    - Specifies one of the 3GPP levels of Priority for the traffic that is pre-reserved on the SPS flow. Default is PRIORITY\_2.

Use getCapabilities() to discover the supported priority levels. Deprecated: periodicity, Use new periodicityMs instead

- [Periodicity](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa823d5a62ee88e114699a2324591f0fb.html#_CPPv4N5telux4cv2x11PeriodicityE) periodicity = [Periodicity](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa823d5a62ee88e114699a2324591f0fb.html#_CPPv4N5telux4cv2x11PeriodicityE)::[PERIODICITY\_100MS](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa823d5a62ee88e114699a2324591f0fb.html#_CPPv4N5telux4cv2x11Periodicity17PERIODICITY_100MSE)

    - 

- uint64\_t periodicityMs = 100

    - This is the new interface to specify periodicity in milliseconds for [SpsFlowInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00296.html#a00296). Enum Periodicity is deprecated and will be removed in future release.Bandwidth-reserved periodicity interval in interval in milliseconds.

There are limits on which intervals the underlying radio supports. Use getCapabilities() to discover minPeriodicityMultiplierMs and maximumPeriodicityMs.

- uint32\_t nbytesReserved = 0u

    - Number of bytes of TX bandwidth that are sent every periodicity interval.

- bool autoRetransEnabledValid = true

    - Set to true if autoRetransEnabled field is specified. If false, the system will use the default setting.

- bool autoRetransEnabled = true

    - Used to enable automatic-retransmissions.

- bool peakTxPowerValid = false

    - Set to true if peakTxPower is used. If false, the system will use the default setting.

- int32\_t peakTxPower

    - Max Tx power setting in dBm.

- bool mcsIndexValid = false

    - Set to true if mcsIndex is used. If false, the system will use its default setting.

- uint8\_t mcsIndex

    - Modulation and Coding Scheme Index to use.

- bool txPoolIdValid = false

    - Set to true if txPoolId is used. If false, the system will use its default setting.

- uint8\_t txPoolId = 0u

    - Transmission Pool ID.

- struct Cv2xRadioCapabilities

    - Contains capabilities of the Cv2xRadio.

Used in [ICv2xRadio::requestCapabilities](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a3adeff7e5395f7533a83b2b73bd68dfc) and [ICv2xRadioListener::onCapabilitiesChanged](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00305_1a01e0bd8563c3ff1b8b0266bc88eb68b0)

Public Members

- uint32\_t linkIpMtuBytes

    - Maximum data payload length (in bytes) of a packet supported by the IP Radio interface.

- uint32\_t linkNonIpMtuBytes

    - Maximum data payload length (in bytes) of a packet supported by the non-IP Radio interface.

- [RadioConcurrencyMode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga1b8248d9f6809cbe932f2a5f8b7aceb5.html#_CPPv4N5telux4cv2x20RadioConcurrencyModeE) maxSupportedConcurrency

    - Indicates whether this interface supports concurrent WWAN with V2X (PC5).

- uint16\_t nonIpTxPayloadOffsetBytes

    - Byte offset in a non-IP Tx packet before the actual payload begins.

- uint16\_t nonIpRxPayloadOffsetBytes

    - Byte offset in a non-IP Rx packet before the actual payload begins. Deprecated: periodicitiesSupported, Use new periodicities instead

- std::bitset&lt;8&gt; periodicitiesSupported

    - 

- std::vector&lt;uint64\_t&gt; periodicities

    - Specifies the periodicities supported

- uint8\_t maxNumAutoRetransmissions

    - Least frequent bandwidth periodicity that is supported. Above this value, use event-driven periodic messages of a period larger than this value.

- uint8\_t layer2MacAddressSize

    - Size of the L2 MAC address.

Different Radio Access Technologies have different-sized L2 MAC addresses: 802.11 has 6 bytes, whereas 3GPP PC5 has only 3 bytes.

Because a randomized MAC address comes from an HSM with good pseudo random entropy, higher layers must know how many bytes of the MAC address to generate.

- std::bitset&lt;8&gt; prioritiesSupported

    - Bit set of different priority levels supported by this Cv2xRadio. Refer to [Priority](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafbbc02b8b2a6da0634295c10da43703d.html#a00015_1gafbbc02b8b2a6da0634295c10da43703d)

- uint16\_t maxNumSpsFlows

    - Maximum number of supported SPS reservations.

- uint16\_t maxNumNonSpsFlows

    - Maximum number of supported event flows (non-SPS ports).

- int32\_t maxTxPower

    - Maximum supported transmission power.

- int32\_t minTxPower

    - Minimum supported transmission power.

- std::vector&lt;[TxPoolIdInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x12TxPoolIdInfoE)&gt; txPoolIdsSupported

    - Vector of supported transmission pool IDs.

- uint8\_t isUnicastSupported

    - Non zero value if UDP event unicast is supported.

- struct MacDetails

    - Contains MAC information that is reported from the actual MAC SPS in the radio. The offsets can periodically change on any given transmission report.

Public Members

- uint32\_t periodicityInUseNs

    - Actual transmission interval period (in nanoseconds) scheduled relative to 1PP 0:00.00 time

- uint16\_t currentlyReservedPeriodicBytes

    - Actual number of bytes currently reserved at the MAC layer. This number can be slightly larger than original request.

- uint32\_t txReservationOffsetNs

    - Actual offset, from a 1PPS pulse and TX flow periodicity, that the MAC selected and is using for the transmit reservation. If the data goes to the radio with enough time, it can be transmitted on the medium in the next immediately scheduled slot.

- struct SpsSchedulingInfo

    - Contains SPS packet scheduling information that is reported from the radio.

Used in [ICv2xRadioListener::onSpsSchedulingChanged](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00305_1a9d3e519022b4c5fd46f1a2e7de721f23)

Public Members

- uint8\_t spsId

    - SPS ID

- uint64\_t utcTime

    - Absolute UTC start time of next selected grant in nanoseconds.

- uint32\_t periodicity

    - Periodicity of the grant in milliseconds.

- struct TrustedUEInfo

    - Contains time confidence, position confidence, and propogation delay for a trusted UE.

Used in [TrustedUEInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00315.html#a00315)

Public Members

- uint32\_t sourceL2Id

    - Trusted Source L2 ID

- float timeUncertainty

    - Time uncertainty value in milliseconds.

- uint16\_t timeConfidenceLevel

    - Deprecated Use timeUncertainty Time confidence level. Range from 0 to 127 with 0 being invalid/unavailable and 127 being the most confident.

- uint16\_t positionConfidenceLevel

    - Position confidence level. Range from 0 to 127 with 0 being invalid/unavailable and 127 being the most confident.

- uint32\_t propagationDelay

    - Propagation delay in microseconds.

- struct TrustedUEInfoList

    - Contains list of malicious UE source L2 IDs. Contains list of trusted UE source L2 IDs and associated confidence values.

Used in [ICv2xRadio::updateTrustedUEList](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a9a11fb9ac12e9c9fc69c8a05c675fe42)

Public Members

- bool maliciousIdsValid = false

    - Malicious remote UE sources are valid.

- std::vector&lt;uint32\_t&gt; maliciousIds

    - Malicious remote UE source L2 IDs.

- bool trustedUEsValid = false

    - Trusted remote UE sources are valid.

- std::vector&lt;[TrustedUEInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x13TrustedUEInfoE)&gt; trustedUEs

    - Trusted remote UE sources.

- struct IPv6Address

    - Contains IPv6 address.

Used in [DataSessionSettings](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00298.html#a00298)

Public Members

- uint8\_t addr[16]

    -

- struct DataSessionSettings

    - Contains packet data session settings.

Used in [ICv2xRadio::requestDataSessionSettings](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a5b5b21dcffc34229a2880712436092dd)

Public Members

- bool mtuValid = false

    - Set to true if mtu is valid.

- uint32\_t mtu

    - MTU size.

- bool ipv6AddrValid = false

    - Set to true if ipv6 address is valid.

- [IPv6Address](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x11IPv6AddressE) ipv6Addr

    - IPv6 address.

- struct ConfigEventInfo

    - Information about any update to a CV2X config file.

Used in [ICv2xConfigListener::onConfigChanged](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00293_1a6db081ff29418299b00a203e30f171ac)

Public Members

- [ConfigSourceType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga24e94b0d14844358d76294120207489f.html#_CPPv4N5telux4cv2x16ConfigSourceTypeE) source

    - The type of the V2X config file.

- [ConfigEvent](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga9c83b99af3e6c3e4fe5eace6c72dcddb.html#_CPPv4N5telux4cv2x11ConfigEventE) event

    - V2X config event.

- struct L2FilterInfo

    - Contains remote UE source L2 ID that modem will drop on Rx.

Used in [ICv2xRadioManager::setL2Filters](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00311_1aee97086654daa984e5a505d33e5aaae3)

Public Members

- uint32\_t srcL2Id

    - &lt; remote UE L2 MAC addr to filter. Duration, in millisec (resolution 100 msec). 0 means delete the filter.

- uint32\_t durationMs

    - Proximity service per packet priority (PPPP), packets with priority above this value will be dropped. Range 0-7, 0 mean all priority pkts from that UE would be dropped.

- uint8\_t pppp

    -

- struct RFTxInfo

    - Tx status per Tx chain and Tx power per Tx antenna for a specific transport block.

Used in [TxStatusReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00319.html#a00319)

Public Members

- [RFTxStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafc377cf3619d679c64033b0918023461.html#_CPPv4N5telux4cv2x10RFTxStatusE) status

    - Fault detection status for a specific Tx chain.

- int32\_t power

    - The target Tx power after MPR/AMPR reduction for a specific Tx antenna in dBm\*10 format. Invalid value is -700, it means the corresponding antenna is not being used for the transmission of this transport block.

- struct TxStatusReport

    - Information on Tx status of a V2X transport block that is reported from low layer.

1. A V2X packet might trigger multiple reports because of the segmentaion and re-Tx in low layer.
2. If a transport block is dropped in low layer, no report will be triggered for that transport block.
3. The power in the array of rfInfo is the target Tx power value in dBm\*10 after MPR/AMPR reduction for a specific Tx antenna. The status in the array of rfInfo is the fault detection status for a specific Tx chain.

    - In CDD mode, two antennas are being used for a specific transport block, both rfInfo[0].power and rfInfo[1].power are valid (not -700), rfInfo[i].status is reflecting the status of Tx chain/Tx antenna i.
    - In TXD mode, data transmission swtiches between two antennas/chains and only one antenna/chain is being used for a specific transport block, the Tx antenna being used has valid power (not -700) in the array of rfInfo, rfInfo[i].status is reflecting the status of Tx chain i or the status of the Tx antenna i whose power is valid (not -700) in the array of rfInfo. Used in [ICv2xTxStatusReportListener::onTxStatusReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00327_1a1d51a271d3d13f31fe269eea723fdc72)

Public Members

- [RFTxInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x8RFTxInfoE) rfInfo[[MAX\_ANTENNAS\_SUPPORTED](https://docs.qualcomm.com/doc/80-PF458-8/topic/variable_a00015_1ga36fc27466f32325e8b5c5a1e54001f53.html#_CPPv4N5telux4cv2x22MAX_ANTENNAS_SUPPORTEDE)]

    - Tx status per Tx chain and Tx power per Tx antenna.

- uint8\_t numRb

    - Number of resource blocks used for the transport block.

- uint8\_t startRb

    - Start resource block index used for the transport block.

- uint8\_t mcs

    - Modulation and coding scheme used for the transport block that is defined in 3GPP TS 36.213.

- uint8\_t segNum

    - Total number of segments of a V2X packet.

- [SegmentType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga27dcb915dc1ad834e0a0551930fe06f8.html#_CPPv4N5telux4cv2x11SegmentTypeE) segType

    - Segment type of the transport block.

- [TxType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga70403bc98abecef0b1dd76967afc9bdd.html#_CPPv4N5telux4cv2x6TxTypeE) txType

    - Indication of new Tx or re-Tx of the transport block.

- uint16\_t otaTiming

    - OTA timing in format of system frame number\*10 + subframe number.

- uint16\_t port

    - Port number that can be used to link the report to a specific Tx flow which has the same source port number.

- struct IPv6AddrType

    - Encapsulates ipv6 prefix length in bits and ipv6 prefix.

Used in [ICv2xRadio::setGlobalIPInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1aaa6339d71504d59d425c5f317e44855f).

Public Members

- uint8\_t prefixLen

    - &lt; ipv6 address prefix length in bits, range [64, 128]

- uint8\_t ipv6Addr[CV2X\_IPV6\_ADDR\_ARRAY\_LEN]

    -

- struct GlobalIPUnicastRoutingInfo

    - Encapsulates destination L2 address.

Used in [ICv2xRadio::setGlobalIPUnicastRoutingInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1ad0675bf9498c1356318f7b6afec2c8d1).

Public Members

- uint8\_t destMacAddr[CV2X\_MAC\_ADDR\_LEN]

    - &lt; Array that stores CV2X L2 MAC address at the last 3 bytes in big endian order.

- struct RxPacketMetaDataReport

    - Contains the detailed meta data report of a packet received.

The meta data report comes from the same data interface as the packet itself, it consist of RF RSSI (received signal strength indicator) status, 32-bit SCI Format 1 (3GPP TS 36.213, section 14.1), packet delay estimation, L2 destination ID, and the resource blocks used for the packet’s transmission: subframe, subchannel index.

The meta data is always received after the successful receipt of the corresponding packet. In order to associate the meta data report with the specific packet, the sfn and subChannelIndex should be present in the packet’s payload and the meta data report, so the meta data report can be matched up to the packet.

There is no guarantee that all items listed above will be presented, [metaDataMask](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00320.html#a00320_1a6279deed4e396c515aac17f0eb46bb9f) need to be used for the validity. Use [telux::cv2x::Cv2xRxMetaDataHelper::getRxMetaDataInfo](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00321_1a51fbbec44b00bbfab4c46b58b91bf77b) to extract the meta data.

Public Members

- [RxMetaDataValidity](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00015_1ga86e07fa6dd3fba51c674fbc2f4da6827.html#_CPPv4N5telux4cv2x18RxMetaDataValidityE) metaDataMask

    - 

- uint16\_t sfn

    - 

- uint8\_t subChannelIndex

    - 

- uint8\_t subChannelNum

    - 

- int8\_t prxRssi

    - 

- int8\_t drxRssi

    - 

- uint32\_t l2DestinationId

    - 

- uint32\_t sciFormat1Info

    - 

- int32\_t delayEstimation

    -

- class Cv2xRxMetaDataHelper

    - Public Static Functions

- static telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) getRxMetaDataInfo(const uint8\_t \*payload, uint32\_t payloadLength, size\_t &metaDataLen, std::shared\_ptr&lt;std::vector&lt;[RxPacketMetaDataReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x22RxPacketMetaDataReportE)&gt;&gt; metaDatas)

    -

- class ICv2xRxSubscription

    - This class encapsulates a Cv2xRadio Rx Subscription. It contains the Rx socket associated with the subscription from which client applications can read data. This class is referenced in [ICv2xRadio::createRxSubscription](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1ad175b068c9cba83f57e87cfd68d51fa5) and [ICv2xRadio::closeRxSubscription](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a69f4113fca6cea6a002737b5b89029f0).

Public Functions

- virtual uint32\_t getSubscriptionId() const = 0

    - Accessor for Rx subscription ID

- Returns:

    - subscription ID

- virtual [TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) getIpType() const = 0

    - Accessor for IP traffic type

- Returns:

    - The Rx subscriptions’s IP traffic type (IP or NON-IP)

- virtual int getSock() const = 0

    - Accessor for the socket file descriptor

- Returns:

    - The Rx subscriptions’s socket fd.

- virtual struct sockaddr\_in6 getSockAddr() const = 0

    - Accessor for the socket address description

- Returns:

    - The Rx subscriptions’s socket address

- virtual uint16\_t getPortNum() const = 0

    - Accessor for the subscriptions’s port number

- Returns:

    - The Rx subscriptions’s port num

- virtual std::shared\_ptr&lt;std::vector&lt;uint32\_t&gt;&gt; getServiceIDList() const = 0

    - Get subscriptions’s service ID list

- Returns:

    - The Rx subscriptions’s service ID list

- inline virtual ~ICv2xRxSubscription()

    - 

- virtual void setServiceIDList(const std::shared\_ptr&lt;std::vector&lt;uint32\_t&gt;&gt; idList) = 0

    - Set subscriptions’s service ID list

Deprecated Service IDs are set via [ICv2xRadio::createRxSubscription](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1ad175b068c9cba83f57e87cfd68d51fa5) and cannot be modified after that.

- Parameters:

    - **idList** – **[in]** - the subscriptions’s service ID list

- class ICv2xThrottleManagerListener : public telux::common::[ISDKListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00046.html#_CPPv4N5telux6common12ISDKListenerE)

    - Listener class for getting filter rate update notification.

Public Functions

- inline virtual void onFilterRateAdjustment(int rate)

    - This API is invoked to advise the client to adjust the incoming message filtering rate by `rate` messages/second. If the `rate` is positive, it indicates the client to filter `rate` more messages/second If the `rate` is negative, it indicates the client to filter `rate` less messages/second

- Parameters:

    - **rate** – **[in]** the reported filter rate adjustment value.

- inline virtual void onServiceStatusChange(telux::common::[ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga7063b4a1071b6581022e30b730684e4d.html#_CPPv4N5telux6common13ServiceStatusE) status)

    - This API is invoked when the service status changes for example when a subsytem restart (SSR) occurs

- Parameters:

    - **status** – **[in]** - [telux::common::ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga7063b4a1071b6581022e30b730684e4d.html#a00023_1ga7063b4a1071b6581022e30b730684e4d)

- inline virtual void onSanityStateUpdate(bool state)

    - This API is invoked when capacity of underlying message verification module is tampered

Note

Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **state** – **[in]** - mvm state, true if mvm is in good state, otherwise false.

- inline virtual ~ICv2xThrottleManagerListener()

    - Destructor of [ICv2xThrottleManagerListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00323)

- class ICv2xThrottleManager

    - ThrottleManager provides throttle manager client interface.

ThrottleManager provides APIs that allows applications to specify the incoming verification load on the system. This is used to make decisions on how to optimally use the resources available in the system. The API also provides feedback to clients on the suggested filtering that needs to be done when the incoming message verification rate exceeds the instantaneous system capacity.

Public Functions

- virtual telux::common::[ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga7063b4a1071b6581022e30b730684e4d.html#_CPPv4N5telux6common13ServiceStatusE) getServiceStatus() = 0

    - This status indicates whether the object is in a usable state.

- Returns:

    - SERVICE\_AVAILABLE - If location manager is ready for service. SERVICE\_UNAVAILABLE - If location manager is temporarily unavailable. SERVICE\_FAILED - If location manager encountered an irrecoverable failure.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) registerListener(std::weak\_ptr&lt;[ICv2xThrottleManagerListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00323.html#_CPPv4N5telux4cv2x28ICv2xThrottleManagerListenerE)&gt; listener) = 0

    - Registers a listener to receive the updated filer rate adjustment data.

- Parameters:

    - **listener** – **[in]** - Listener that implement [ICv2xThrottleManagerListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00323) interface.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) deregisterListener(std::weak\_ptr&lt;[ICv2xThrottleManagerListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00323.html#_CPPv4N5telux4cv2x28ICv2xThrottleManagerListenerE)&gt; listener) = 0

    - Deregister a [ICv2xThrottleManagerListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00323).

- Parameters:

    - **listener** – **[in]** - Previously registered Cv2xThrottleManagerListener that is deregistered.

- virtual telux::common::[Status](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00023_1ga45eeeff7c2860e02ae447d588d3d6e4d.html#_CPPv4N5telux6common6StatusE) setVerificationLoad(int load, [setVerificationLoadCallback](https://docs.qualcomm.com/doc/80-PF458-8/topic/typedef_a00015_1ga5d2cd6202d7c68c5dd26727706c483fb.html#_CPPv4N5telux4cv2x27setVerificationLoadCallbackE) cb) = 0

    - Set current measured/average verification load.

- Parameters:

    - - **load** – **[in]** - current measured verification load(verification/second).
- **cb** – **[in]** - callack for indicating the result of set verfication load.

- inline virtual ~ICv2xThrottleManager()

    -

- class ICv2xTxFlow

    - This is class encapsulates a Cv2xRadio Tx flows. It contains the Tx socket associated with the flow through which client applications can send data. This class is referenced in [ICv2xRadio::createTxSpsFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a71117716539a866af3564044b73f7030), [ICv2xRadio::createTxEventFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1ae04887d79242a3fbafe876b2362c70f0), and [ICv2xRadio::closeTxFlow](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a677e148e91c599d42de3c3eaaa53a961)

Public Functions

- virtual uint32\_t getFlowId() const = 0

    - Accessor for flow ID. The flow ID should be unique within a process but will not be unique between processes.

- Returns:

    - flow ID

- virtual [TrafficIpType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga5a0baddba05c7972b08a3c9d45ebd35c.html#_CPPv4N5telux4cv2x13TrafficIpTypeE) getIpType() const = 0

    - Accessor for IP traffic type

- Returns:

    - The flow’s IP traffic type (IP or NON-IP)

- virtual uint32\_t getServiceId() const = 0

    - Accessor for service ID

- Returns:

    - The flow’s Service ID.

- virtual int getSock() const = 0

    - Accessor for the socket file descriptor

- Returns:

    - The flow’s socket fd.

- virtual struct sockaddr\_in6 getSockAddr() const = 0

    - Accessor for the socket address description

- Returns:

    - The flow’s socket address

- virtual uint16\_t getPortNum() const = 0

    - Accessor for the flow’s source port number

- Returns:

    - The flow’s source port num

- inline virtual ~ICv2xTxFlow()

    -

- class ICv2xTxRxSocket

    - This is class encapsulates a Cv2xRadio socket for both Tx and Rx. It contains the socket through which client applications can send and receive data. This class is referenced in [ICv2xRadio::createCv2xTcpSocket](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1aa2e4a2b9fbd3b5b5cddfbae6d964e396) and [ICv2xRadio::closeCv2xTcpSocket](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a7e079b571b5bb04ba33158d6405f2d78).

Public Functions

- virtual uint32\_t getId() const = 0

    - Accessor for Cv2xRadio socket ID. The socket ID should be unique within a process but will not be unique between processes.

- Returns:

    - Cv2xRadio socket ID

- virtual uint32\_t getServiceId() const = 0

    - Accessor for service ID

- Returns:

    - The Service ID bound to the socket.

- virtual int getSocket() const = 0

    - Accessor for the socket file descriptor

- Returns:

    - The socket fd.

- virtual struct sockaddr\_in6 getSocketAddr() const = 0

    - Accessor for the socket address description

- Returns:

    - The socket address

- virtual uint16\_t getPortNum() const = 0

    - Accessor for the local port number bound to the socket

- Returns:

    - The local port number

- inline virtual ~ICv2xTxRxSocket()

    -

- class ICv2xTxStatusReportListener : public telux::common::[ISDKListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00046.html#_CPPv4N5telux6common12ISDKListenerE)

    - Listeners for CV2X Tx status report must implement this interface.

Public Functions

- inline virtual void onTxStatusReport(const [TxStatusReport](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x14TxStatusReportE) &info)

    - Called when a CV2X transport block is transmitted in low layer if a listener for Tx status report has been registered by calling [ICv2xRadio::registerTxStatusReportListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00299_1a6866e6a8a8c21d77b72700879a202724).

- Parameters:

    - **info** – **[in]** - Tx status of the transport block.

- inline virtual ~ICv2xTxStatusReportListener()

    - Destructor for [ICv2xTxStatusReportListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00327)

- class Cv2xUtil

    - Cv2x utility class

Public Static Functions

- static uint8\_t priorityToTrafficClass([Priority](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafbbc02b8b2a6da0634295c10da43703d.html#_CPPv4N5telux4cv2x8PriorityE) priority)

    - This function is called to convert cv2x flow priority to traffic class. The Traffic Class indicates class or priority of IPv6 packet. If congestion occurs then packets with least priority will be discarded(See RFC2460 section-7). The result of this method is to fill the IPv6 header traffic class field, it is usually called just before sending IPv6 packet.

- Parameters:

    - **priority** – **[in]** - cv2x flow priority

- Returns:

    - uint8\_t to indicate the result of traffic class

- static [Priority](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gafbbc02b8b2a6da0634295c10da43703d.html#_CPPv4N5telux4cv2x8PriorityE) TrafficClassToPriority(uint8\_t trafficClass)

    - This function is called to convert IPv6 packet traffic class to cv2x flow priority. The Traffic Class indicates class or priority of IPv6 packet. If congestion occurs then packets with least priority will be discarded(See RFC2460 section-7). It is to get the corresponding cv2x flow priority of the received packets, which usually being called when a new IPv6 packet received.

- Parameters:

    - **trafficClass** – **[in]** - class or priority of IPv6 packet(See RFC2460 section-7)

- Returns:

    - cv2x flow priority

- struct Position

    - [Position](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00366.html#a00366) in terms of latitude, longitude, and elevation along with its heading.

Public Members

- double posLat

    - Latitude, in unit of degrees, range [-90.0, 90.0].

- double posLong

    - Longitude, in unit of degrees, range [-180.0, 180.0].

- double heading

    - Heading, in unit of degrees, range [0 to 359.999].

- double elev

    - Altitude above the WGS 84 reference ellipsoid, in unit of meters.

- struct SubPERInterData

    - sub per interval data (5 times per RV)

Public Members

- uint64\_t msgCntFirst

    - First message count of a vehicle in a PacketErrorRate sub interval

- uint64\_t msgCntLast

    - Last message count of a vehicle in a PacketErrorRate sub interval

- uint64\_t rxCnt

    - Total number of recieved messages of a vehicle in a PacketErrorRate sub interval

- bool isValid

    - Specifies if the remote vehicle’s data is still valid for PER calculation

- struct PERInterData

    - per interval data (1 time per RV)

Public Members

- uint64\_t msgCntFirst

    - First message count of a vehicle in a PacketErrorRate interval

- uint64\_t msgCntLast

    - Last message count of a vehicle in a PacketErrorRate interval

- uint64\_t msgCntCurr

    - Current message count of a vehicle in a PacketErrorRate interval

- uint64\_t totalExpectMsgs

    - Total number of expected messages from a Remote Vehicle this PacketErrorRate interval

- uint64\_t totalRxMsgs

    - Total actually received messages from a Remote Vehicle in a PacketErrorRate interval

- uint64\_t totalMissMsgs

    - Total calculated missed messages from a Remote Vehicle in a PacketErrorRate interval

- double packetErrRate

    - Calculated Packet Error Rate for a Remote Vehicle based on totalExpectMsgs, totalRxMsgs, totalMissMsgs in this PacketErrorRate interval

- double lastPacketErrRate

    - The most recent PacketErrorRate

- struct CongestionControlData

    - data for each vehicle general information provided from the sender’s message contents and also contains information updated while congestion control is running such as packet error rate (per) data

Public Members

- [Position](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop8PositionE) pos

    - Latest position of this vehicle

- double speed

    - Latest speed of this vehicle

- uint64\_t rxTimeStamp

    - Latest received message time stamp of this vehicle

- uint64\_t currMsgCnt

    - Latest msg cnt of this per interval (filled by the client)

- std::vector&lt;struct [SubPERInterData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop15SubPERInterDataE)&gt; subPERInterData

    - Packet error rate data for this vehicle updated every PER sub interval

- [PERInterData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop12PERInterDataE) packetErrInterData

    - Packet error rate data for this vehicle updated every PER interval

- bool newPERSubInterval

    - Flag indicating a new packet error rate (PER) sub interval is occurring

- bool inRange

    - Flag indicating this vehicle is in range within a specified threshold

- uint64\_t lastTxMsgTime

    - Timestamp of last sent message

- uint64\_t lastGnssFixTime

    - Latest GNSS fix time

- double trackingErr

    - Latest calculated tracking error. The difference between the last assumed known position and the assumed estimated position.

- struct ChannelData

    - channel quality related data

Public Members

- double rawCbp

    - Unfiltered channel busy percentage

- double channBusyRatio

    - Filtered and calculated channel busy ratio

- double lastChannBusyRatio

    - Last channel busy ratio

- double packetErrorRate

    - Latest interval’s packet error rate

- double channQualInd

    - Latest channel quality indication value

- struct SpsEnhanceData

    - Output for sps enhancements

Public Members

- uint64\_t upperHystThresh

    - Upper hysteresis-based SPS periodicity threshold

- uint64\_t lowerHystThresh

    - Lower hysteresis-based SPS periodicity threshold

- uint64\_t roundedSpsInterval

    - SPS periodicity rounded to nearest valid periodicity

- double hysteresis

    - Percentage of hysteresis for threshold calculation

- struct TrackingErrorData

    - Data for tracking error calculation

Public Members

- [Position](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop8PositionE) lastPosSent

    - Last position sent out via message

- double lastSpeedSent

    - Last speed sent out via message

- double lastHeadingSent

    - Last heading sent out via message

- [Position](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop8PositionE) currPos

    - Curent position

- double currSpeed

    - Current speed

- double currHeading

    - Current heading

- struct CongestionControlCalculations

    - Output of congestion control

Public Members

- bool updateMaxITT

    - Alert the user to update their max ITT value if it needs to be

- uint64\_t maxITT

    - Current max Inter-Transmit Time

- bool sendCriticalMsg

    - Alert the user to send a critical BSM via event flow

- bool sendNow

    - Alert the user to send at this moment

- uint64\_t priority

    - New priority for the next packet sent OTA \*

- uint64\_t txPower

    - New transmit power

- double trackingError

    - Latest calculated tracking error

- double smoothDens

    - Latest calculated smoothed average density

- int totalRvsInRange

    - Latest unsmoothed density in range

- std::shared\_ptr&lt;[ChannelData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop11ChannelDataE)&gt; channData

    - Latest calculated channel quality indicator and packet error rates

- std::shared\_ptr&lt;[SpsEnhanceData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop14SpsEnhanceDataE)&gt; spsEnhanceData

    - SPS flow changes that may need to be made for congestion control

- struct CongestionControlUserData

    - User-provided struct for congestion control outputs Will contain the relevant information to let user know when to TX and also other settings/data that it should change/use for congestion control.

Public Members

- void \*spsTransmit

    - Pointer to be set to a TransmitFlow based class or data struct

- bool spsEnhancementsEnabled

    - Flag to let the manager know that sps enhancements are enabled

- std::shared\_ptr&lt;[CongestionControlCalculations](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop29CongestionControlCalculationsE)&gt; congestionControlCalculations

    - Output for the congestion control algorithm for user

- sem\_t \*congestionControlSem

    - Semaphore to prevent any race conditions when using output

- struct SPSEnhanceConfig

    - Config for all SPS Enhancements

Public Members

- uint64\_t spsPeriodicity

    - The current SPS periodicity Supported values are 20, 50, and multiples of 100

- uint64\_t changeFrequency

    - The chance for actually updating maximum inter-transmit time and also the SPS periodicity of the current SPS flow.

- double hysterPercent

    - A percentage which expands the range of hysteresis thresholds to prevent volatile changes in maximum inter-transmit time and SPS periodicity.

- struct DensityConfig

    - Config for density calculation

Public Members

- double densWeightFactor

    - Density weight factor for lambda parameterized smoothing function

- uint64\_t distThresh

    - Minimum distance threshold to consider a vehicle relevant for PER calculations.

- double densCoeff

    - Density coefficient constant which is part of maximum Inter-Transmit Time calculations. The smaller the value, the more sensitive the calculation.

- struct PERConfig

    - Config for packet error rate calculation

Public Members

- int packetErrorInterval

    - Time interval between each periodic packet error rate calculation

- int packetErrorSubInterval

    - Each subinterval time period for packet error rate calculation

- int maxPERSubinters

    - Numer of subintervals per Packet Error rATE interval. Equivalent to the interval time divided by subinterval time

- double maxPacketErrorRate

    - Maximum packet error rate threshold. Anything above is capped to this.

- struct CQIConfig

    - Config for channel quality calculation

Public Members

- uint64\_t threshold

    - Channel quality indication threshold

- struct CBPConfig

    - Config for channel busy percentage

Public Members

- double cbpWeightFactor

    - Weight factor in calculating the CBP from raw CBP

- uint64\_t cbpInterval

    - Time interval between each periodic CBP calculation

- struct TEConfig

    - Config for tracking error (TE).

Public Members

- uint64\_t txCtrlInterval

    - Interval for calculating the tracking error and determining new Inter-Transmit Time (ITT)

- uint64\_t hvMinTimeDiff

    - Minimum HV position estimate delay used to calculate the HV local estimate

- uint64\_t hvMaxTimeDiff

    - Maximum HV position estimate delay used to calculate the HV local estimate

- uint64\_t rvMinTimeDiff

    - Minimum delay used to calculate the where RV estimates the HV to be

- uint64\_t rvMaxTimeDiff

    - Minimum delay used to calculate the where RV estimates the HV to be

- double teLowerThresh

    - Minimum communications-based error threshold

- double teUpperThresh

    - Maximum tracking error upper threshold. Used to determine whether to send a BSM or not

- uint64\_t errSensitivity

    - For calculating the probability of transmission based on tracking error

- struct ITTConfig

    - Config for inter-transmit time

Public Members

- uint64\_t reschedThresh

    - Threshold for making decision to update ITT or not

- uint64\_t timeAccuracy

    - Time resolution in time

- uint64\_t minIttThresh

    - Minimum Inter-transmit time threshold

- uint64\_t maxIttThresh

    - Maximum Inter-transmit time threshold

- uint64\_t txRand

    - Random chance for not sending

- struct PowerConfig

    - Config for power

Public Members

- uint64\_t minRadiPwr

    - Minimum permitted radiated power

- uint64\_t maxRadiPwr

    - Maximum permitted radiated power

- struct CongestionControlConfig

    - Config for congestion control which contains sub-config items

Public Members

- [PowerConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop11PowerConfigE) pwrConfig

    - Power calculation Configuration parameters

- [CBPConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop9CBPConfigE) cbpConfig

    - Channel Busy Percentage calculation Configuration parameters

- [CQIConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop9CQIConfigE) cqiConfig

    - Channel Quality Indication calculation Configuration parameters

- [PERConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop9PERConfigE) perConfig

    - Packet Error Rate calculation Configuration parameters

- [DensityConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop13DensityConfigE) densConfig

    - Smoothed In-Range Density calculation Configuration parameters

- [TEConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop8TEConfigE) teConfig

    - Tracking Error calculation Configuration parameters

- [ITTConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop9ITTConfigE) ittConfig

    - Inter-Transmit Time calculation Configuration parameters

- bool enableSpsEnhance

    - Flag to enable SPS enhancements

- [SPSEnhanceConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop16SPSEnhanceConfigE) spsEnhanceConfig

    - SPS Enhancements Configuration parameters

- [CongestionControlType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga92f30c08117cf3e8719031ebcf11c651.html#_CPPv4N5telux4cv2x4prop21CongestionControlTypeE) congestionControlType

    - Type of congestion control to be used. SAE only supported today

- class CongestionControlUtility

    - Utility class for congestion control logging and testing purposes.

Public Static Functions

- static void setLoggingLevel(uint8\_t loggingLevelIn)

    - Sets the logging level

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **loggingLevel** – **[in]** - value to indicate level of console logging

- static uint8\_t getLoggingLevel()

    - Gets the logging level

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - uin8\_t - the current logging level

- static inline void addDensity(uint64\_t density, uint64\_t initDistance)

    - Adds an artificial density over time

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **density** – **[in]** - artificial density that should be incorporated
- **initDistance** – **[in]** - the initial distance from host vehicle to artifical density

Private Static Attributes

- static uint8\_t loggingLevel

    - uint8\_t value for determining the verbosity level of congestion control manager

- class ICongestionControlListener

    - Congestion Control listeners implement this interface.

Public Functions

- inline virtual void onCongestionControlDataReady(std::shared\_ptr&lt;[CongestionControlUserData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop25CongestionControlUserDataE)&gt; congestionControlUserData, bool critEvent)

    - Called when the new congestion control data is available.

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **congestionControlUserData** – **[in]** - pointer to output user data which manager will fill. Lets the user know they should immediately send a new message. If SPS enhancements are enabled, they may also need to perform SPS periodicity change.
- **critEvent** – **[in]** - tells the listener that there is a critical event

- inline virtual ~ICongestionControlListener()

    - Destructor for [ICongestionControlListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00385)

- class ICongestionControlManager

    - CongestionControl Manager is a primary interface for CongestionControl related functionality.

Public Functions

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateCongestionControlConfig(std::shared\_ptr&lt;[CongestionControlConfig](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop23CongestionControlConfigE)&gt; congestionControlConfigIn) = 0

    - Called to update the internal config parameters with custom values

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **congestionControlConfigIn** – **[in]** - a struct that holds various smaller config structs for each component of congestion control

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateCongestionControlType([CongestionControlType](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1ga92f30c08117cf3e8719031ebcf11c651.html#_CPPv4N5telux4cv2x4prop21CongestionControlTypeE) congestionControlType) = 0

    - Called to update the type of congestion control

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **congestionControlType** – **[in]** - type of congestion control to be performed

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) startCongestionControl() = 0

    - The primary congestion control driver to be called after initialization. Launches various threads for different components of congestion control. Including channel quality, packet error rate, density, and inter-transmit time calculations.

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) stopCongestionControl() = 0

    - Gracefully closes any lingering threads, semaphores, and cleans up any allocated data.

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) registerListener(std::weak\_ptr&lt;[ICongestionControlListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00385.html#_CPPv4N5telux4cv2x4prop26ICongestionControlListenerE)&gt; congCtrlListener) = 0

    - Called to register a [ICongestionControlListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00385), which will be notified when new congestion control data is ready.

- Parameters:

    - **congCtrlListener** – **[in]** - user-implemented class to listen for output user data which manager will fill. Lets the user know they should immediately send a new message. If SPS enhancements are enabled, they may perform SPS periodicity change.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) deregisterListener(std::weak\_ptr&lt;[ICongestionControlListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00385.html#_CPPv4N5telux4cv2x4prop26ICongestionControlListenerE)&gt; congCtrlListener) = 0

    - Called to deregister a [ICongestionControlListener](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00385) implementation

- Parameters:

    - **congCtrlListener** – **[in]** - user-implemented class to be deregistered

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual std::shared\_ptr&lt;[CongestionControlUserData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop25CongestionControlUserDataE)&gt; getCongestionControlUserData() = 0

    - Called to get a shared pointer to the results of the Congestion Control periodic calculations.

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - std::shared\_ptr&lt;CongestionControlUserData&gt; - shared pointer reference to the [CongestionControlUserData](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00374.html#a00374) that the manager will update.

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateCbpConfig(double cbpWeightFactor, uint64\_t cbpInterval) = 0

    - Update the channel busy percentage related configs

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **cbpWeightFactor** – **[in]** - weight factor for channel busy percentage calculation
- **cbpInterval** – **[in]** - interval for channel busy percentage calculation

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updatePERConfig(double maxPacketErrorRate, int packetErrorRateInterval, int packetErrorRateSubInterval) = 0

    - Update the packet error rate related configs

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **maxPacketErrorRate** – **[in]** - maximum packet error rate
- **packetErrorRateInterval** – **[in]** - overall interval time for packet error calculation
- **packetErrorRateSubInterval** – **[in]** - sub interval time for packet error rate calculation

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateDensConfig(double densCoeff, double densWeightFactor, uint64\_t distThresh) = 0

    - Update the density related configs

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **densCoeff** – **[in]** - density coefficient for evaluating maximum inter-transmit time
- **densWeightFactor** – **[in]** - weight factor coefficient for smoothed density
- **distThresh** – **[in]** - threshold for minimal distance between host and remote vehicles

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateTeConfig(uint64\_t txCtrlInterval, uint64\_t hvMinTimeDiff, uint64\_t hvMaxTimeDiff, uint64\_t rvMinTimeDiff, uint64\_t rvMaxTimeDiff, uint64\_t teLowerThresh, uint64\_t teUpperThresh, uint64\_t errSensitivity) = 0

    - Update the tracking error related configs

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **txCtrlInterval** – **[in]** - interval for transmit rate control
- **hvMinTimeDiff** – **[in]** - min time difference between hv last known position and current
- **hvMaxTimeDiff** – **[in]** - max time difference between hv last known position and current
- **rvMinTimeDiff** – **[in]** - min time difference between rv last known position and current
- **rvMaxTimeDiff** – **[in]** - max time difference between rv last known position and current
- **teLowerThresh** – **[in]** - tracking error lower threshold
- **teUpperThresh** – **[in]** - tracking error upper threshold
- **errSensitivity** – **[in]** - tracking error sensitivity

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateIttConfig(uint64\_t reschedThresh, uint64\_t timeAccuracy, uint64\_t minIttThresh, uint64\_t maxIttThresh, uint64\_t txRand) = 0

    - Update the inter-transmit time related configs

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **reschedThresh** – **[in]** - threshold for rescheduling frequency
- **timeAccuracy** – **[in]** - accuracy of time
- **minIttThresh** – **[in]** - minimum inter-transmit time
- **maxIttThresh** – **[in]** - maximum inter-transmit time
- **txRand** – **[in]** - transmission chance randomness

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateTxRateCtrlInterval(uint64\_t txCtrlInterval) = 0

    - Update the transmit rate control related configs

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **txCtrlInterval** – **[in]** - time interval for periodic calculations of tracking error and inter-transmit time.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateSpsEnhanceConfig(uint64\_t spsPeriodicity, uint64\_t changeFrequency, double hysterPercent) = 0

    - Update the sps enhancements related config

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **spsPeriodicity** – **[in]** - New periodicity of sps flow to be set by user
- **changeFrequency** – **[in]** - Random chance to not change sps flow periodicity and inter-transmit time
- **hysterPercent** – **[in]** - Hysteresis percentage for choosing the inter-transmit time thresholds. Used to prevent frequent changes to sps flow periodicity.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual void enableSpsEnhancements(bool enable) = 0

    - Enables sps ennhancements

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **enable** – **[in]** - Boolean to enable or disable sps enhancements

- virtual bool isSpsEnhanceEnabled() = 0

    - Used to check if sps enhancements are enabled

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateHostVehicleData([Position](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop8PositionE) &pos, double speed) = 0

    - Used whenever the user needs to update latest host vehicle information to manager

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **pos** – **[in]** - latest position (lat, long, elevation) of host vehicle
- **speed** – **[in]** - latest speed of host vehicle

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateLastTxTime(uint64\_t lastTxTime) = 0

    - Used whenever the user needs to update latest host vehicle information to manager

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **lastTxTime** – **[in]** - latest tx time of host vehicle (if any) used for scheduling

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateHvGnssFixTime(uint64\_t gnssFixTimestamp) = 0

    - Update the host vehicle gnss fix time

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **gnssFixTimestamp** – **[in]** - the new host vehicle gnss fix timestamp

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) updateChannelBusyRate(double channBusyRatio) = 0

    - Update the channel busy ratio

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **channBusyRatio** – **[in]** - current channel busy ratio of host vehicle

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) notifyCriticalEvent() = 0

    - Should be called when user detects a critical event. This function notifies the congestion control manager about the critical event. This is important so that the manager can update the internal transmit schedule for a specified time.

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) disableCriticalEvent() = 0

    - Called when user needs to notify congestion control to disable critical event

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) addCongestionControlData(uint64\_t id, double latitude, double longitude, double heading, double speed, uint64\_t timestamp, uint64\_t msgCount) = 0

    - Called whenever there is a packet received from new vehicle nearby

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - - **id** – **[in]** - A remote vehicle identity
- **-** – **[in]** latitude - latitude of the vehicle
- **-** – **[in]** longitude - longitude of the vehicle
- **-** – **[in]** heading - heading of the vehicle
- **-** – **[in]** speed - speed of the vehicle
- **-** – **[in]** timestamp - timestamp at which the message was received
- **-** – **[in]** msgCount - Current message count taken from the decoded message

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual [CCErrorCode](https://docs.qualcomm.com/doc/80-PF458-8/topic/enum_a00015_1gaa135622e31dba57e46d755e48b0c4db5.html#_CPPv4N5telux4cv2x4prop11CCErrorCodeE) removeCongestionControlData(uint64\_t id) = 0

    - Called when we need to remove data related to a vehicle

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **id** – **[in]** - A remote vehicle identity whose [CongestionControlData](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00369.html#a00369) will be removed from the manager. This API is called when a remote vehicle has left a specified range or is no longer important for congestion control.

- Returns:

    - CCErrorCode code meaning success or reason for error, if any

- virtual std::shared\_ptr&lt;[CongestionControlData](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#_CPPv4N5telux4cv2x4prop21CongestionControlDataE)&gt; getCongestionControlData(uint64\_t id) = 0

    - Called when user needs to access a nearby vehicle’s latest congestion control data

Note

- Eval: This is a new API and is being evaluated. It is subject to change and could break backwards compatibility.

- Parameters:

    - **id** – **[in]** - A remote vehicle identity

- Returns:

    - [CongestionControlData](https://docs.qualcomm.com/doc/80-PF458-8/topic/struct_a00369.html#a00369) copy of the data the manager has and uses for a given vehicle id, if any.

- ICongestionControlManager()

    - 

- ~ICongestionControlManager()

    -

- class V2xPropFactory

    - [V2xPropFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00387) allows creation of [ICongestionControlManager](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00386).

Public Functions

- virtual std::shared\_ptr&lt;[ICongestionControlManager](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00386.html#_CPPv4N5telux4cv2x4prop25ICongestionControlManagerE)&gt; getCongestionControlManager() = 0

    - Provides a CongestionControlManager instance to be used to perform v2x congestion control. On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONGESTION\_CONTROL permission to successfully invoke this API.

- Returns:

    - [ICongestionControlManager](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00386) instance

Public Static Functions

- static [V2xPropFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00387.html#_CPPv4N5telux4cv2x4prop14V2xPropFactoryE) &getInstance()

    - Gets the [V2xPropFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/cpp_apis.html#a00387) instance. On platforms with access control enabled, the caller needs to have TELUX\_CV2X\_CONGESTION\_CONTROL permission to successfully invoke this API.

Private Functions

- V2xPropFactory(const [V2xPropFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00387.html#_CPPv4N5telux4cv2x4prop14V2xPropFactory14V2xPropFactoryERK14V2xPropFactory)&) = delete

    - 

- [V2xPropFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00387.html#_CPPv4N5telux4cv2x4prop14V2xPropFactoryE) &operator=(const [V2xPropFactory](https://docs.qualcomm.com/doc/80-PF458-8/topic/class_a00387.html#_CPPv4N5telux4cv2x4prop14V2xPropFactoryE)&) = delete

    -

Last Published: May 20, 2026

[Previous Topic
C Packet APIs](https://docs.qualcomm.com/bundle/publicresource/80-PF458-8/topics/packet.md) [Next Topic
WLAN](https://docs.qualcomm.com/bundle/publicresource/80-PF458-8/topics/wlan.md)