{"id":21186657,"url":"https://github.com/geontech/meta-redhawk-apps","last_synced_at":"2026-04-02T02:10:12.465Z","repository":{"id":146038859,"uuid":"113690849","full_name":"Geontech/meta-redhawk-apps","owner":"Geontech","description":null,"archived":false,"fork":false,"pushed_at":"2020-11-16T20:55:54.000Z","size":1352,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"develop","last_synced_at":"2026-01-02T23:13:09.499Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"BitBake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Geontech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-09T18:14:54.000Z","updated_at":"2020-11-16T20:56:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"523c2bf3-8999-46f6-a1dd-b36dbabf317e","html_url":"https://github.com/Geontech/meta-redhawk-apps","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Geontech/meta-redhawk-apps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geontech%2Fmeta-redhawk-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geontech%2Fmeta-redhawk-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geontech%2Fmeta-redhawk-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geontech%2Fmeta-redhawk-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Geontech","download_url":"https://codeload.github.com/Geontech/meta-redhawk-apps/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geontech%2Fmeta-redhawk-apps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31294416,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:43:37.129Z","status":"online","status_checked_at":"2026-04-02T02:00:08.535Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-20T18:25:05.094Z","updated_at":"2026-04-02T02:10:12.432Z","avatar_url":"https://github.com/Geontech.png","language":"BitBake","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meta-REDHAWK-Apps\n\nThis layer provides an RFNoC + REDHAWK demo platform for the Ettus Research E310 SG1.  Included are example Programmable and Persona Devices as well as custom implemenations for existing Components (that have hardware implementations via RFNoC) following a the discussion, [here](https://geontech.com/persona-device-pattern/).\n\n \u003e **IMPORTANT:** One should expect that the components and devices provided in this layer are only compatible with the Ettus E310 SG1 device (`MACHINE` type `ettus-e3xx-sg1`).  However, this is _NOT_ enforced explicitly in the recipes provided by this layer.\n\n \u003e **IMPORTANT:** This device does have transmitters, however, this demo does not make use of them; this demo is **receive only**.\n\n## Example Image\n\nThe example disk image is `redhawk-usrp-uhd-rfnoc-image`.  On boot-up, it will start the following:\n\n1. OmniNames\n2. OmniEvents\n3. REDHAWK_DEV Domain\n4. Device Manager:\n    2. RFNoC_DefaultPersona_1 - FIR and Decimate blocks available\n    3. RFNoC_DefaultPersona_2 - FFT block available (configured to be magnitude)\n    4. RFNoC_ProgrammableDevice - FEI Tuner control\n\nThe following hardware-accelerated Components are installed:\n\n1. rh.TuneFilterDecimate\n2. rh.psd\n3. RFNoC_TestComponent\n\n \u003e NOTE: The RFNoC_TestComponent allows you to read and write key-value attributes to named block IDs, serving as a model for how (1) and (2) can function as REDHAWK-facing proxies to blocks via the included RFNoC integration SoftPkg library, `RFNoC_RH`.\n\n## Theory of Operation\n\nThe Programmable and Persona Device pattern description in the REDHAWK Documentation and its API leave considerable room for implementation choices.  The general theory of operation discussed in the reference discussion (above) is that we have _Persona_ Executable Devices that identify FPGA firmware loads containing some hardware-accelerated implementations of REDHAWK Components.  The _Programmable_ device is in charge of managing the FPGA loads and exposing the FEI (i.e., even though the USRP_UHD is installed, you do not need it running if you're using the RFNoC_ProgrammableDevice).  Because a firmware must be loaded in order to use the FEI, the steps of operation become:\n\n1. Allocate the Persona device containing your preferred hardware load.  If successful, the parent Programmable device will indicate the state as ACTIVE in the `hw_load_statuses` list.\n2. Load a waveform with the accelerated components.\n3. Allocate the FEI Device (to activate the tuner) if the hardware load contains the Radio block and connect it to your waveform.\n\nBecause of the nature of the underlying tooling, the Programmable device checks the default image location to see if it exists as a link or not (`/usr/share/uhd/images/usrp_e310_fpga.bit`).  If it exists on start-up, then every hardware load request must have that same name.  If you're allocating a persona but the `hw_load_statuses` still doesn't indicate the load as active, verify that `.bit` file is unlinked and re-start the node.\n\n## Demos\n\nThere are 2 waveforms installed, each utilizing one of the installed default personas and the FEI tuner in the programmable device.  The waveform name to persona relationships are as follows:\n\n1. RFNoC_TFD_Waveform -\u003e RFNoC_DefaultPersona_1\n2. RFNoC_PSD_Waveform -\u003e RFNoC_DefaultPersona_2\n\nIn order to run these, you need a combination of the Python shell and an IDE connected over the network to the E3xx REDHAWK_DEV Domain.  Using the IDE to connect to a Domain is covered in the REDHAWK documentation and many other resources.  The Python shell on the other hand is a bit more specific to this project since we need to perform an empty allocation against a persona ahead of launching the waveform.  We then must assign the waveforms component(s) to the persona supplying the block.  For example, allocating and deallocating the first persona would look like this:\n\n```python\n\u003e\u003e\u003e from ossie.utils import redhawk\n\u003e\u003e\u003e dom = redhawk.attach()\n\u003e\u003e\u003e pd = dom.devices[0]; pd.instanceName\n'RFNoC_DefaultPersona_1'\n\u003e\u003e\u003e pd.allocateCapacity([])\nTrue\n# All done?\n\u003e\u003e\u003e pd.deallocateCapacity([])\n```\n\nWhile the Persona is allocated, you should be able to launch the corresponding waveform via the IDE, assigning the component to the appropriate Persona you just allocated.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeontech%2Fmeta-redhawk-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeontech%2Fmeta-redhawk-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeontech%2Fmeta-redhawk-apps/lists"}