{"id":13423305,"url":"https://github.com/FactbirdHQ/atat","last_synced_at":"2025-03-15T17:31:39.253Z","repository":{"id":42138270,"uuid":"228803522","full_name":"FactbirdHQ/atat","owner":"FactbirdHQ","description":"no_std crate for parsing AT commands","archived":false,"fork":false,"pushed_at":"2025-03-03T08:45:11.000Z","size":761,"stargazers_count":121,"open_issues_count":13,"forks_count":34,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-11T21:51:29.389Z","etag":null,"topics":["at-command","embedded","embedded-hal-driver","no-std","rust","uart"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FactbirdHQ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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":"2019-12-18T09:22:48.000Z","updated_at":"2025-03-03T08:45:15.000Z","dependencies_parsed_at":"2023-12-11T09:30:47.677Z","dependency_job_id":"78733c47-965d-4577-9791-788fecf4593d","html_url":"https://github.com/FactbirdHQ/atat","commit_stats":null,"previous_names":["factbirdhq/atat","blackbirdhq/atat"],"tags_count":75,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FactbirdHQ%2Fatat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FactbirdHQ%2Fatat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FactbirdHQ%2Fatat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FactbirdHQ%2Fatat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FactbirdHQ","download_url":"https://codeload.github.com/FactbirdHQ/atat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243766790,"owners_count":20344812,"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":["at-command","embedded","embedded-hal-driver","no-std","rust","uart"],"created_at":"2024-07-31T00:00:29.090Z","updated_at":"2025-03-15T17:31:39.215Z","avatar_url":"https://github.com/FactbirdHQ.png","language":"Rust","funding_links":[],"categories":["Component abstraction crates"],"sub_categories":["Other"],"readme":"# ATAT\n\n![Test][test]\n[![Crates.io Version][crates-io-badge]][crates-io]\n[![Crates.io Downloads][crates-io-download-badge]][crates-io-download]\n[![chat][chat-badge]][chat]\n![No Std][no-std-badge]\n\n\u003cdiv\u003e\n  \u003cimg style=\"vertical-align:middle; padding-bottom: 20px; padding-right: 40px;\"  src=\"https://cdn.pixabay.com/photo/2012/04/12/12/24/star-wars-29792_960_720.png\" alt=\"ATAT\" width=\"250\" /\u003e\n\u003c/div\u003e\n\n`#![no_std]` crate for parsing AT commands ([Hayes command set](https://en.wikipedia.org/wiki/Hayes_command_set))\n\nA driver support crate for AT-command based serial modules.\n\n## AT Best practices\n\nThis crate attempts to work from these AT best practices:\n\n\u003e - The DTE shall flush the AT channel (i.e. check if there are data waiting to be read) before sending a new AT command\n\u003e - The DTE shall detect/process complete lines (see the S3, S4 and V0/V1 settings), so they can be processed with a function that handles responses\n\u003e - The DTE shall handle the case of unexpected spaces or line endings\n\u003e - The DTE shall handle all the URCs: it can simply ignore them (not suggested) or, better, take a proper action\n\u003e - The DTE shall know what answer is expected and shall wait until it is received (i.e. final result code only or informationtext response + final result code)\n\u003e - The final result code marks the end of an AT command and can be OK, ERROR or ABORTED: when the final result is an error, be sure to handle it before continuing with the next AT command\n\u003e - The information text response format is command specific. The DTE will need explicit handling for each one. It is suggested to consult the u-blox AT Commands Manual [1]\n\u003e - It is suggested not to strictly parse information text responses but to checkif they contain interesting keywords and/or parameters\n\u003e - The DTE shall know if the issued AT command can be aborted or not\n\u003e - Some AT commands could output the final result code after some seconds, in this case check on AT manual for the suggested estimated response time. If the timeout expires then a decision should be taken accordingly: e.g. if the command can be aborted then try to abort it, etc ...\n\u003e - It is very useful, for debugging an application, to log all the command lines sent to the DCE and what is received from it\n\u003e - Create a state machine for the AT parser (i.e. idle, waiting_response, data_mode)\n\u003e - The DTE shall wait some time (the recommended value is at least 20 ms) after the reception of an AT command final response or URC before issuing a new AT commandto give the module the opportunity to transmit the buffered URCs. Otherwise the collision of the URCs with the subsequent AT command is still possible\n\u003e - The DTE shall be aware that, when using a serial port without HW flow control, the first character is used to wake up the module from power saving\n\n## [Documentation](https://docs.rs/atat/latest)\n\n## Tests\n\n\u003e The crate is covered by tests. These tests can be run by `cargo test --tests`, and are run by the CI on every push.\n\n## Examples\n\nThe crate has examples for usage with [embassy] for `#![no_std]` and [tokio] for `std`.\n\nThe samples can be built using `cargo +nightly run --bin embassy --features embedded --target thumbv6m-none-eabi` and `cargo +nightly run --example std-tokio --features std`.\n\nFurthermore the crate has been used to build initial drivers for U-Blox cellular modules ([ublox-cellular-rs]) and U-Blox short-range modules ([ublox-short-range-rs])\n\n[embassy]: https://crates.io/crates/embassy-executor\n[tokio]: https://crates.io/crates/tokio\n[ublox-short-range-rs]: https://github.com/BlackbirdHQ/ublox-short-range-rs\n[ublox-cellular-rs]: https://github.com/BlackbirdHQ/ublox-cellular-rs\n\n## Releasing to crates.io\n\nThis workspace uses `cargo-release` to do workspace releases to crates.io. It can be installed through cargo with `cargo install cargo-release`. The steps involved in a new release are:\n\n1. Run `cargo release --dry-run -- major|minor|patch`, and verify the output\n2. Run `cargo release -- major|minor|patch`, to release\n\n## About\n\n- Minimum rustc version 1.79\n- Tested and built using stable toolchain\n\n## Supported Crates\n\nThe following dependent crates provide platform-agnostic device drivers built on `embedded-hal` which also implement this crate's traits:\n\n| Device Name            | Description                                                                                    | Crate + Docs                                                                                                                                |\n|------------------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|\n| [ublox-short-range-rs] | Driver crate for U-Blox host-based short range devices (wifi and BT) with AT-command interface | [![crates.io][ublox-short-range-rs-crate-img]][ublox-short-range-rs] [![docs.rs][ublox-short-range-rs-docs-img]][ublox-short-range-rs-docs] |\n| [ublox-cellular-rs]    | Driver crate for U-Blox host-based cellular devices with AT-command interface                  | [![crates.io][ublox-cellular-rs-crate-img]][ublox-cellular-rs-crates] [![docs.rs][ublox-cellular-rs-docs-img]][ublox-cellular-rs-docs]      |\n| [esp-at-nal]           | ESP-AT network layer driver for no_std                                                         | [![crates.io][esp-at-nal-crate-img]][esp-at-nal-crate] [![docs.rs][esp-at-nal-docs-img]][esp-at-nal-docs]                                   |\n| [moko-mkl62ba]         | Driver crate for the Moko MKL62BA LoRaWAN module                                               | [![crates.io][moko-mkl62ba-crate-img]][moko-mkl62ba-crate] [![docs.rs][moko-mkl62ba-docs-img]][moko-mkl62ba-docs]                           |     \n| [seeed-lora-e5]        | Driver crate for the Seeed Lora-E5 LoRaWAN module                                              | [![crates.io][seeed-lora-e5-crate-img]][seeed-lora-e5-crate] [![docs.rs][seeed-lora-e5-docs-img]][seeed-lora-e5-docs]                       |     \n\n[ublox-short-range-rs]: https://github.com/BlackbirdHQ/ublox-short-range-rs\n[ublox-short-range-rs-crate-img]: https://img.shields.io/crates/v/ublox-short-range-rs.svg\n[ublox-short-range-rs-docs-img]: https://docs.rs/ublox-short-range-rs/badge.svg\n[ublox-short-range-rs-docs]: https://docs.rs/ublox-short-range-rs/\n[ublox-cellular-rs]: https://github.com/BlackbirdHQ/ublox-cellular-rs\n[ublox-cellular-rs-crate-img]: https://img.shields.io/crates/v/ublox-cellular-rs.svg\n[ublox-cellular-rs-crates]: https://crates.io/crates/ublox-cellular-rs\n[ublox-cellular-rs-docs-img]: https://docs.rs/ublox-cellular-rs/badge.svg\n[ublox-cellular-rs-docs]: https://docs.rs/ublox-cellular-rs/\n[espresso]: https://github.com/dbrgn/espresso\n[esp-at-nal]: https://github.com/pegasus-aero/rt-esp-at-nal\n[esp-at-nal-crate-img]: https://img.shields.io/crates/v/esp-at-nal.svg\n[esp-at-nal-crate]: https://crates.io/crates/esp-at-nal\n[esp-at-nal-docs-img]: https://docs.rs/esp-at-nal/badge.svg\n[esp-at-nal-docs]: https://docs.rs/esp-at-nal/\n[moko-mkl62ba]: https://github.com/mvniekerk/moko-mkl62ba-at-commands-rs\n[moko-mkl62ba-crate]: https://crates.io/crates/moko-mkl62ba-at-commands-rs\n[moko-mkl62ba-crate-img]: https://img.shields.io/crates/v/moko-mkl62ba-at-commands.svg\n[moko-mkl62ba-docs-img]: https://docs.rs/moko-mkl62ba-at-commands/badge.svg\n[moko-mkl62ba-docs]: https://docs.rs/moko-mkl62ba-at-commands/\n[seeed-lora-e5]: https://github.com/mvniekerk/seeed-lora-e5-at-commands\n[seeed-lora-e5-crate]: https://crates.io/crates/seeed-lora-e5-at-commands\n[seeed-lora-e5-crate-img]: https://img.shields.io/crates/v/seeed-lora-e5-at-commands.svg\n[seeed-lora-e5-docs-img]: https://docs.rs/seeed-lora-e5-at-commands/badge.svg\n[seeed-lora-e5-docs]: https://docs.rs/seeed-lora-e5-at-commands/\n\n## Features\n\n- `derive`: Enabled by default. Re-exports `atat_derive` to allow deriving `Atat__` traits.\n- `bytes`: Enabled by default. Re-exports `serde-bytes` \u0026 `heapless-bytes` to allow serializing \u0026 deserializing non-quoted byte slices correctly.\n- `log`: Disabled by default. Enable log statements on various log levels to aid debugging. Powered by `log`.\n- `defmt`: Disabled by default. Enable defmt log statements on various log levels to aid debugging. Powered by `defmt`.\n- `custom-error-messages`: Disabled by default. Allows errors to contain custom error messages up to 64 characters, parsed by `AtDigest::custom_error`.\n- `hex_str_arrays`: Disabled by default. Needs `#![feature(generic_const_exprs)]` Nightly feature. This allows for hex strings to be serialized to a fix-width byte array.\n- `heapless`: Enable heapless feature on `serde_at`. This enables heapless support and adds some specialized parsing structs.\n\n## Chat / Getting Help\n\nIf you have questions on the development of ATAT or want to write a driver\nbased on it, feel free to join our matrix room at `#atat:matrix.org`!\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or\n  http://www.apache.org/licenses/LICENSE-2.0)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\n\u003c!-- Badges --\u003e\n\n[test]: https://github.com/BlackbirdHQ/atat/actions/workflows/ci.yml/badge.svg\n[crates-io]: https://crates.io/crates/atat\n[chat]: https://matrix.to/#/!ocRyOwQJhEWrphujkM:matrix.org?via=chat.berline.rs\u0026via=matrix.org\n[chat-badge]: https://img.shields.io/badge/chat-atat%3Amatrix.org-brightgreen\n[crates-io-badge]: https://img.shields.io/crates/v/atat.svg?maxAge=3600\n[crates-io-download]: https://crates.io/crates/atat\n[crates-io-download-badge]: https://img.shields.io/crates/d/atat.svg?maxAge=3600\n[no-std-badge]: https://img.shields.io/badge/no__std-yes-blue\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFactbirdHQ%2Fatat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FFactbirdHQ%2Fatat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFactbirdHQ%2Fatat/lists"}