{"id":31595200,"url":"https://github.com/scrutinydebugger/scrutiny-embedded","last_synced_at":"2026-03-12T03:00:58.327Z","repository":{"id":40604279,"uuid":"507730367","full_name":"scrutinydebugger/scrutiny-embedded","owner":"scrutinydebugger","description":"Scrutiny embedded C++ instrumentation library","archived":false,"fork":false,"pushed_at":"2026-02-22T14:14:10.000Z","size":584,"stargazers_count":46,"open_issues_count":4,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-02-22T19:43:26.765Z","etag":null,"topics":["calibration-tool","can","debugging","debugging-tool","embedded","embedded-systems","graphing","hil","instrumentation","real-time","runtime-debugger","serial","testing","testing-tool"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scrutinydebugger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"scrutinydebugger"}},"created_at":"2022-06-27T01:51:17.000Z","updated_at":"2026-02-22T14:12:40.000Z","dependencies_parsed_at":"2025-12-05T13:02:36.139Z","dependency_job_id":null,"html_url":"https://github.com/scrutinydebugger/scrutiny-embedded","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/scrutinydebugger/scrutiny-embedded","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrutinydebugger%2Fscrutiny-embedded","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrutinydebugger%2Fscrutiny-embedded/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrutinydebugger%2Fscrutiny-embedded/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrutinydebugger%2Fscrutiny-embedded/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scrutinydebugger","download_url":"https://codeload.github.com/scrutinydebugger/scrutiny-embedded/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrutinydebugger%2Fscrutiny-embedded/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30413612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T00:40:14.898Z","status":"online","status_checked_at":"2026-03-12T02:00:07.260Z","response_time":114,"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":["calibration-tool","can","debugging","debugging-tool","embedded","embedded-systems","graphing","hil","instrumentation","real-time","runtime-debugger","serial","testing","testing-tool"],"created_at":"2025-10-06T03:58:26.732Z","updated_at":"2026-03-12T03:00:58.281Z","avatar_url":"https://github.com/scrutinydebugger.png","language":"C++","funding_links":["https://github.com/sponsors/scrutinydebugger"],"categories":[],"sub_categories":[],"readme":"# Scrutiny Embedded\nScrutiny Debugger embedded C++ instrumentation library (and C Wrapper).\nThis library must be linked against your C/C++ project and called periodically.\n\nThe library has 2 data streams going in and out. It is the responsability of the integrator to bring the data to and from a hardware communication device such as a Serial Port, a CAN bus, IP stack or any other. \n\nFor the integration guide, see : https://scrutinydebugger.com/guide-instrumentation.html\n\n## Troubleshooting\n\nRefer to the [troubleshooting guide online.](https://scrutinydebugger.com/guide-instrumentation.html#troubleshooting)\n\n## Example of integration\nThe following example is taken from the Arduino example and show how to initialize the library and how the glue code between Scrutiny Embedded Lib and a serial port can be written.\n\n```c++\n#include \u003cstdint.h\u003e\n#include \"scrutiny.hpp\"\n\nscrutiny::MainHandler scrutiny_handler; // Main scrutiny handler\n\nuint8_t scrutiny_rx_buffer[32];   // Receive buffer - Keep global\nuint8_t scrutiny_tx_buffer[48];   // Transmit buffer - Keep global\n\nvoid process_scrutiny_loop()\n{\n    static uint32_t last_call_us = 0;\n  \n    // Compute time difference\n    uint32_t current_us = micros(); // Reads microseconds\n    uint32_t timestep_us = current_us - last_call_us;\n    \n    // Receive data\n    int16_t c = Serial.read();\n    if (c != -1)\n    {\n        uint8_t uc = static_cast\u003cuint8_t\u003e(c);\n        scrutiny_handler.receive_data(\u0026uc, 1);  // Data from Serial port pushed into scrutiny-embedded lib\n    }\n    \n    scrutiny_handler.process(timestep_us * 10); // Timesteps are counted in multiple of 100ns\n    \n    // Sends data\n    uint8_t buffer[16];\n    if (scrutiny_handler.data_to_send() \u003e 0)\n    {\n        uint16_t nread = scrutiny_handler.pop_data(buffer, sizeof(buffer));  // Reads data from scrutiny lib\n        Serial.write(buffer, nread);                         // Sends data to the serial port\n    }\n\n\n    last_call_us = current_us;  \n}\n\n\nvoid scrutiny_configure()\n{\n  scrutiny::Config scrutiny_config;   // Scrutiny runtime configuration. Can be local, will be copied\n\n  // Only required configuration is the comm buffers\n  config.set_buffers(scrutiny_rx_buffer, sizeof(scrutiny_rx_buffer), scrutiny_tx_buffer, sizeof(scrutiny_tx_buffer));\n\n  config.max_bitrate = 100000;      // Optional bitrate limit\n  config.display_name = \"MyDevice\"; // Optional name for broadcasting\n  /* \n    Multiple additional configurations to control:\n    - Memory regions access (forbidden and read-only)\n    - Configure datalogging\n    - Declare some Runtime Published Values (values identified by a unique ID handled by the app without debug symbols)\n    - Configure User Command service\n    - etc.\n  */\n  if (scrutiny_handler.init(\u0026config) != scrutiny::Status::SUCCESS)\n  {\n    // Error handling\n  }\n}\n\n\nvoid main()\n{\n  scrutiny_configure();\n  // Rest of Application init code\n  while (true)\n  {\n    process_scrutiny_loop();\n    // Rest of Application loop code\n  }\n}\n\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscrutinydebugger%2Fscrutiny-embedded","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscrutinydebugger%2Fscrutiny-embedded","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscrutinydebugger%2Fscrutiny-embedded/lists"}