{"id":22844727,"url":"https://github.com/trembel/fh101rf","last_synced_at":"2025-08-11T02:31:19.030Z","repository":{"id":264615404,"uuid":"893812306","full_name":"trembel/fh101rf","owner":"trembel","description":"FH101RF Driver","archived":false,"fork":false,"pushed_at":"2024-11-25T10:38:42.000Z","size":1088,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-25T11:31:22.571Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trembel.png","metadata":{"files":{"readme":"README.org","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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-25T08:57:30.000Z","updated_at":"2024-11-25T10:35:43.000Z","dependencies_parsed_at":"2024-11-25T11:32:07.364Z","dependency_job_id":"574507d3-ed8f-4fed-9bee-ff68507c2087","html_url":"https://github.com/trembel/fh101rf","commit_stats":null,"previous_names":["trembel/fh101rf"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trembel%2Ffh101rf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trembel%2Ffh101rf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trembel%2Ffh101rf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trembel%2Ffh101rf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trembel","download_url":"https://codeload.github.com/trembel/fh101rf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229483052,"owners_count":18080072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-12-13T03:00:56.822Z","updated_at":"2025-08-11T02:31:19.004Z","avatar_url":"https://github.com/trembel.png","language":"C","readme":"#+TITLE: FH101RF Driver\n#+AUTHOR: Jonah Imfeld, Silvano Cortesi\n#+DATE: 25.04.2025\n#+LICENSE: LGPL-3.0\n\nThis repository contains driver for the FH101RF tri-band Wake-Up Radio (433MHz, 868/915MHz, 2.4GHz).\n\n#+begin_quote\nThe FH101RF RFicient ® Ultra-low Power Wake-Up Receiver is a tri-band receiver for simultaneous reception of OOK modulated signals in the SRD frequency bands 433 MHz, 868 MHz or 915 MHz, and 2.4 GHz, with a sensitivity of typically -75 dBm. It allows continuous monitoring at microwatt power consumption and responds in milliseconds, enabling 24/7 connectivity and up to 10 years of battery life. The integrated ULP receiver operates without a microcontroller, recognizing two wake-up patterns and a 16-bit ID. It generates a control signal to activate application hardware like an MCU, allowing direct addressing of individual RF modules. Data packets are stored in three built-in FIFO buffers, and data events can trigger an IRQ signal for external circuitry, supporting deep-sleep modes for peripherals. RFicient ® uses binary correlators to detect 31-bit preambles, tolerating bit-error rates up to 16 %. -- [[https://www.iis.fraunhofer.de/de/ff/sse/ic-design/rf-ic/wakeup.html][Fraunhofer IIS]]\n#+end_quote\n\nIf you use this driver in an academic or industrial context, please cite the following publication:\n\n#+begin_src bibtex\n@misc{schultess25_wakem,\n  author         = {Lukas Schulthess and Silvano Cortesi and Michele Magno},\n  title          = {Wakemod: a 6.9uw Wake-Up Radio Module With -72.6dbm Sensitivity for On-Demand Iot},\n  year           = 2025,\n  doi            = {10.48550/ARXIV.2505.21529},\n  url            = {https://arxiv.org/abs/2505.21529},\n  eprint         = {2505.21529},\n  archiveprefix  = {arXiv},\n  primaryclass   = {cs.NI},\n  DATE_ADDED     = {Sun Jun 1 12:42:45 2025},\n}\n#+end_src\n\nThe repository is build on top of the datasheet [[https://cdn.shopify.com/s/files/1/0315/0879/1435/files/FH101RF_LZE_Datasheet_Revision_1p3b_A_1.pdf?v=1722410333][FH101RF_LZE_Datasheet_Revision_1p3b_A_1]] and contains:\n\n** The [[file:fh101rf.yaml][YAML]] specification of the driver, as used by Reginald to create the struct fields\n*** YAML Transpile Instruction\nThe yaml file can be automatically parsed using [[https://github.com/schilkp/reginald][Reginald]], based on branch ~schilkp/rust~, commit ~dc4ff0d~.\n\n**** Rust version\nThe rust version is built (from within [[file:rust/src/][rust/src/]]) using:\n#+begin_src sh\nreginald gen -i ../../fh101rf.yaml -o registers.rs rs-structs --enum-derive \"Debug\" --struct-derive \"Debug\" --enum-derive \"PartialEq\" --struct-derive \"PartialEq\"\n#+end_src\n\n**** C version\nThe C version is built (from within [[file:c/][c/]]) using:\n#+begin_src sh\nreginald gen -i ../fh101rf.yaml -o fh101rf_reg.h c-funcpack\n#+end_src\n\n**** Markdown Datasheet\nThe [[file:fh101rf_reg.md][markdown datasheet]] is build (from within [[file:README.org][/]]) by using:\n#+begin_src sh\nreginald gen -i ./fh101rf.yaml -o fh101rf_reg.md md-datasheet\n#+end_src\n\n** Rust driver\nThe rust driver consists of [[file:rust/src/lib.rs][lib.rs]], [[file:rust/src/device.rs][device.rs]], [[file:rust/src/config.rs][config.rs]], [[file:rust/src/error.rs][error.rs]] and [[file:rust/src/registers.rs][registers.rs]]. ~registers.rs~ is the only auto-created file using reginald, and contains the register structs as well as pack/unpack functions.\n\n** C driver\nThe C driver consists of [[file:c/fh101rf.c][fh101rf.c]], [[file:c/fh101rf.h][fh101rf.h]] and [[file:c/fh101rf_reg.h][fh101rf_reg.h]]. ~fh101rf_reg.h~ is the only auto-created file using reginald, and contains the register structs as well as pack/unpack functions.\n\n** Example projects for C and Rust\nThe example projects make automatically use of the drivers described above, and can be used as a reference for the implementation. The following pinout holds:\n\n| Peripheral | Functionality                         |\n|------------+---------------------------------------|\n| SPI1       | SPI peripheral used for communication |\n| PA5        | SCK pin used together with SPI1       |\n| PA7        | MOSI pin used together with SPI1      |\n| PA6        | MISO pin used together with SPI1      |\n| PC9        | CS pin used for SPI                   |\n| PC6        | RST pin                               |\n| PC7        | IRQ pin (GPO1)                        |\n| GPDMA1_CH0 | DMA channel for TX on SPI1            |\n| GPDMA1_CH1 | DMA channel for RX on SPI1            |\n\n- *Note:* The C example does not use the MISO pin, but uses the SPI peripheral in Half-Duplex mode\n- *Note:* The Rust example does use MOSI and MISO pin (SPI in Full-Duplex), thus must be connected as in chapter 6.2 of the datasheet\n","funding_links":[],"categories":["Driver crates"],"sub_categories":["Other"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrembel%2Ffh101rf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrembel%2Ffh101rf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrembel%2Ffh101rf/lists"}