Qualcomm Enhanced SDK (QESDK) API Reference (7)

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);