Qualcomm Enhanced SDK (QESDK) API Reference (7)
-
-
- 3.2.1 LLM callback interface
-
- 3.2.1.1 Validity levels
- 3.2.1.2 Filter status
- 3.2.1.3 Filter information
- 3.2.1 LLM enumeration
- 3.2.1 LLM sample code
-
3.2.1 LLM callback interface
The following subsections introduce the LinkLatencyCBs interface, its description and callback parameters.
3.2.1.1 Effective Level
The callback receives the valid link level as argument.
Java
IeffectiveLevels() {<!-- -->onValues(level uplink, level downlink) {<!-- -->}} }
Native
typedef void (*llm_effectiveLevels) (llm_level uplink, llm_level downlink) {<!-- -->}
Parameters
Parameters | API type | Data type | Description |
uplink | Java | level | The effective uplink level set on the device. |
Native | llm_level | ||
downlink | Java | level | The effective downlink level set on the device. |
Native | llm_level |
3.2.1.2 Filter status
Callback the current state of the receive filter.
3.2.1.3 Filter information
The callback receives all filter parameters.
Java
public interface IfilterStatus {<!-- --> void onValues(long id, filterStatusEnum status, String statusString); }
Native
void (*llm_filterStatus) (uint32_t id, llm_filterStatusEnum status, std::string statusString);
Parameters
Parameters | API type | Data type | Description |
id | Java | int | The filter ID to be updated. |
Native | uint32_t | ||
Status | |||
td> | Java | filterStatusEnum | An enumeration indicating the current status of the filter. |
Native | llm_filterStatusEnum | ||
statusString | Java | String | A character that provides more information about any error to aid debugging string. |
Native | String |
3.2.1 LLM enumeration
slotId
Related to SIM card slot ID. When requesting DDS levels, SLOT_UNSPECIFIED should be used.
Enumeration value |
---|
SLOT_UNSPECIFIED |
SLOT_FIRST |
SLOT_SECOND |
level
The larger the L* value, the lower the latency. * Value range is 1 to 6.
The L* value has the following caveats:
- On the device, L4 has the lowest latency and L1 has the highest latency.
- L5 and L6 are levels reserved for OEMs to change latency behavior.
- In the default configuration, L4=L5=L6.
- The default level for uplink and downlink is L1.
Enumeration value |
---|
L1 |
L2 |
L3 |
L4 |
L5 |
L6 |
Agreement
Supported filter protocol values.
Java
protocolEnum
Native
llm_protocolEnum
Enumeration value |
---|
TCP |
UDP |
TCPUDP |
OOD
The OOD (Out of Order) value to apply the filter to.
Java
oodEnum
Native
llm_oodEnum
Enumeration value |
---|
UNSPECIFIED |
ENABLED |
DISABLED |
Filter status
Filter status value. Also includes error values when adding filters.
Filter status value. Also includes error values when adding filters.
Java
filterStatusEnum
Native
llm_filterStatusEnum
Enumeration value |
---|
FILTER_PENDING |
FILTER_ACTIVE |
FILTER_INACTIVITY_TIMEOUT |
FILTER_DELETED |
ERROR_DUPLICATE_FILTER |
ERROR_FILTER_LIMIT_REACHED |
ERROR_INVALID_ARGS |
ERROR_INTERNAL |
3.2.1 LLM sample code
Java
Need to import
import com.qualcomm.qti.qesdkIntf.IQesdk; import com.qualcomm.qti.qesdk.Modem.ILinkLatencyCBs; import com.qualcomm.qti.qesdk.Modem.LinkLatencyEnums.level; import com.qualcomm.qti.qesdk.Modem.LinkLatencyEnums.slotId; import com.qualcomm.qti.qesdk.Modem.LinkLatencyManager; import com.qualcomm.qti.qesdk.QesdkStatusException;
Declare required objects
private IQesdk mQesdkManager; private LinkLatencyManager llmManager;
Create a QESDK manager instance
mQesdkManager = IQesdk.createInstance(this); int statusId = mQesdkManager.init(eventCallbackHandler);
Create LLM instances as needed
llmManager = new LinkLatencyManager(qesdkManager);
Set callback
void event_callback_handler(uint32_t opcode, uint32_t subsys[]) {<!-- --> // Callback to handle QESDK events } void effectiveLevelsCallback (llm_level uplink, llm_level downlink){<!-- --> // Handle effective LLM levels callback } void filterStatusCallback(uint32_t id, llm_filterStatusEnum status, std::string statusString) {<!-- --> // Handle LLM filter Status callback } void filterInfoCallback(uint32_t id, llm_filterStatusEnum status, std::string statusString, llm_level uplink, llm_level downlink, uint32_t pdcpTimer, llm_oodEnum ood) {<!-- --> // Handle LLM filter Info callback }
Make default data card priority
int ret = llmManager.prioritizeDefaultDataSubscription(true);
Set latency level
ret = llmManager.setLevel(simSlot, upLinkEnum, downLinkEnum, connection_ext, effectiveLevelsCallback)
Add filter
llmManager.addFilter(srcIp,dstIp,srcPort,dstPort,protocolEnum,dscp,upLinkEnum,downLinkEnum,pdcpTimer,oodEnum,new ILinkLatencyCBs.IfilterStatus(){<!-- --> @Override public void onValues(long l, DataPathPriorityEnums.flowStatusEnum flowStatusEnum, String s) {<!-- --> } });
Get filter
llmManager->getFilters(filterInfoCallback); To update Latency Level for the Filter llmManager->updateLatencyLevel(id, (llm_level) uplink, (llm_level) downlink); To update Ood for the Filter llmManager->updateOod(id, (llm_oodEnum) ood); To update Pdcp Timer for the Filter llmManager->updatePdcpTimer(id, pdcp_timer);
Update OOD for DDS
llmManager->updateOodForDds((llm_oodEnum) ood);
Delete a single process
llmManager->deleteFilter(FilterID);
Delete all processes
llmManager->deleteAllFilter();
Update PDCP timer
llmManager->updatePdcpTimerForDds(pdcp_timer);
Enable high-performance gaming
llmManager->enableHighPerformanceGaming(enable);
Native
What to include
#include "qesdk_ndk.h" #include "qesdk_Modem_LinkLatency.h"
initialization
qesdk_handle_t qesdk_handle = qesdk_init(nativeLicense, len, event_callback_handler); LinkLatencyManager *llmManager = new LinkLatencyManager(); int ret = llmManager->init(nativeLicense, len, event_callback_handler);
Set callback
void event_callback_handler(uint32_t opcode, uint32_t subsys[]) {<!-- --> // Callback to handle QESDK events } void effectiveLevelsCallback (llm_level uplink, llm_level downlink){<!-- --> // Handle effective LLM levels callback }
Make default data card priority
int ret = llmManager->prioritizeDefaultDataSubscription(enable);
Set latency level
ret = llmManager->setLevel(sim_slot, up_link_enum, down_link_enum, connection_ext, effectiveLevelsCallback);
Add filter
llmManager->addFilter(reinterpret_cast<const char *>(src_ip), reinterpret_cast<const char *>(dst_ip), src_port, dst_port, (llm_protocolEnum)protocol, dscp, (llm_level)uplink, (llm_level)downlink, (uint32_t)pdcp_timer, (llm_oodEnum)ood, filterStatusCallback);