Skip to content

Releases: fredemmott/StreamDeck-CPPSDK

v3.0.3: improved platform compatibility

30 Dec 20:55
v3.0.3
722e4ca
Compare
Choose a tag to compare

v3.0.2: increased platform compatibility

25 Mar 15:00
7b5121e
Compare
Choose a tag to compare
  • supports MSVC 17.5 (February update to Visual Studio 2022)
  • consistently uses std::filesystem for ESD::filesystem on Windows; it is also used on projects targeting MacOS v10.15 and above, and ghc::filesystem is used on v10.11-v10.14

v3.0.1: Compatibility with MacOS 10.11

21 Aug 16:13
v3.0.1
6344ab6
Compare
Choose a tag to compare

This release is compatible with builds targeting MacOS 10.11.

This release adds ESD::filesystem which is an alias for std::filesystem where available, and an alias for https://github.com/gulrak/filesystem on MacOS 10.11-10.14.

Thanks to @quentinmit

v3.0: use new C++ features, CMake changes, and deprecations

16 Jul 21:45
v3.0.0
38d3543
Compare
Choose a tag to compare

This release:

  • targets C++20; this means that MacOS plugins must target MacOS 10.15 or above
  • Removes the kESDSDKVersion constant
  • Adds ESD::format() - this is an alias for std::format if it is available, otherwise it is an alias for fmt::format. This adds support for compile-time verification of wchar-based format strings when building with MSVC 2022
  • fmtlib is no longer included if std::format is available
  • Changes ESDUtilities::GetPluginExecutablePath() and ESDUtilities::GetPluginDirectoryPath() to return an std::filesystem::path instead of an std::string
  • Removed ESDDebugf() and ESDLogf(); use the std::format-based ESDDebug() and ESDLog() functions instead
  • changes the provided StreamDeckSDK.cmake to use FetchContent instead of ExternalProject; this makes it easier to use your projects' build/link flags, e.g. macos architectures
  • Marks ESDUtilities::DoSleep() as [[deprecated]] in favor of std::this_thread::sleep_for()
  • Marks the path-manipulating functions in ESDUtilities as [[deprecated]] in favor of std::filesystem::path

Getting Help

Windows note

StreamDeck-CPPSDK must build in C++20, including /await:strict instead of /await; older versions of the Windows SDK may raise errors saying that /await is needed - in this case, a newer Windows SDK must be used.

If you use GitHub Actions, one way to do this is to specify CMAKE_SYSTEM_VERSION=10.0.22621.0

ESDUtilities::GetParentDirectoryPath()tostd::filesystem::path::parent_path()` migration note

GetParentDirectoryPath() will automatically remove trailing slashes, however std::filesystem::path will not; for example, GetParentDirectoryPath("/foo/bar/") is /foo, but std::filesystem::path("/foo/bar/").parent_path() is "/foo/bar"

v2.0.3: add `kESDSDKDeviceType_StreamDeckPedal`

16 Jul 18:21
v2.0.3
3e8b488
Compare
Choose a tag to compare
  • add kESDSDKDeviceType_StreamDeckPedal
  • fix default STREAMDECK_PLUGIN_DIR on MacOS

v2.0.2: Adds set_default_install_dir_to_streamdeck_plugin_dir CMake function

14 Jan 15:02
e166232
Compare
Choose a tag to compare

This function should be called before any other targets are defined.

v2.0.1: exit cleanly if asio context is re-used by plugin

21 Feb 18:42
fe5a09e
Compare
Choose a tag to compare

When the streamdeck software is exiting, it closes the websocket connections to plugins; this usually stops the asio event loop, but if there are pending events (which is possible if a plugin uses GetAsioContext()), it will not exit cleanly, and eventually be killed by the StreamDeck software.

This release explicitly shuts down the event loop when the websocket connection is closed.

v2.0.0: Update to Elgato 4.8 SDK, add ESDAction and ESDPlugin classes

20 Feb 20:13
eaea3cf
Compare
Choose a tag to compare

This release:

  • adds new features from the 4.4 to 4.8 SDK updates
    • adds corsair gkeys device type
    • adds SystemDidWakeUp() event
    • adds optional state parameter to SetTitle and SetImage
  • requires C++17 or C++20 (tested with Visual Studio 2019, latest XCode)
  • adds a minimal example
  • supports building for arm64 (M1) macs via CMAKE_OSX_ARCHITECTURES
  • adds ESDPlugin and ESDAction: instead of directly subclassing ESDBasePlugin, consider putting most of your code into ESDAction subclasses (one for each supported action), and having a minimal ESDPlugin subclass that merely manages ESDAction instances. For example, "StreamDeckAudioMutePlugin" is an ESDPlugin, and "Toggle Mute", "Mute Off", "Mute On" are all ESDAction subclasses that are created and tracked by the StreamDeckAudioMutePlugin
  • includes libfmt (C++20-style format string support on C++17 compilers), and updates the included versions of asio and websocketpp
  • moves ESDDebug() and ESDLog() from sprintf-style (ESDDebug("Foo %s", "bar")) to C++20-style (ESDDebug("Foo {}")); the old forms are available as ESDDebugf() and ESDLogf() for find-replace. These functions replace DebugPrint() in Elgato's C++ examples.
  • ESDDebug() and ESDLog() now support wide-strings on Windows, e.g. ESDDebug(L"Foo {}", L"bar).
  • Removes ESDLogger::SetWin32DebugPrefix(): the executable name is automatically detected on macos and added to debug messages viewable with dbgview ,windbg, Visual Studio, or Console.app on MacOS
  • Supports static linking on windows via CMAKE_MSVC_RUNTIME_LIBRARY
  • Adds ESDUtilities::GetPluginExecutablePath(); renames GetFolderPath() to GetParentDirectoryPath() and GetPluginPath() to GetPluginDirectoryPath()
  • Adds ESDConnectionManager::GetAsioContext() exposing the asio context used by websocketpp; this allows adding additional async connections (sockets, websockets, named pipes) or timers without needing additional threads. For example, this is used by StreamDeck-AudioMute for timers, and StreamDeck-Discord to manage the communication with Discord.
  • Adds a STREAMDECK_PLUGIN_DIR cmake variable that can be used to set a default CMAKE_INSTALLATION_PREFIX to simplify local testing

v2.0-rc13: SDK 4.8 support

20 Feb 18:50
eaea3cf
Compare
Choose a tag to compare
Pre-release

This release adds:

  • a STREAMDECK_PLUGIN_DIR cmake variable
  • a small, standalone example
  • ESDAction::KeyDown()
  • ESDPlugin::SystemDidWakeUp()
  • Corsair GKeys device type
  • optional state parameter to SetTitle and SetImage

v2.0-rc12: add ESDAction::GetAction(), make ESDAction::GetContext() public

15 Feb 22:48
88bc623
Compare
Choose a tag to compare

This is useful when a plugin wants to directly interface with ESDCommunicationManager to perform the same action for all actions it manages, e.g. to indicate a plugin-wide error