usrp-users@lists.ettus.com

Discussion and technical support related to USRP, UHD, RFNoC

View all threads

Tx example with RFNoC missing

C
carmixdev@gmail.com
Mon, May 12, 2025 1:48 PM

Hi, I noticed that on the UHD repository examples there isn’t an example that shows how to setup a TX streaming using RFNoC. There is the example for the RX but not the one with TX.

There’s an example for the replay block, but it can’t be used for transmitting a big file for instance.

I searched through the mailing list and found some posts of user that attached some rfnoc_tx_from_file, but they did it in 2018 and it was on UHD 3, it obviously doesn’t work on UHD 4.

Could someone post a simple example of transmitting from file using RFNoC 4?

Maybe it is considered trivial, but it could help as a reference.

Personally I tried to write a sample code, but as I stated in another thread I’m not sure it is working correctly.

Could anyone help here?

Hi, I noticed that on the UHD repository examples there isn’t an example that shows how to setup a TX streaming using RFNoC. There is the example for the RX but not the one with TX. There’s an example for the replay block, but it can’t be used for transmitting a big file for instance. I searched through the mailing list and found some posts of user that attached some rfnoc_tx_from_file, but they did it in 2018 and it was on UHD 3, it obviously doesn’t work on UHD 4. Could someone post a simple example of transmitting from file using RFNoC 4? Maybe it is considered trivial, but it could help as a reference. ![](data:text/plain;base64,I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dWhkL3R5cGVzL3R1bmVfcmVxdWVzdC5ocHA+CiNpbmNsdWRlIDx1aGQvdXNycC9tdWx0aV91c3JwLmhwcD4KI2luY2x1ZGUgPHVoZC91dGlscy9zYWZlX21haW4uaHBwPgojaW5jbHVkZSA8dWhkL3V0aWxzL3RocmVhZC5ocHA+CiNpbmNsdWRlIDx1aGQvcmZub2MvYmxvY2tfaWQuaHBwPgojaW5jbHVkZSA8dWhkL3Jmbm9jL2R1Y19ibG9ja19jb250cm9sLmhwcD4KI2luY2x1ZGUgPHVoZC9yZm5vYy9tYl9jb250cm9sbGVyLmhwcD4KI2luY2x1ZGUgPHVoZC9yZm5vYy9yYWRpb19jb250cm9sLmhwcD4KI2luY2x1ZGUgPHVoZC9yZm5vYy9yZXBsYXlfYmxvY2tfY29udHJvbC5ocHA+CiNpbmNsdWRlIDx1aGQvcmZub2NfZ3JhcGguaHBwPgojaW5jbHVkZSA8ZnN0cmVhbT4KCiNkZWZpbmUgQlVGRkVSU0laRSA4MTkyCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgVUhEX1NBRkVfTUFJTihpbnQgYXJnYywgY2hhciogYXJndltdKQp7CiAgICBjb25zdCBkb3VibGUgcmF0ZSA9IDYuMjVlNjsgICAgICAgICAgICAgICAgICAgICAvLyBTYW1wbGUgcmF0ZQogICAgY29uc3QgZG91YmxlIGZyZXEgPSA4NjguNWU2OyAgICAgICAgICAgICAgICAgICAvLyBDZW50ZXIgZnJlcXVlbmN5CiAgICBjb25zdCBkb3VibGUgZ2FpbiA9IDEwOyAgICAgICAgICAgICAgICAgICAgICAvLyBUWCBnYWluCiAgICBjb25zdCBzdHJpbmcgZGV2aWNlX2FkZHIgPSAidHlwZT14MzAwLGFkZHI9MTkyLjE2OC40MC4yIjsgICAgICAgICAgLy8gRGVmYXVsdCAoZmlyc3QgZGV2aWNlKQogICAgY29uc3Qgc3RyaW5nIGZpbGVuYW1lID0gInJhd2lxLnNjMTYiOwogICAgCiAgICB1aGQ6OnJmbm9jOjpyZm5vY19ncmFwaDo6c3B0ciBncmFwaDsKICAgIHVoZDo6cmZub2M6OmJsb2NrX2lkX3QgcmFkaW9fY29udHJvbF9pZDsKICAgIHVoZDo6cmZub2M6OnJhZGlvX2NvbnRyb2w6OnNwdHIgcmFkaW9fY29udHJvbCA7CiAgICB1aGQ6OnJmbm9jOjpibG9ja19pZF90IGR1Y19jb250cm9sX2lkOwogICAgdWhkOjpyZm5vYzo6ZHVjX2Jsb2NrX2NvbnRyb2w6OnNwdHIgZHVjX2NvbnRyb2wgOwoKICAgIGdyYXBoID0gdWhkOjpyZm5vYzo6cmZub2NfZ3JhcGg6Om1ha2UoZGV2aWNlX2FkZHIuY19zdHIoKSk7CgogICAgcmFkaW9fY29udHJvbF9pZCA9IHVoZDo6cmZub2M6OmJsb2NrX2lkX3QoMCwgIlJhZGlvIiwgMSkgOwogICAgcmFkaW9fY29udHJvbCA9IGdyYXBoLT5nZXRfYmxvY2s8dWhkOjpyZm5vYzo6cmFkaW9fY29udHJvbD4ocmFkaW9fY29udHJvbF9pZCkgOwogICAgcmFkaW9fY29udHJvbC0+c2V0X3R4X2dhaW4oZ2FpbiwwKTsKICAgIHJhZGlvX2NvbnRyb2wtPnNldF90eF9mcmVxdWVuY3koZnJlcSwwKTsKICAgIGlmKCAhcmFkaW9fY29udHJvbCApIHsKICAgICAgICBjb3V0IDw8ICJFUlJPUjogRmFpbGVkIHRvIGZpbmQgUmFkaW8gQmxvY2sgQ29udHJvbGxlciEiIDw8IGVuZGwgOwogICAgfQogICAgY291dCA8PCAiVXNpbmcgcmFkaW8gIiA8PCByYWRpb19jb250cm9sX2lkIDw8IGVuZGwgOwoKICAgIC8vIERVQyBCbG9jayBDb250cm9sbGVyCiAgICBkdWNfY29udHJvbF9pZCA9IHVoZDo6cmZub2M6OmJsb2NrX2lkX3QoMCwgIkRVQyIsIDEpIDsKCiAgICBkdWNfY29udHJvbCA9IGdyYXBoLT5nZXRfYmxvY2s8dWhkOjpyZm5vYzo6ZHVjX2Jsb2NrX2NvbnRyb2w+KGR1Y19jb250cm9sX2lkKSA7CiAgICBpZiggIWR1Y19jb250cm9sICkgewogICAgICAgIGNvdXQgPDwgIkVSUk9SOiBGYWlsZWQgdG8gZmluZCBEVUMgQmxvY2sgQ29udHJvbGxlciEiIDw8IGVuZGwgOwogICAgfQogICAgY291dCA8PCAiVXNpbmcgZHVjICIgPDwgZHVjX2NvbnRyb2xfaWQgPDwgZW5kbCA7CiAgICBkdWNfY29udHJvbC0+c2V0X291dHB1dF9yYXRlKDIwMGU2LDApOwogICAgZHVjX2NvbnRyb2wtPnNldF9mcmVxKDAsMCk7CiAgICBkdWNfY29udHJvbC0+c2V0X2lucHV0X3JhdGUocmF0ZSwwKTsKICAgIHVoZDo6c3RyZWFtX2FyZ3NfdCBzdHJlYW1fYXJncygic2MxNiIsICJzYzE2Iik7CiAgICBhdXRvIHR4X3N0cmVhbSA9IGdyYXBoLT5jcmVhdGVfdHhfc3RyZWFtZXIoMSwgc3RyZWFtX2FyZ3MpOwogICAgZ3JhcGgtPmNvbm5lY3QodHhfc3RyZWFtLDAsZHVjX2NvbnRyb2wtPmdldF91bmlxdWVfaWQoKSwwKTsKICAgIGdyYXBoLT5jb21taXQoKTsKCiAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86OnNlY29uZHMoMSkpOwoKCiAgICBpbnQgayA9IDA7CiAgICBpZnN0cmVhbSAqaW5maWxlOwogICAgaW5maWxlID0gbmV3IGlmc3RyZWFtKGZpbGVuYW1lLCBzdGQ6Omlvczo6YmluYXJ5KTsKCiAgICB1aGQ6OnR4X21ldGFkYXRhX3QgbWQ7CiAgICBtZC5zdGFydF9vZl9idXJzdCA9IHRydWU7IC8vIFN0YXJ0IG9mIGJ1cnN0CiAgICBtZC5lbmRfb2ZfYnVyc3QgPSBmYWxzZTsgIC8vIFdlIHdpbGwgc3RvcCB0aGlzIGxhdGVyCiAgICBtZC5oYXNfdGltZV9zcGVjID0gZmFsc2U7CgogICAgc3RkOjp2ZWN0b3I8c3RkOjpjb21wbGV4PHNob3J0Pj4gYnVmZihCVUZGRVJTSVpFKTsKICAgIGNvdXQgPDwgIlN0YXJ0aW5nIHRyYW5zbWlzc2lvbiIgPDwgZW5kbDsKICAgIHdoaWxlICghaW5maWxlLT5lb2YoKSkgewogICAgICAgIGluZmlsZS0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmYnVmZi5mcm9udCgpKSwgQlVGRkVSU0laRSAqIHNpemVvZihjb21wbGV4PHNob3J0PikpOwogICAgICAgIHNpemVfdCBzYW1wbGVzX3JlYWQgPSBpbmZpbGUtPmdjb3VudCgpIC8gc2l6ZW9mKGNvbXBsZXg8c2hvcnQ+KTsKICAgICAgICBpZiAoc2FtcGxlc19yZWFkID09IDApCiAgICAgICAgewogICAgICAgICAgICBjb3V0PDwiTm8gc2FtcGxlcyByZWFkXHJcbiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgCiAgICAgICAgdHhfc3RyZWFtLT5zZW5kKCZidWZmLmZyb250KCksIHNhbXBsZXNfcmVhZCwgbWQpOwogICAgICAgIG1kLnN0YXJ0X29mX2J1cnN0ID0gZmFsc2U7CiAgICB9CiAgICBtZC5lbmRfb2ZfYnVyc3QgPSB0cnVlOwogICAgdHhfc3RyZWFtLT5zZW5kKCIiLCAwLCBtZCk7CiAgICBpbmZpbGUtPmNsb3NlKCk7CiAgICBjb3V0IDw8ICJUcmFuc21pc3Npb24gY29tcGxldGUuIiA8PCBlbmRsOwoKCgogICAgcmV0dXJuIDA7Cn0K)Personally I tried to write a sample code, but as I stated in another thread I’m not sure it is working correctly. Could anyone help here?