Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c30934e
use libzedmd
mkalkbrenner Dec 7, 2023
1b2ab50
Added config options
mkalkbrenner Dec 8, 2023
93acf20
fixed spelling
mkalkbrenner Dec 8, 2023
e310185
completed RGB24
mkalkbrenner Dec 9, 2023
70532e6
default palette is not needed for DMDext
mkalkbrenner Dec 9, 2023
df10360
fixed typo
mkalkbrenner Dec 10, 2023
8bdbe60
Dedidictaed devices for all 4 different ZeDMD variations.
mkalkbrenner Dec 14, 2023
e6d8602
updated libzedmd
mkalkbrenner Dec 14, 2023
7c259c0
fixed Dimensions
mkalkbrenner Dec 14, 2023
d3181f8
Added scaling commands for libzedmd for future use.
mkalkbrenner Dec 15, 2023
a5fcfbf
alternativly condifure a COM port instead of auto-detection, use ZeDM…
mkalkbrenner Dec 15, 2023
d99d76f
libzedmd 0.2.0
mkalkbrenner Dec 17, 2023
9defd67
added ScaleRgb24 option, made ZeDMD compatible with upscaling
mkalkbrenner Dec 29, 2023
86d7992
fixed dimensions and scaling
mkalkbrenner Dec 29, 2023
7f02668
libzedmd 0.3.0
mkalkbrenner Dec 29, 2023
48ab3a8
fixed 16 color custom palettes, libzedmd 0.3.1
mkalkbrenner Dec 31, 2023
6d0b3c6
changed transport mode for 16 color modes for smoother animations
mkalkbrenner Jan 1, 2024
4b41cbe
libzedmd 0.4.0
mkalkbrenner Jan 10, 2024
19c8b31
libzedmd v0.5.0 update
mkalkbrenner Jan 21, 2024
c847ac5
DRY, moved redundant code to base classes
mkalkbrenner Jan 24, 2024
b88a4c5
removed obsolete imports
mkalkbrenner Jan 24, 2024
13dea9e
moved WiFi specific libzedmd imports to ZeDMDWiFiBase
mkalkbrenner Jan 24, 2024
734ced4
formatting
mkalkbrenner Jan 24, 2024
d1f66c7
added links to libzedmd API docs
mkalkbrenner Jan 24, 2024
2160c3c
chore: Make accessors less accessible and ditch unused members.
freezy Jan 27, 2024
74a50e7
improved readablility of SetPalette()
mkalkbrenner Jan 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 40 additions & 8 deletions Console/Common/BaseCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,22 +82,54 @@ protected List<IDestination> GetRenderers(IConfiguration config, HashSet<string>
}
}

