# 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(src_ip), reinterpret_cast(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(src_ip), reinterpret_cast(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(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(slot_id), static_cast(up_link), static_cast(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(uplink), static_cast(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(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(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(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(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(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)