Skip to content

Commit

Permalink
reformat code & release 4.4 (dotnet 9)
Browse files Browse the repository at this point in the history
  • Loading branch information
dima117 committed Jan 22, 2025
1 parent a9b6f6e commit 26ddc18
Show file tree
Hide file tree
Showing 22 changed files with 989 additions and 1,015 deletions.
7 changes: 4 additions & 3 deletions Package.xml
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
<Project>
<PropertyGroup>
<VersionPrefix>4.2.0</VersionPrefix>
<!-- <VersionSuffix>rc-3-1530995509343</VersionSuffix>-->
<VersionPrefix>4.4.0</VersionPrefix>
<!-- <VersionSuffix>rc-3-1530995509343</VersionSuffix>-->

<Authors>Dmitry Andriyanov &lt;[email protected]&gt;</Authors>
<NeutralLanguage>en-US</NeutralLanguage>
<Copyright>Thinking-Home.RU © 2025</Copyright>

<PackageTags>thinking-home;core;noolite</PackageTags>
<PackageProjectUrl>https://github.com/thinking-home/noolite</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/thinking-home/noolite/blob/master/LICENSE</PackageLicenseUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<RepositoryUrl>https://github.com/thinking-home/noolite.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
Expand Down
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
[![Build & Tests](https://github.com/thinking-home/noolite/actions/workflows/dotnet.yml/badge.svg)](https://github.com/thinking-home/noolite/actions/workflows/dotnet.yml)
[![NuGet Pre Release](https://img.shields.io/nuget/vpre/ThinkingHome.NooLite.svg)](https://www.nuget.org/packages/ThinkingHome.NooLite)

Библиотека [ThinkingHome.NooLite](https://www.nuget.org/packages/ThinkingHome.NooLite) предоставляет API для управления устройствами [nooLite](https://www.noo.com.by/sistema-noolite.html) (включая nooLite-F) на платформе .NET Core. Поддерживается работа с адаптером [MTRF-64-USB](https://www.noo.com.by/mtrf-64-usb.html). Поддерживаются операционные системы Windows, MacOS, Linux.
Библиотека [ThinkingHome.NooLite](https://www.nuget.org/packages/ThinkingHome.NooLite) предоставляет API для управления
устройствами [nooLite](https://www.noo.com.by/sistema-noolite.html) (включая nooLite-F) на платформе .NET Core.
Поддерживается работа с адаптером [MTRF-64-USB](https://www.noo.com.by/mtrf-64-usb.html). Поддерживаются операционные
системы Windows, MacOS, Linux.

## Установка

Expand Down Expand Up @@ -76,7 +79,8 @@ private static void AdapterOnError(object obj, Exception ex)

### Управление нагрузкой

> Перечисленные ниже методы управляют нагрузкой в стандартном режиме nooLite (без шифрования и обратной связи). Для каждого метода доступен аналогичный метод с суффиксом `F`, который отправляет ту же команду в режиме nooLite-F.
> Перечисленные ниже методы управляют нагрузкой в стандартном режиме nooLite (без шифрования и обратной связи). Для
> каждого метода доступен аналогичный метод с суффиксом `F`, который отправляет ту же команду в режиме nooLite-F.
Включить:

Expand Down Expand Up @@ -194,10 +198,11 @@ void ClearAllChannels()
void ExitServiceMode()
```


## Интерфейс командной строки

Кроме пакета `ThinkingHome.NooLite`, предоставляющего API для управления нагрузкой с помощью адаптера nooLite, доступна утилита `ThinkingHome.NooLite.Console`, которая предоставляет те же самые возможности для управления с помощью интерфейса командной строки.
Кроме пакета `ThinkingHome.NooLite`, предоставляющего API для управления нагрузкой с помощью адаптера nooLite, доступна
утилита `ThinkingHome.NooLite.Console`, которая предоставляет те же самые возможности для управления с помощью
интерфейса командной строки.

### Установка

Expand Down
296 changes: 144 additions & 152 deletions ThinkingHome.NooLite.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,190 +4,182 @@
using System.Threading;
using McMaster.Extensions.CommandLineUtils;

namespace ThinkingHome.NooLite.Console
namespace ThinkingHome.NooLite.Console;

internal class Program
{
class Program
private class CommonArgs
{
class CommonArgs
{
public CommandArgument<string> Port { get; set; }
public CommandArgument<byte> Channel { get; set; }
public CommandOption ModeF { get; set; }
}
public CommandArgument<string> Port { get; set; }
public CommandArgument<byte> Channel { get; set; }
public CommandOption ModeF { get; set; }
}

private static CommonArgs AddCommonArgs(CommandLineApplication cmd)
private static CommonArgs AddCommonArgs(CommandLineApplication cmd)
{
cmd.HelpOption("-?|-h|--help");

return new CommonArgs
{
cmd.HelpOption("-?|-h|--help");

return new CommonArgs
{
Port = cmd.Argument<string>("port", "Serial port name which nooLite adapter connected to."),
Channel = cmd.Argument<byte>("channel", "Adapter channel in which need to send the command."),
ModeF = cmd.Option<byte>("-f", "Switch the adapter into noolite-F mode.", CommandOptionType.NoValue)
};
}
Port = cmd.Argument<string>("port", "Serial port name which nooLite adapter connected to."),
Channel = cmd.Argument<byte>("channel", "Adapter channel in which need to send the command."),
ModeF = cmd.Option<byte>("-f", "Switch the adapter into noolite-F mode.", CommandOptionType.NoValue)
};
}

static void Invoke(CommonArgs args, Action<MTRFXXAdapter, byte> action, Action<MTRFXXAdapter, byte> actionF)
private static void Invoke(CommonArgs args, Action<MTRFXXAdapter, byte> action, Action<MTRFXXAdapter, byte> actionF)
{
using (var adapter = new MTRFXXAdapter(args.Port.ParsedValue))
{
using (var adapter = new MTRFXXAdapter(args.Port.ParsedValue))
{
adapter.Open();
adapter.ExitServiceMode();
Thread.Sleep(50);

if (args.ModeF.HasValue())
{
actionF(adapter, args.Channel.ParsedValue);
}
else
{
action(adapter, args.Channel.ParsedValue);
}

Thread.Sleep(100);
}
adapter.Open();
adapter.ExitServiceMode();
Thread.Sleep(50);

if (args.ModeF.HasValue())
actionF(adapter, args.Channel.ParsedValue);
else
action(adapter, args.Channel.ParsedValue);

Thread.Sleep(100);
}
}

private static void Main(string[] args)
{
var ver = Assembly.GetExecutingAssembly().GetName().Version;

var app = new CommandLineApplication();
app.Name = "noolite";
app.Description = $"nooLite command line interface - v{ver.Major}.{ver.Minor}.{ver.Revision}";
app.HelpOption("-?|-h|--help");
app.ExtendedHelpText = "\nSee the details on https://github.com/thinking-home/noolite#readme.";

app.Command("ports", PortsCommand);

static void Main(string[] args)
app.Command("bind", BindCommand);
app.Command("unbind", UnbindCommand);
app.Command("on", OnCommand);
app.Command("off", OffCommand);
app.Command("switch", SwitchCommand);

app.Command("set-brightness", SetBrightnessCommand);
app.Command("save-preset", SavePresetCommand);
app.Command("load-preset", LoadPresetCommand);
app.Command("change-color", ChangeColorCommand);
app.Command("set-color", SetColorCommand);

app.OnExecute(() => { app.ShowHelp(); });

try
{
var ver = Assembly.GetExecutingAssembly().GetName().Version;

var app = new CommandLineApplication();
app.Name = "noolite";
app.Description = $"nooLite command line interface - v{ver.Major}.{ver.Minor}.{ver.Revision}";
app.HelpOption("-?|-h|--help");
app.ExtendedHelpText = "\nSee the details on https://github.com/thinking-home/noolite#readme.";

app.Command("ports", PortsCommand);

app.Command("bind", BindCommand);
app.Command("unbind", UnbindCommand);
app.Command("on", OnCommand);
app.Command("off", OffCommand);
app.Command("switch", SwitchCommand);

app.Command("set-brightness", SetBrightnessCommand);
app.Command("save-preset", SavePresetCommand);
app.Command("load-preset", LoadPresetCommand);
app.Command("change-color", ChangeColorCommand);
app.Command("set-color", SetColorCommand);

app.OnExecute(() => { app.ShowHelp(); });

try
{
app.Execute(args);
}
catch (CommandParsingException e)
{
System.Console.Error.WriteLine(e.Message);
app.ShowHelp();
Environment.ExitCode = 1;
}
app.Execute(args);
}

private static void PortsCommand(CommandLineApplication cmd)
catch (CommandParsingException e)
{
cmd.HelpOption("-?|-h|--help");
cmd.Description = "Display the list of the serial ports on this computer.";
cmd.OnExecute(() =>
{
System.Console.WriteLine("Serial port list:");

foreach (var portName in SerialPort.GetPortNames())
{
System.Console.WriteLine($"- {portName}");
}
});
System.Console.Error.WriteLine(e.Message);
app.ShowHelp();
Environment.ExitCode = 1;
}
}

private static void BindCommand(CommandLineApplication cmd)
private static void PortsCommand(CommandLineApplication cmd)
{
cmd.HelpOption("-?|-h|--help");
cmd.Description = "Display the list of the serial ports on this computer.";
cmd.OnExecute(() =>
{
var args = AddCommonArgs(cmd);
System.Console.WriteLine("Serial port list:");

cmd.Description = "Binds the specified adapter channel to the nooLite power unit.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Bind(c), (a, c) => a.BindF(c)));
}
foreach (var portName in SerialPort.GetPortNames()) System.Console.WriteLine($"- {portName}");
});
}

private static void UnbindCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void BindCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Unbinds the specified adapter channel from the nooLite power unit.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Unbind(c), (a, c) => a.UnbindF(c)));
}
cmd.Description = "Binds the specified adapter channel to the nooLite power unit.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Bind(c), (a, c) => a.BindF(c)));
}

private static void OnCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void UnbindCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Turns on the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.On(c), (a, c) => a.OnF(c)));
}
cmd.Description = "Unbinds the specified adapter channel from the nooLite power unit.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Unbind(c), (a, c) => a.UnbindF(c)));
}

private static void OffCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void OnCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Turns off the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Off(c), (a, c) => a.OffF(c)));
}
cmd.Description = "Turns on the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.On(c), (a, c) => a.OnF(c)));
}

private static void SwitchCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void OffCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Inverts state of the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Switch(c), (a, c) => a.SwitchF(c)));
}
cmd.Description = "Turns off the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Off(c), (a, c) => a.OffF(c)));
}

private static void SetBrightnessCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
var brightness = cmd.Argument<byte>("brightness", "brightness level (0..255)");
private static void SwitchCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Sets brightness level in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args,
(a, c) => a.SetBrightness(c, brightness.ParsedValue),
(a, c) => a.SetBrightnessF(c, brightness.ParsedValue)));
}
cmd.Description = "Inverts state of the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.Switch(c), (a, c) => a.SwitchF(c)));
}

private static void SavePresetCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void SetBrightnessCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
var brightness = cmd.Argument<byte>("brightness", "brightness level (0..255)");

cmd.Description = "Saves current state of the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.SavePreset(c), (a, c) => a.SavePresetF(c)));
}
cmd.Description = "Sets brightness level in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args,
(a, c) => a.SetBrightness(c, brightness.ParsedValue),
(a, c) => a.SetBrightnessF(c, brightness.ParsedValue)));
}

private static void LoadPresetCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void SavePresetCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Loads the saved state of the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.LoadPreset(c), (a, c) => a.LoadPresetF(c)));
}
cmd.Description = "Saves current state of the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.SavePreset(c), (a, c) => a.SavePresetF(c)));
}

private static void ChangeColorCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void LoadPresetCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

cmd.Description = "Changes LED strip light color in the specified adapter channel to another predefined color.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.ChangeLedColor(c), (a, c) => a.ChangeLedColorF(c)));
}
cmd.Description = "Loads the saved state of the power units in the specified adapter channel.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.LoadPreset(c), (a, c) => a.LoadPresetF(c)));
}

private static void SetColorCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);
private static void ChangeColorCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

var colorR = cmd.Argument<byte>("red", "Red color level (0..255)");
var colorG = cmd.Argument<byte>("green", "Green color level (0..255)");
var colorB = cmd.Argument<byte>("blue", "Blue color level (0..255)");
cmd.Description = "Changes LED strip light color in the specified adapter channel to another predefined color.";
cmd.OnExecute(() => Invoke(args, (a, c) => a.ChangeLedColor(c), (a, c) => a.ChangeLedColorF(c)));
}

cmd.Description = "Changes LED strip light color in the specified adapter channel to specified color.";
cmd.OnExecute(() => Invoke(args,
(a, channel) => a.SetLedColor(channel, colorR.ParsedValue, colorG.ParsedValue, colorB.ParsedValue),
(a, channel) => a.SetLedColorF(channel, colorR.ParsedValue, colorG.ParsedValue, colorB.ParsedValue)));
}
private static void SetColorCommand(CommandLineApplication cmd)
{
var args = AddCommonArgs(cmd);

var colorR = cmd.Argument<byte>("red", "Red color level (0..255)");
var colorG = cmd.Argument<byte>("green", "Green color level (0..255)");
var colorB = cmd.Argument<byte>("blue", "Blue color level (0..255)");

cmd.Description = "Changes LED strip light color in the specified adapter channel to specified color.";
cmd.OnExecute(() => Invoke(args,
(a, channel) => a.SetLedColor(channel, colorR.ParsedValue, colorG.ParsedValue, colorB.ParsedValue),
(a, channel) => a.SetLedColorF(channel, colorR.ParsedValue, colorG.ParsedValue, colorB.ParsedValue)));
}
}
}
Loading

0 comments on commit 26ddc18

Please sign in to comment.