if (config.ZeDMD.Enabled)
{
var zeDMD = ZeDMD.GetInstance();
if (zeDMD.IsAvailable)
{
if (config.ZeDMD.Enabled) {
var zeDMD = ZeDMD.GetInstance(config.ZeDMD.Debug, config.ZeDMD.Brightness, config.ZeDMD.RgbOrder, config.ZeDMDHD.Port);
if (zeDMD.IsAvailable) {
renderers.Add(zeDMD);
Logger.Info("Added ZeDMD renderer.");
reportingTags.Add("Out:ZeDMD");
Analytics.Instance.AddDestination(zeDMD);
}
else
{
} else {
Logger.Warn("Device {0} is not available.", zeDMD);
}
}

if (config.ZeDMDHD.Enabled) {
var zeDMDHD = ZeDMDHD.GetInstance(config.ZeDMDHD.Debug, config.ZeDMDHD.Brightness, config.ZeDMDHD.RgbOrder, config.ZeDMDHD.Port, config.ZeDMDHD.ScaleRgb24);
if (zeDMDHD.IsAvailable) {
renderers.Add(zeDMDHD);
Logger.Info("Added ZeDMD renderer.");
reportingTags.Add("Out:ZeDMD");
Analytics.Instance.AddDestination(zeDMDHD);
} else {
Logger.Warn("Device {0} is not available.", zeDMDHD);
}
}

if (config.ZeDMDWiFi.Enabled) {
var zeDMDWiFi = ZeDMDWiFi.GetInstance(config.ZeDMDWiFi.Debug, config.ZeDMDWiFi.Brightness, config.ZeDMDWiFi.RgbOrder, config.ZeDMDHD.Port, config.ZeDMDWiFi.WifiAddress, config.ZeDMDWiFi.WifiPort, config.ZeDMDWiFi.WifiSsid, config.ZeDMDWiFi.WifiPassword);
if (zeDMDWiFi.IsAvailable) {
renderers.Add(zeDMDWiFi);
Logger.Info("Added ZeDMD WiFi renderer.");
reportingTags.Add("Out:ZeDMDWiFi");
Analytics.Instance.AddDestination(zeDMDWiFi);
} else {
Logger.Warn("Device {0} is not available.", zeDMDWiFi);
}
}

if (config.ZeDMDHDWiFi.Enabled) {
var zeDMDHDWiFi = ZeDMDHDWiFi.GetInstance(config.ZeDMDHDWiFi.Debug, config.ZeDMDHDWiFi.Brightness, config.ZeDMDHDWiFi.RgbOrder, config.ZeDMDHD.Port, config.ZeDMDHD.ScaleRgb24, config.ZeDMDHDWiFi.WifiAddress, config.ZeDMDHDWiFi.WifiPort, config.ZeDMDHDWiFi.WifiSsid, config.ZeDMDHDWiFi.WifiPassword);
if (zeDMDHDWiFi.IsAvailable) {
renderers.Add(zeDMDHDWiFi);
Logger.Info("Added ZeDMD HD WiFi renderer.");
reportingTags.Add("Out:ZeDMDHDWiFi");
Analytics.Instance.AddDestination(zeDMDHDWiFi);
} else {
Logger.Warn("Device {0} is not available.", zeDMDHDWiFi);
}
}

if (config.Pin2Dmd.Enabled) {
var pin2Dmd = Pin2Dmd.GetInstance(config.Pin2Dmd.Delay);
if (pin2Dmd.IsAvailable) {
Expand Down
101 changes: 99 additions & 2 deletions Console/Common/BaseOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@
using LibDmd.Input;
using LibDmd.Output.Virtual.AlphaNumeric;
using LibDmd.Output.Virtual.Dmd;
using LibDmd.Output.ZeDMD;

namespace DmdExt.Common
{
internal abstract class BaseOptions : IConfiguration
{
[Option('d', "destination", HelpText = "The destination where the DMD data is sent to. One of: [ auto, pindmdv1, pindmdv2, pindmdv3, pin2dmd, virtual, alphanumeric, network ]. Default: \"virtual\".")]
[Option('d', "destination", HelpText = "The destination where the DMD data is sent to. One of: [ auto, pindmdv1, pindmdv2, pindmdv3, zedmd, zdmdhd, zedmdwifi, zedmdhdwifi, pin2dmd, virtual, alphanumeric, network ]. Default: \"virtual\".")]
public DestinationType Destination { get; set; } = DestinationType.Virtual;

[Option('r', "resize", HelpText = "How the source image is resized. One of: [ stretch, fill, fit ]. Default: \"stretch\".")]
Expand Down Expand Up @@ -141,13 +142,40 @@ internal abstract class BaseOptions : IConfiguration
[Option("--pac-key", HelpText = "Key to decrypt PAC files, in hex.")]
public string PacKey { get; set; } = null;

[Option("zedmd-debug", HelpText = "If set, ZeDMD will show its debug informations. Default: false.")]
public bool Debug { get; set; } = false;

[Option("zedmd-brightness", HelpText = "Change ZeDMD brightness between 0 and 15.")]
public int Brightness { get; set; } = -1;

[Option("zedmd-rgborder", HelpText = "Change ZeDMD RGB order between 0 and 5.")]
public int RgbOrder { get; set; } = -1;

[Option("zedmd-scalergb24", HelpText = "Upscale pure RGB24 content on ZeDMD HD. Default: true.")]
public bool ScaleRgb24 { get; set; } = true;

[Option("zedmd-wifi-address", HelpText = "Connect to ZeDMD in WiFi mode using this IP address.")]
public string WifiAddress { get; set; } = null;

[Option("zedmd-wifi-port", HelpText = "Connect to ZeDMD in WiFi mode using this port. Default: 3333.")]
public int WifiPort { get; set; } = 3333;

[Option("zedmd-wifi-ssid", HelpText = "Configure ZeDMD to use this SSID for WiFi mode.")]
public string WifiSsid { get; set; } = null;

[Option("zedmd-wifi-port", HelpText = "Configure ZeDMD to use this password for WiFi mode.")]
public string WifiPassword { get; set; } = null;

public IGlobalConfig Global { get; }
public IVirtualDmdConfig VirtualDmd { get; }
public IVirtualAlphaNumericDisplayConfig VirtualAlphaNumericDisplay { get; }
public IPinDmd1Config PinDmd1 { get; }
public IPinDmd2Config PinDmd2 { get; }
public IPinDmd3Config PinDmd3 { get; }
public IZeDMDConfig ZeDMD { get; }
public IZeDMDConfig ZeDMDHD { get; }
public IZeDMDWiFiConfig ZeDMDWiFi { get; }
public IZeDMDWiFiConfig ZeDMDHDWiFi { get; }
public IPin2DmdConfig Pin2Dmd { get; }
public IPixelcadeConfig Pixelcade { get; }
public IVideoConfig Video { get; }
Expand All @@ -170,6 +198,9 @@ protected BaseOptions()
PinDmd2 = new PinDmd2Options(this);
PinDmd3 = new PinDmd3Options(this);
ZeDMD = new ZeDMDOptions(this);
ZeDMDHD = new ZeDMDHDOptions(this);
ZeDMDWiFi = new ZeDMDWiFiOptions(this);
ZeDMDHDWiFi = new ZeDMDHDWiFiOptions(this);
Pin2Dmd = new Pin2DmdOptions(this);
Pixelcade = new PixelcadeOptions(this);
Video = new VideoOptions();
Expand All @@ -184,7 +215,7 @@ protected BaseOptions()

public enum DestinationType
{
Auto, PinDMDv1, PinDMDv2, PinDMDv3, zeDMD, PIN2DMD, PIN2DMDXL, PIN2DMDHD, PIXELCADE, Virtual, AlphaNumeric, Network
Auto, PinDMDv1, PinDMDv2, PinDMDv3, zeDMD, zeDMDHD, zeDMDWiFi, zeDMDHDWiFi, PIN2DMD, PIN2DMDXL, PIN2DMDHD, PIXELCADE, Virtual, AlphaNumeric, Network
}

public void Validate()
Expand Down Expand Up @@ -369,7 +400,73 @@ public ZeDMDOptions(BaseOptions options)

public bool Enabled => _options.Destination == BaseOptions.DestinationType.Auto ||
_options.Destination == BaseOptions.DestinationType.zeDMD;
public bool Debug => _options.Debug;
public int Brightness => _options.Brightness;
public int RgbOrder => _options.RgbOrder;
public string Port => _options.Port;
public bool ScaleRgb24 => _options.ScaleRgb24;
}

internal class ZeDMDHDOptions : IZeDMDConfig
{
private readonly BaseOptions _options;

public ZeDMDHDOptions(BaseOptions options)
{
_options = options;
}

public bool Enabled => _options.Destination == BaseOptions.DestinationType.Auto ||
_options.Destination == BaseOptions.DestinationType.zeDMDHD;
public bool Debug => _options.Debug;
public int Brightness => _options.Brightness;
public int RgbOrder => _options.RgbOrder;
public string Port => _options.Port;
public bool ScaleRgb24 => _options.ScaleRgb24;
}

internal class ZeDMDWiFiOptions : IZeDMDWiFiConfig
{
private readonly BaseOptions _options;

public ZeDMDWiFiOptions(BaseOptions options)
{
_options = options;
}

public bool Enabled => _options.Destination == BaseOptions.DestinationType.Auto ||
_options.Destination == BaseOptions.DestinationType.zeDMDWiFi;
public bool Debug => _options.Debug;
public int Brightness => _options.Brightness;
public int RgbOrder => _options.RgbOrder;
public string Port => _options.Port;
public bool ScaleRgb24 => _options.ScaleRgb24;
public string WifiAddress => _options.WifiAddress;
public int WifiPort => _options.WifiPort;
public string WifiSsid => _options.WifiSsid;
public string WifiPassword => _options.WifiPassword;
}

internal class ZeDMDHDWiFiOptions : IZeDMDWiFiConfig
{
private readonly BaseOptions _options;

public ZeDMDHDWiFiOptions(BaseOptions options)
{
_options = options;
}

public bool Enabled => _options.Destination == BaseOptions.DestinationType.Auto ||
_options.Destination == BaseOptions.DestinationType.zeDMDHDWiFi;
public bool Debug => _options.Debug;
public int Brightness => _options.Brightness;
public int RgbOrder => _options.RgbOrder;
public string Port => _options.Port;
public bool ScaleRgb24 => _options.ScaleRgb24;
public string WifiAddress => _options.WifiAddress;
public int WifiPort => _options.WifiPort;
public string WifiSsid => _options.WifiSsid;
public string WifiPassword => _options.WifiPassword;
}

internal class Pin2DmdOptions : IPin2DmdConfig
Expand Down
17 changes: 16 additions & 1 deletion LibDmd.Test/DmdDevice/TestConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public class TestConfiguration : IConfiguration
public IPinDmd2Config PinDmd2 { get; set; } = new TestPinDmd2Config();
public IPinDmd3Config PinDmd3 { get; set; } = new TestPinDmd3Config();
public IZeDMDConfig ZeDMD { get; set; } = new TestZeDMDConfig();
public IZeDMDConfig ZeDMDHD { get; set; } = new TestZeDMDConfig();
public IZeDMDWiFiConfig ZeDMDWiFi { get; set; } = new TestZeDMDWiFiConfig();
public IZeDMDWiFiConfig ZeDMDHDWiFi { get; set; } = new TestZeDMDWiFiConfig();
public IPin2DmdConfig Pin2Dmd { get; set; } = new TestPin2DmdConfig();
public IPixelcadeConfig Pixelcade { get; set; } = new TestPixelcadeConfig();
public IVideoConfig Video { get; set; } = new TestVideoConfig();
Expand Down Expand Up @@ -104,9 +107,21 @@ public class TestPinDmd3Config : IPinDmd3Config
public class TestZeDMDConfig : IZeDMDConfig
{
public bool Enabled { get; set; }
public bool Debug { get; set; }
public int Brightness { get; set; }
public int RgbOrder { get; set; }
public string Port { get; set; }
public bool ScaleRgb24 { get; set; }
}


public class TestZeDMDWiFiConfig : TestZeDMDConfig, IZeDMDWiFiConfig
{
public string WifiAddress { get; set; }
public int WifiPort { get; set; }
public string WifiSsid { get; set; }
public string WifiPassword { get; set; }
}

public class TestPin2DmdConfig : IPin2DmdConfig
{
public bool Enabled { get; set; }
Expand Down
Binary file removed LibDmd/Costura32/libminiz-3.0.2.dll
Binary file not shown.
Binary file added LibDmd/Costura32/libserialport.dll
Binary file not shown.
Binary file added LibDmd/Costura32/zedmd.dll
Binary file not shown.
Binary file removed LibDmd/Costura64/libminiz-3.0.2.dll
Binary file not shown.
Binary file added LibDmd/Costura64/libserialport64.dll
Binary file not shown.
Binary file added LibDmd/Costura64/zedmd64.dll
Binary file not shown.
43 changes: 42 additions & 1 deletion LibDmd/DmdDevice/Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ public class Configuration : IConfiguration
public IPinDmd2Config PinDmd2 { get; private set; }
public IPinDmd3Config PinDmd3 { get; private set; }
public IZeDMDConfig ZeDMD { get; private set; }
public IZeDMDConfig ZeDMDHD { get; private set; }
public IZeDMDWiFiConfig ZeDMDWiFi { get; private set; }
public IZeDMDWiFiConfig ZeDMDHDWiFi { get; private set; }
public IPin2DmdConfig Pin2Dmd { get; private set; }
public IPixelcadeConfig Pixelcade { get; private set; }
public IVideoConfig Video { get; private set; }
Expand Down Expand Up @@ -135,6 +138,9 @@ private void SetupConfig()
PinDmd2 = new PinDmd2Config(_data, this);
PinDmd3 = new PinDmd3Config(_data, this);
ZeDMD = new ZeDMDConfig(_data, this);
ZeDMDHD = new ZeDMDHDConfig(_data, this);
ZeDMDWiFi = new ZeDMDWiFiConfig(_data, this);
ZeDMDHDWiFi = new ZeDMDHDWiFiConfig(_data, this);
Pin2Dmd = new Pin2DmdConfig(_data, this);
Pixelcade = new PixelcadeConfig(_data, this);
Video = new VideoConfig(_data, this);
Expand Down Expand Up @@ -302,12 +308,47 @@ public class ZeDMDConfig : AbstractConfiguration, IZeDMDConfig
{
public override string Name { get; } = "zedmd";
public bool Enabled => GetBoolean("enabled", false);
public bool AllowHdScaling => GetBoolean("scaletohd", true);
public bool Debug => GetBoolean("debug", false);
public int Brightness => GetInt("brightness", -1);
public int RgbOrder => GetInt("rgborder", -1);
public string Port => GetString("port", null);
public bool ScaleRgb24 => GetBoolean("scalergb24", true);
public bool AllowHdScaling => false;
public ZeDMDConfig(IniData data, Configuration parent) : base(data, parent)
{
}
}

public class ZeDMDHDConfig : ZeDMDConfig
{
public override string Name { get; } = "zedmdhd";
public new bool AllowHdScaling => true;
public ZeDMDHDConfig(IniData data, Configuration parent) : base(data, parent)
{
}
}

public class ZeDMDWiFiConfig : ZeDMDConfig, IZeDMDWiFiConfig
{
public override string Name { get; } = "zedmdwifi";
public string WifiAddress => GetString("wifi.address", null);
public int WifiPort => GetInt("wifi.port", 3333);
public string WifiSsid => GetString("wifi.ssid", null);
public string WifiPassword => GetString("wifi.password", null);
public ZeDMDWiFiConfig(IniData data, Configuration parent) : base(data, parent)
{
}
}

public class ZeDMDHDWiFiConfig : ZeDMDWiFiConfig
{
public override string Name { get; } = "zedmdhdwifi";
public new bool AllowHdScaling => true;
public ZeDMDHDWiFiConfig(IniData data, Configuration parent) : base(data, parent)
{
}
}

public class Pin2DmdConfig : AbstractConfiguration, IPin2DmdConfig
{
public override string Name { get; } = "pin2dmd";
Expand Down
29 changes: 28 additions & 1 deletion LibDmd/DmdDevice/DmdDevice.cs
Original file line number Diff line number Diff line change
Expand Up @@ -466,14 +466,41 @@ private void SetupGraphs()
}
}
if (_config.ZeDMD.Enabled) {
var zeDmd = ZeDMD.GetInstance();
var zeDmd = ZeDMD.GetInstance(_config.ZeDMD.Debug, _config.ZeDMD.Brightness, _config.ZeDMD.RgbOrder, _config.ZeDMD.Port);
if (zeDmd.IsAvailable) {
renderers.Add(zeDmd);
Logger.Info("Added ZeDMD renderer.");
ReportingTags.Add("Out:ZeDMD");
Analytics.Instance.AddDestination(zeDmd);
}
}
if (_config.ZeDMDHD.Enabled) {
var zeDmdHd = ZeDMDHD.GetInstance(_config.ZeDMDHD.Debug, _config.ZeDMDHD.Brightness, _config.ZeDMDHD.RgbOrder, _config.ZeDMDHD.Port, _config.ZeDMDHD.ScaleRgb24);
if (zeDmdHd.IsAvailable) {
renderers.Add(zeDmdHd);
Logger.Info("Added ZeDMD HD renderer.");
ReportingTags.Add("Out:ZeDMDHD");
Analytics.Instance.AddDestination(zeDmdHd);
}
}
if (_config.ZeDMDWiFi.Enabled) {
var zeDmdWifi = ZeDMDWiFi.GetInstance(_config.ZeDMDWiFi.Debug, _config.ZeDMDWiFi.Brightness, _config.ZeDMDWiFi.RgbOrder, _config.ZeDMDWiFi.Port, _config.ZeDMDWiFi.WifiAddress, _config.ZeDMDWiFi.WifiPort, _config.ZeDMDWiFi.WifiSsid, _config.ZeDMDWiFi.WifiPassword);
if (zeDmdWifi.IsAvailable) {
renderers.Add(zeDmdWifi);
Logger.Info("Added ZeDMD WiFi renderer.");
ReportingTags.Add("Out:ZeDMDWiFi");
Analytics.Instance.AddDestination(zeDmdWifi);
}
}
if (_config.ZeDMDHDWiFi.Enabled) {
var zeDmdHdWifi = ZeDMDHDWiFi.GetInstance(_config.ZeDMDHDWiFi.Debug, _config.ZeDMDHDWiFi.Brightness, _config.ZeDMDHDWiFi.RgbOrder, _config.ZeDMDHDWiFi.Port, _config.ZeDMDHD.ScaleRgb24, _config.ZeDMDHDWiFi.WifiAddress, _config.ZeDMDHDWiFi.WifiPort, _config.ZeDMDHDWiFi.WifiSsid, _config.ZeDMDHDWiFi.WifiPassword);
if (zeDmdHdWifi.IsAvailable) {
renderers.Add(zeDmdHdWifi);
Logger.Info("Added ZeDMD HD WiFi renderer.");
ReportingTags.Add("Out:ZeDMDHDWiFi");
Analytics.Instance.AddDestination(zeDmdHdWifi);
}
}
if (_config.Pin2Dmd.Enabled) {
Comment thread
freezy marked this conversation as resolved.
var pin2Dmd = Pin2Dmd.GetInstance(_config.Pin2Dmd.Delay);
if (pin2Dmd.IsAvailable) {
Expand Down
16 changes: 16 additions & 0 deletions LibDmd/DmdDevice/IConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ public interface IConfiguration
IPinDmd2Config PinDmd2 { get; }
IPinDmd3Config PinDmd3 { get; }
IZeDMDConfig ZeDMD { get; }
IZeDMDConfig ZeDMDHD { get; }
IZeDMDWiFiConfig ZeDMDWiFi { get; }
IZeDMDWiFiConfig ZeDMDHDWiFi { get; }
IPin2DmdConfig Pin2Dmd { get; }
IPixelcadeConfig Pixelcade { get; }
IVideoConfig Video { get; }
Expand Down Expand Up @@ -68,6 +71,19 @@ public interface IPinDmd3Config
public interface IZeDMDConfig
{
bool Enabled { get; }
bool Debug { get; }
int Brightness { get; }
int RgbOrder { get; }
string Port { get; }
bool ScaleRgb24 { get; }
}

public interface IZeDMDWiFiConfig : IZeDMDConfig
{
string WifiAddress { get; }
int WifiPort { get; }
string WifiSsid { get; }
string WifiPassword { get; }
}

public interface IPin2DmdConfig
Expand Down
Loading