RDKEMW-21812: merge develop to main - #100
Closed
brendanobra wants to merge 46 commits into
Closed
Conversation
RDKEMW-17673 : Add info coverage gate to CI
Fix api test app in CI
RDKEMW-17667 : Add timezone getter method and onTimeZoneChanged event
…82) * RDKEMW-14887 : Update Stats.memoryUsage api to return value in bytes * RDKEMW-14887 : Fix spacing issues * address copilot comment * clang format fix --------- Co-authored-by: rajanika <rajanikatsr@gmail.com> Co-authored-by: rradha446 <rajanika_radhakrishnan@comcast.com>
#86) * RDKEMW-17486 : Add dolbyAtmosExperienceAvailable getter and event subscription * RDKEMW-17486 : Fix clang-format issues * RDKEMW-17486 : Address copilot comments
* RDKEMW-20911 : Return full JSON document from Actions.intent/onIntent * RDKEMW-20911 : Address copilot comments * RDKEMW-20911: Update changelog for v0.6.3
* RDKEMW-17483 Change discovery.watchedV2 return type to void * RDKEMW-20349 : Address copilot comments * RDKEMW-20349 : Route discovery.watchedV2 to discovery.watched wire method * RDKEMW-20349: Document Discovery.watched as backward-compatible legacy method
* RDKEMW-19315 : Add coding guidelines for firebolt-cpp-client * RDKEMW-19315 : Correct factual errors and gaps in coding guidelines * RDKEMW-19315 : Address copilot comments * RDKEMW-19315 : Address copilot comments * RDKEMW-19315 : Address copilot comments * RDKEMW-19315 : Address copilot comments
* Support/v0.6.3 (#90) * RDKEMW-20911 : Return full JSON document from Actions.intent/onIntent * RDKEMW-20911 : Address copilot comments * RDKEMW-20911: Update changelog for v0.6.3 * RDKEMW-20911 : Fix intent type as object and not string * RDKEMW-21724 : Update Actions module per Firebolt 9 spec * RDKEMW-21724 : Address copilot comments * RDKEMW-21724 : Address copilot comments * RDKEMW-21724 : Update OpenRPC intent schema to reflect required sub-fields * RDKEMW-21724 : Make context/source optional and use typed IntentData for start * RDKEMW-21724 : Fix OpenRPC schema * RDKEMW-21724 : Fix actionsDemo * RDKEMW-21724 : Address copilot comments --------- Co-authored-by: Brendan O'Bra <brendan@obrafamily.org>
* Restore develop firebolt-open-rpc.json * Fix firebolt-open-rpc.json * Add fmt.sh and clean up lint.sh clang-format tooling
RDKEMW-14869: VideoOutput implementation + fix broken unit tests
* Add device apis for osName, osVersion and firmware * Fix payload for Device.setOsName and Device.setOsVersion, fix format issues * Fix unit tests
…t into RDKEMW-21812
RDKEMW-21282: Firebolt 9 TTS/SpeechSynthesis
brendanobra
requested review from
swethasukumarr
and
a lite review from Copilot
August 19, 2026 18:26
Contributor
There was a problem hiding this comment.
Pull request overview
This PR merges develop into main, bringing in several SDK surface expansions and tooling updates across the Firebolt C++ client: new modules (VideoOutput, SpeechSynthesis), multiple API evolutions (Actions intent payload, TextToSpeech speak options, Localization timeZone, Device OS fields, Stats memory usage units), and CI/lint/coverage workflow enhancements.
Changes:
- Added new
VideoOutputandSpeechSynthesismodules (public headers, implementations, JSON adapters, unit/component tests) and wired them into the singleton accessor. - Updated existing APIs and tests:
Actions.intentpayload now modeled as an object;Discovery.watchedV2now returnsResult<void>;TextToSpeech.speakgains optional params;Localization.timeZone,DeviceOS/firmware + Atmos capability, andStats.memoryUsagemove to byte units. - Improved repo tooling: formatting-only lint alignment with CI, added
fmt.sh, and added coverage artifact upload + a non-blocking coverage gate/baseline update workflow.
Reviewed changes
Copilot reviewed 101 out of 101 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| test/unit/videooutputGeneratedTest.cpp | New generated unit coverage for VideoOutputImpl getters/subscriptions/unsubscribe. |
| test/unit/textToSpeechTest.cpp | Adds unit tests validating TextToSpeech.speak optional-parameter payload construction and error propagation. |
| test/unit/statsTest.cpp | Updates expected Stats.memoryUsage fields/types to bytes (uint64_t). |
| test/unit/speechSynthesisTest.cpp | New unit tests for SpeechSynthesis speak/voices/invoke + subscription parsing. |
| test/unit/metricsTest.cpp | Adjusts JSON string literal usage for Metrics.event payload. |
| test/unit/localizationTest.cpp | Adds unit tests for Localization.timeZone getter + subscription. |
| test/unit/discoveryTest.cpp | Updates tests for watchedV2 signature/behavior and payload formation. |
| test/unit/deviceTest.cpp | Adds unit tests for OS name/version, firmware, and Dolby Atmos availability + subscription. |
| test/unit/actionsTest.cpp | Updates Actions intent expectations to structured payload and adds test for Actions.start. |
| test/component/videooutputGeneratedTest.cpp | New minimal component tests asserting IVideoOutput surface presence. |
| test/component/textToSpeechTest.cpp | Adds component coverage for speak with optional arguments. |
| test/component/statsTest.cpp | Updates component expected values/types for byte-based memory usage fields. |
| test/component/speechSynthesisTest.cpp | New component tests for SpeechSynthesis methods and event triggers. |
| test/component/presentationTest.cpp | Minor output formatting change (std::endl → '\n'). |
| test/component/networkTest.cpp | Minor output formatting change (std::endl → '\n'). |
| test/component/metricsTest.cpp | Adjusts JSON string literal usage for Metrics.event payload. |
| test/component/localizationTest.cpp | Adds component tests for timeZone and onTimeZoneChanged event validation. |
| test/component/lifecycleTest.cpp | Minor idiomatic improvements (empty() checks, '\n'). |
| test/component/discoveryTest.cpp | Updates watched/watchedV2 numeric literal and removes bool-return assertions for watchedV2. |
| test/component/deviceTest.cpp | Adds component coverage for OS fields + Dolby Atmos availability/subscription; minor output formatting. |
| test/component/actionsGeneratedTest.cpp | Updates generated component tests for structured Actions intent payload + adds start. |
| test/component/accessibilityTest.cpp | Minor output formatting change (std::endl → '\n'). |
| test/api_test_app/utils.h | Tracks per-demo failure count to support non-interactive/auto-run failure reporting. |
| test/api_test_app/main.cpp | Adds Actions demo, improves auto-run flow, and returns non-zero on failures. |
| test/api_test_app/apis/statsDemo.cpp | Updates output to label memory units as bytes. |
| test/api_test_app/apis/localizationDemo.cpp | Adds demo coverage for Localization.timeZone. |
| test/api_test_app/apis/lifecycleDemo.h | Tracks last subscription id for improved unsubscribe UX. |
| test/api_test_app/apis/lifecycleDemo.cpp | Defaults unsubscribe prompt to last subscription id. |
| test/api_test_app/apis/discoveryDemo.cpp | Updates watchedV2 demo output to reflect void-success semantics. |
| test/api_test_app/apis/deviceDemo.cpp | Adds demo options for OS fields and Dolby Atmos availability. |
| test/api_test_app/apis/actionsDemo.h | New Actions demo interface. |
| test/api_test_app/apis/actionsDemo.cpp | New Actions demo implementation (intent/start/subscribe/unsubscribe). |
| src/videooutput_impl.h | New VideoOutputImpl implementation header. |
| src/videooutput_impl.cpp | New generated VideoOutputImpl implementation. |
| src/texttospeech_impl.h | Updates speak signature with optional parameters; adds [[nodiscard]]. |
| src/texttospeech_impl.cpp | Builds optional-parameter JSON payload for TextToSpeech.speak. |
| src/stats_impl.h | Adds [[nodiscard]] to memoryUsage() declaration. |
| src/stats_impl.cpp | Defaults destructor definition. |
| src/speechsynthesis_impl.h | New SpeechSynthesisImpl header with subscription manager integration. |
| src/speechsynthesis_impl.cpp | New SpeechSynthesisImpl implementation (speak/voices/cancel/pause/resume + subscriptions). |
| src/presentation_impl.h | Adds [[nodiscard]] and removes redundant virtual keywords in declarations. |
| src/network_impl.h | Adds [[nodiscard]] on connected(). |
| src/metrics_impl.h | Adds [[nodiscard]] and minor signature normalization. |
| src/localization_impl.h | Adds timeZone() + subscription and applies [[nodiscard]] to getters. |
| src/localization_impl.cpp | Implements timeZone() and subscribeOnTimeZoneChanged. |
| src/lifecycle_impl.h | Adds [[nodiscard]] and removes redundant virtual keywords. |
| src/lifecycle_impl.cpp | Defaults destructor definition. |
| src/json_types/videooutput.h | New generated JSON adapters/enums for VideoOutput. |
| src/json_types/texttospeech.h | Adds [[nodiscard]] to JSON adapter value() methods. |
| src/json_types/stats.h | Updates memory field names/types to bytes and [[nodiscard]] on value(). |
| src/json_types/speechsynthesis.h | New JSON adapters for voices array and utterance event enum mapping. |
| src/json_types/lifecycle.h | Adds [[nodiscard]] to adapter value() methods. |
| src/json_types/display.h | Adds [[nodiscard]] and formats value() implementation. |
| src/json_types/device.h | Adds [[nodiscard]] to adapter value() methods. |
| src/json_types/advertising.h | Adds [[nodiscard]] and formats value() implementation. |
| src/json_types/actions.h | Updates Actions JSON adapter to deserialize structured intent payload. |
| src/json_types/accessibility.h | Adds [[nodiscard]] to adapter value() methods. |
| src/firebolt.cpp | Wires in SpeechSynthesis and VideoOutput modules and adds videooutput_.unsubscribeAll() cleanup. |
| src/display_impl.h | Adds [[nodiscard]] to getters. |
| src/discovery_impl.h | Adds [[nodiscard]] and changes watchedV2 to Result<void>. |
| src/discovery_impl.cpp | Implements watchedV2 as void-returning invoke. |
| src/device_impl.h | Adds new OS/firmware/Dolby APIs and [[nodiscard]] annotations. |
| src/device_impl.cpp | Implements new Device getters/setters and Dolby Atmos availability subscription. |
| src/advertising_impl.h | Adds [[nodiscard]] to getter. |
| src/actions_impl.h | Updates Actions intent return type + subscription payload type; adds start(). |
| src/actions_impl.cpp | Uses JSON adapter for structured intent and adds Actions.start invoke implementation. |
| src/accessibility_impl.h | Adds [[nodiscard]] and removes redundant virtual keywords. |
| README.md | Updates lint documentation to reflect clang-format-only CI parity. |
| lint.sh | Simplifies lint to CI-equivalent clang-format check/fix with Docker/local modes. |
| include/firebolt/videooutput.h | New generated public API for VideoOutput. |
| include/firebolt/texttospeech.h | Updates interface to accept optional speak parameters and adds [[nodiscard]]. |
| include/firebolt/stats.h | Changes MemoryInfo fields to uint64_t and documents byte units; adds [[nodiscard]]. |
| include/firebolt/speechsynthesis.h | New public API header for SpeechSynthesis. |
| include/firebolt/presentation.h | Adds [[nodiscard]] on focused(). |
| include/firebolt/network.h | Adds [[nodiscard]] on connected(). |
| include/firebolt/metrics.h | Adds [[nodiscard]] broadly and normalizes some parameter forms. |
| include/firebolt/localization.h | Adds timeZone() + subscription; adds [[nodiscard]] to getters. |
| include/firebolt/lifecycle.h | Adds [[nodiscard]] to getters/close. |
| include/firebolt/firebolt.h | Adds accessor entry points for SpeechSynthesis and VideoOutput. |
| include/firebolt/display.h | Adds [[nodiscard]] to getters. |
| include/firebolt/discovery.h | Adds [[nodiscard]] and changes watchedV2 to Result<void> with note. |
| include/firebolt/device.h | Adds OS/firmware/Dolby APIs and adds [[nodiscard]] to getters. |
| include/firebolt/advertising.h | Adds [[nodiscard]] to getter. |
| include/firebolt/actions.h | Updates generated Actions API to structured intent payload and adds start(). |
| include/firebolt/accessibility.h | Adds [[nodiscard]] to getters. |
| fmt.sh | New script for clang-format check/fix (Docker-first, local fallback). |
| docs/openrpc/the-spec/firebolt-open-rpc--legacy.json | Updates legacy spec for Stats byte fields and TextToSpeech speak optional params; adds Device Atmos API. |
| docs/openrpc/the-spec/firebolt-app-open-rpc.json | Adds notifier entries for Localization.onTimeZoneChanged and Device.onDolbyAtmosExperienceAvailableChanged. |
| docs/openrpc/openrpc/text_to_speech.json | Updates module OpenRPC to include new optional speak params and examples. |
| docs/openrpc/openrpc/stats.json | Updates Stats OpenRPC to byte fields/types and descriptions. |
| docs/openrpc/openrpc/speech_synthesis.json | Adds scaffold OpenRPC file for SpeechSynthesis module. |
| docs/openrpc/openrpc/localization.json | Adds timeZone method to Localization OpenRPC. |
| docs/openrpc/openrpc/discovery.json | Updates watchedV2 return schema to null and adjusts summary/examples. |
| CHANGELOG.md | Notes Actions intent/onIntent payload parsing fix in release notes. |
| .github/workflows/ci.yml | Uploads lcov artifacts and adds a coverage gate + baseline update workflow. |
| .github/scripts/compare_coverage.py | New script to compare unit/component lcov against a baseline and emit a report (informational). |
| .github/copilot-instructions.md | Deleted (instructions absorbed elsewhere). |
| .clang-tidy | Adds a repo clang-tidy configuration file. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| [[nodiscard]] Result<void> setOsVersion(const std::string& osVersion) override; | ||
| [[nodiscard]] Result<std::string> firmware() const override; | ||
| [[nodiscard]] Result<HDRFormat> hdr() const override; | ||
| [[nodiscard]] Result<u_int32_t> timeInActiveState() const override; |
Comment on lines
+18
to
+20
| #pragma once | ||
| #ifndef FIREBOLT_VIDEOOUTPUT_IMPL_H | ||
| #define FIREBOLT_VIDEOOUTPUT_IMPL_H |
Comment on lines
103
to
107
| network_.unsubscribeAll(); | ||
| presentation_.unsubscribeAll(); | ||
| textToSpeech_.unsubscribeAll(); | ||
| videooutput_.unsubscribeAll(); | ||
| } |
| } | ||
|
|
||
| return helper_.get<Firebolt::JSON::Boolean, bool>("Discovery.watchedV2", parameters); | ||
| return helper_.invoke("Discovery.watched", parameters); |
Comment on lines
+29
to
+32
| explicit SpeechSynthesisImpl(Firebolt::Helpers::IHelper& helper); | ||
| SpeechSynthesisImpl(const SpeechSynthesisImpl&) = delete; | ||
| SpeechSynthesisImpl& operator=(const SpeechSynthesisImpl&) = delete; | ||
|
|
Comment on lines
+65
to
+69
| [[nodiscard]] virtual Result<std::pmr::vector<Voice>> voices() const = 0; | ||
| [[nodiscard]] virtual Result<SubscriptionId> | ||
| subscribeOnVoicesChanged(std::function<void(const std::pmr::vector<Voice>&)>&& notification) = 0; | ||
|
|
||
| [[nodiscard]] virtual Result<void> cancel(UtteranceId id) const = 0; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.