# How to enable NTN and send non-IP data

The following steps illustrate how to configure and use NTN.

1. Create the INtnListener class.

class NtnListener: public telux::satcom::INtnListener {
    public:
    void onNtnStateChange(NtnState newState) {
        // Handle NTN state change
    }
    
    void onCapabilitiesChange(NtnCapabilities capabilities) {
        // Handle NTN capabilities change
    }
    
    void onSignalStrengthChange(SignalStrength signalStrength) {
        // Handle signal strength change
    }
    
    onServiceStatusChange(telux::common::ServiceStatus status) {
        // Handle service status change
    }
    
    void onDataAck(telux::common::ErrorCode err, TransactionId id) {
        // Handle data acks for sent data packets
    }
    
    void onIncomingData(std::unique_ptr<uint8_t[]> data, uint32_t size) {
        // Process downlink data coming from NTN network
    }
    
    void onLocationFixRequest(LocationFixRequestReason reqReason) {
        // Handle location fix request
    }
    
    void onNtnBandUpdate(uint32_t bandValue) {
        // Handle NTN band update
    }
    
    };
    Copy to clipboard

2. Create the initialization callback object to be notified when initialization is complete and the object is ready to be used.

auto initCb = [&](telux::common::ServiceStatus status) {
       std::lock_guard<std::mutex> lock(mtx);
       status_ = status;
       initCv.notify_all();
    };
    Copy to clipboard

3. Get the SatcomFactory and NtnMAnager instance.

auto &satcomFactory = telux::satcom::SatcomFactory::getInstance();
    ntnMgr = satcomFactory.getNtnManager(initCb);
    Copy to clipboard

4. Wait for the object to complete initialization.

telux::common::ServiceStatus = subSystemStatus = initPromise.get_future().get();
    if (subSystemStatus == telux::common::ServiceStatus::SERVICE_AVAILABLE) {
        std::cout << " *** Satcom SubSystem is Ready *** " << std::endl;
    }
    else {
        std::cout << " *** Unable to initialize Satcom subsystem *** " << std::endl;
    }
    Copy to clipboard

5. Register listener.

status = ntnMgr->registerListener(listener);
    Copy to clipboard

6. Set location fix (optional).

LocationFix params;
    // Update the location information from the external GNSS receiver
    err = ntnMgr->setLocationFix(params);
    Copy to clipboard

7. Enable NTN.

err = ntnMgr_->enableNtn(enable, isEmergency, iccid);
    Copy to clipboard

8. Get NTN capabilities.

err = ntnMgr_->getNtnCapabilities(cap);
    Copy to clipboard

9. Send data.

status = ntnMgr_->sendData(data, size, tid);
    Copy to clipboard

Last Published: Mar 31, 2026

[Previous Topic
Satcom](https://docs.qualcomm.com/bundle/publicresource/80-PF458-9/topics/satcom.md) [Next Topic
Diagnostics](https://docs.qualcomm.com/bundle/publicresource/80-PF458-9/topics/diag.md)