{"id":50564067,"url":"https://github.com/zimbora/xe310-multi-os","last_synced_at":"2026-06-04T13:01:26.859Z","repository":{"id":353135579,"uuid":"1215883129","full_name":"zimbora/xE310-multi-os","owner":"zimbora","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-29T15:29:49.000Z","size":228,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T17:14:04.489Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zimbora.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-20T10:50:55.000Z","updated_at":"2026-04-29T16:09:05.000Z","dependencies_parsed_at":"2026-05-08T21:01:21.233Z","dependency_job_id":null,"html_url":"https://github.com/zimbora/xE310-multi-os","commit_stats":null,"previous_names":["zimbora/xe310-multi-os"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zimbora/xE310-multi-os","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2FxE310-multi-os","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2FxE310-multi-os/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2FxE310-multi-os/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2FxE310-multi-os/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zimbora","download_url":"https://codeload.github.com/zimbora/xE310-multi-os/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2FxE310-multi-os/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33905359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"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":"2026-06-04T13:01:25.921Z","updated_at":"2026-06-04T13:01:26.852Z","avatar_url":"https://github.com/zimbora.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Modem Controller - Project Guidelines\n\n## Overview\n\nC++ library to control a modem via serial UART interface using AT commands.\n\n## Target Platforms\n\n- **Desktop**: Windows, macOS, Linux\n- **Embedded**: Zephyr OS with nRF54 microcontroller\n\nAll code must compile and run correctly on every target platform.\n\n## Architecture\n\n- Use a **Hardware Abstraction Layer (HAL)** to isolate platform-specific serial/UART code\n  - Desktop platforms use OS-native serial APIs (Win32, POSIX)\n  - Zephyr uses the Zephyr UART driver API\n- Core modem logic (AT command parsing, state machine) must be **platform-independent**\n- Prefer composition over inheritance for platform abstractions\n\n## Code Style\n\n- C++17 standard (compatible with Zephyr's toolchain)\n- Use `snake_case` for functions and variables, `PascalCase` for classes and structs\n- Use `#pragma once` for include guards\n- Keep headers minimal — forward-declare where possible\n- No exceptions on embedded targets — use error codes or `std::expected`-style patterns\n- No dynamic memory allocation in hot paths on embedded targets\n\n## Build System\n\n- **CMake** as the primary build system\n- Zephyr builds integrate via Zephyr's CMake system\n- Desktop builds use standard CMake workflows\n\n### Desktop (Windows)\n```bash\n.\\build_vs.ps1\n.\\build_vs.ps1 -Clean\n.\\build_vs.ps1 -Clean -Config Debug -Test\n.\\build_vs.ps1 -NoTests -Clean\n```\n\n### Linux\n```bash\n.\\build_linux.ps1\n```\n\n### Embedded (Zephyr)\n```bash\n.\\build_zephyr.ps1\n```\n\n## Conventions\n\n- AT commands are sent as null-terminated strings over UART\n- All UART operations must support both blocking and non-blocking modes\n- Timeouts must be configurable for every AT command exchange\n- Logging must be abstracted (use Zephyr logging on embedded, stdout/spdlog on desktop)\n\n## Static Analysis\n\nInstall [Cppcheck](https://cppcheck.sourceforge.io/) and run:\n\n```bash\ncppcheck --project=cppcheck.cppcheck --std=c++17 --enable=warning,style,performance,portability,information\n```\n\nTo generate a detailed checkers report:\n\n### Desktop (Windows)\n```bash\ncppcheck --project=cppcheck-windows.cppcheck --std=c++17 --enable=warning,style,performance,portability,information --checkers-report=checkers.txt\n```\n\n### Embedded (Zephyr)\n```bash\ncppcheck --project=cppcheck-zephyr.cppcheck --std=c++17 --enable=warning,style,performance,portability,information\n```\n\n## Testing\n\n- Unit tests use Google Test (desktop only)\n- Mock the HAL interface for testability\n- Integration tests run against real hardware or a modem simulator\n\n```bash\ncd build\nctest --output-on-failure\n```\n\n```bash\n.\\build\\tests\\Release\\test_network_lte.exe\n```\n\n\n## Directory Structure\n\n```\ninclude/          — Public headers\nsrc/              — Implementation files\nsrc/hal/          — Hardware abstraction layer implementations\ntests/            — Unit and integration tests\ncmake/            — CMake modules and toolchain files\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzimbora%2Fxe310-multi-os","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzimbora%2Fxe310-multi-os","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzimbora%2Fxe310-multi-os/lists"}