# Example code

Source: [https://docs.qualcomm.com/doc/80-PK177-134/topic/example_code_QC_1.html](https://docs.qualcomm.com/doc/80-PK177-134/topic/example_code_QC_1.html)

Sample code for using the LLM APIs.

## Java

**Required imports**

    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;Copy to clipboard

**Declare required objects**

    private Iqesdk mQesdkManager;
    private LinkLatencyManager llmManager;Copy to clipboard

**Create QESDK manager instance**

    mQesdkManager = Iqesdk.createInstance(this);Copy to clipboard

**Create LLM instance as required**

    llmManager = new LinkLatencyManager(qesdkManager);
    int status = llmManager.init([String license], (opcodes, subsystem) -> { 
    //  Callback handle
    });Copy to clipboard

**Setup callbacks**

    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
    }Copy to clipboard

**Prioritize default data subscription**

    int ret = llmManager.prioritizeDefaultDataSubscription(true);Copy to clipboard

**Set latency levels**

    ret = llmManager.setLevel(simSlot, upLinkEnum, downLinkEnum, connection_ext, effectiveLevelsCallback)Copy to clipboard

**Add a 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) {
    }
    });Copy to clipboard

**Get a filter**

    llmManager->getFilters(filterInfoCallback);Copy to clipboard

**To update latency level for the                              filter**

    llmManager->updateLatencyLevel(id, (llm_level) uplink, (llm_level) downlink);
    Copy to clipboard

**Update OOD for the filter**

    llmManager->updateOod(id, (llm_oodEnum) ood); To update Pdcp Timer for the Filter llmManager->updatePdcpTimer(id, pdcp_timer);Copy to clipboard

**Update OOD for DDS**

    llmManager->updateOodForDds((llm_oodEnum) ood);Copy to clipboard

**Delete a single flow**

    llmManager->deleteFilter(FilterID);Copy to clipboard

**Delete all flows**

    llmManager->deleteAllFilter();Copy to clipboard

**Update the PDCP timer**

    llmManager->updatePdcpTimerForDds(pdcp_timer);Copy to clipboard

**Enable high performance gaming**

    llmManager->enableHighPerformanceGaming(enable);Copy to clipboard

**Register the priority flow**

    llmManager.registerForPriorityQueueReports(enableReports, reportingInterval,(appHandles, txQueueBytes, txBytes) -> {
    // Priority Flow handler
    });Copy to clipboard

**Get the priority flow**

    llmManager.getForPriorityQueueReport((appHandles, txQueueBytes, txBytes) ->{
    // Priority Flow handler
    });Copy to clipboard

## Native

**Required includes**

    #include “qesdk_ndk.h”
    #include “qesdk_Modem_LinkLatency.h”Copy to clipboard

**Initialize**

    LinkLatencyManager *llmManager = new LinkLatencyManager(); 
    int ret = llmManager->init(nativeLicense, len,event_callback_handler);Copy to clipboard

**Setup callbacks**

    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
    }Copy to clipboard

**Prioritize default data subscription**

    int8_t ret = -1; 
    qesdk_transaction_status qesdk_ndk_response = llmManager->prioritizeDefaultDataSubscription(enable, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Set latency levels**

    qesdk_ndk_response = llmManager->setLevel(sim_slot, up_link_enum, down_link_enum, connection_ext, effectiveLevelsCallback, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Add a filter**

    qesdk_ndk_response = 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, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Add a filter – V2**

    qesdk_ndk_response = llmManager->addFilterV2(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, inactivity_timer, static_cast<llm_appType>(app_type), llm_add_filter2StatusCallback, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Set level**

    qesdk_ndk_response = int8_t res = llManager->setLevel(static_cast<llm_slotId>(slot_id), static_cast<llm_level>(up_link), static_cast<llm_level>(down_link), enable_connection_extension,
    llm_effectiveLevels_callback, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Prioritize data subscription**

    qesdk_ndk_response = llManager->prioritizeDefaultDataSubscription(isEnabled, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Register filter status**

    qesdk_ndk_response = llManager->registerFilterStatusUpdates(llm_filter_status_callback, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Get a filter**

    qesdk_ndk_response = int8_t ret = llManager->getFilters(llm_get_filterStatusCallback, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Update latency level**

qesdk_ndk_response = int8_t ret = llManager->updateLatencyLevel(id, static_cast<llm_level>(uplink), static_cast<llm_level>(downlink) , ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Update OOD**

    qesdk_ndk_response = int8_t ret = llManager->updateOod(id, static_cast<llm_oodEnum>(ood) , ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }
    ); int8_t ret = llManager->updateOodForDds(static_cast<llm_oodEnum>(ood) , ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Update the PDCP timer**

    qesdk_ndk_response = int8_t ret = llManager->updatePdcpTimer(id, pdcp_timer, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }
    ); qesdk_ndk_response =  int8_t ret = llManager->updatePdcpTimerForDds(pdcp_timer, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Delete a filter**

    qesdk_ndk_response = int8_t ret = llManager->deleteFilter(id, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Delete all filters**

    qesdk_ndk_response = int8_t ret = llManager->deleteAllFilter(ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Enable high performance gaming**

    qesdk_ndk_response = int8_t ret = llManager->enableHighPerformanceGaming(enable, ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Prioritize data per subscription**

    qesdk_ndk_response = int ret = llManager-
    >prioritizeDataPerSubscription( static_cast<llm_slotId>(slot_id), is_enabled , ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Register the priority queue**

    qesdk_ndk_response = int ret = static_cast<int>(llManager->registerForPriorityQueueReports (enable_reports,
    reporting_interval, llm_registerForPriorityQueueReportCallback) , ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Get the priority queue**

    qesdk_ndk_response = int ret = static_cast<int>(llManager-
    >getForPriorityQueueReport(llm_getForPriorityQueueReportCallback) , ret); 
    if(qesdk_ndk_response.is_ok()){
      // Use the ret value 
    } else { 
      // Can get error code by get_error_code() 
    }Copy to clipboard

**Parent Topic:** [Link latency manager (smart data flow)](https://docs.qualcomm.com/doc/80-PK177-134/topic/llm.html)

Last Published: Nov 14, 2024

[Previous Topic
App type](https://docs.qualcomm.com/bundle/publicresource/80-PK177-134/topics/app_type_QC_1.md) [Next Topic
Data path priority (smart data flow)](https://docs.qualcomm.com/bundle/publicresource/80-PK177-134/topics/data_path_priority.md)