{"id":22448441,"url":"https://github.com/yuvadm/rustl-sdr","last_synced_at":"2026-03-12T07:02:29.699Z","repository":{"id":46001118,"uuid":"141984467","full_name":"yuvadm/rustl-sdr","owner":"yuvadm","description":"A pure Rust implementation of the RTL-SDR driver","archived":false,"fork":false,"pushed_at":"2021-04-28T14:21:16.000Z","size":95,"stargazers_count":21,"open_issues_count":1,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-01T21:53:21.127Z","etag":null,"topics":["driver","libusb","rtl-sdr","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yuvadm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-23T08:25:01.000Z","updated_at":"2023-11-22T02:35:05.000Z","dependencies_parsed_at":"2022-07-18T17:00:46.324Z","dependency_job_id":null,"html_url":"https://github.com/yuvadm/rustl-sdr","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/yuvadm/rustl-sdr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuvadm%2Frustl-sdr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuvadm%2Frustl-sdr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuvadm%2Frustl-sdr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuvadm%2Frustl-sdr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yuvadm","download_url":"https://codeload.github.com/yuvadm/rustl-sdr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuvadm%2Frustl-sdr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30417686,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T06:40:58.731Z","status":"ssl_error","status_checked_at":"2026-03-12T06:40:40.296Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["driver","libusb","rtl-sdr","rust"],"created_at":"2024-12-06T04:27:50.450Z","updated_at":"2026-03-12T07:02:29.682Z","avatar_url":"https://github.com/yuvadm.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RusTL-SDR\n\nA pure Rust implementation of the RTL-SDR driver, for shits and giggles.\n\nThis is mostly an exercise in writing low-level driver code.\n\nUnusable, and highly unlikely to ever become usable. But it's fun.\n\nFor real alternatives check out the original [librtlsdr](https://github.com/osmocom/rtl-sdr/) implementation or the high-level [rtlsdr_mt](https://github.com/kchmck/rtlsdr_mt.rs) Rust bindings.\n\n## Usage\n\nInstall the crate in your `Cargo.toml`:\n\n```toml\n[dependencies]\nrustl-sdr = \"0.2\"\n```\n\nUse in your code:\n\n```rust\nextern crate rustl_sdr;\n\nfn foo() {\n    rtlsdr = rustl_sdr::RtlSdr::new(\u0026ctx);\n    rtlsdr.init();\n    rtlsdr.do_stuff();\n}\n```\n\nOr run one of the example binaries:\n\n```bash\n$ RUST_LOG=info cargo run --bin rustl_fm\n```\n\n## Dev\n\nThe usual:\n\n```bash\n$ cargo build\n$ cargo test -- --nocapture\n```\n\nSince there isn't (?) any good USB device mocking setup, for tests to pass an RTL-SDR device must be connected.\n\n## Design\n\n### Overview\n\nRusTL-SDR is very similar to the original rtl-sdr driver. It uses libusb, via the [rusb](https://github.com/a1ien/rusb/) bindings, as the main interface to issue commands to the rtl-sdr USB dongle.\n\n### Lifecycle\n\nDevices generally go through the following lifecycle:\n\n1. Get a libusb context/handle, and find a compatible and supported RTL-SDR device\n2. Initialize the device baseband\n3. Probe the device for known tuners via the I2C interface\n4. Run any special initialization required for the detected tuner\n5. Interact with the device, usually this is where samples are read\n6. Deinitialize the tuner\n7. Deinitialize the baseband\n8. Close the USB handle\n\n## License\n\n[GPLv3](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuvadm%2Frustl-sdr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyuvadm%2Frustl-sdr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuvadm%2Frustl-sdr/lists"}