Приоритет владельца: sysadmin проверяет весы/принтер/сканер на ноутбуке магазина без входа в кассу. Отдельный exe (food-market.pos.hwcheck), ссылается ТОЛЬКО на pos.core ради Hardware/* — не умеет быть кассой (нет логина, сервера, БД, токенов, сетевых запросов). - pos.core/Hardware/HardwareProbe.cs: детект COM-портов (занят/свободен, VID/PID, описание) и принтеров Windows (имя/порт/в сети/число заданий) — только чтение, очередь не трогаем. WMI под OperatingSystem.IsWindows(); на Linux — базовый COM. - pos.core/Hardware/BarcodeScan.cs: контрольная цифра EAN-13/EAN-8 и оценка «сканер vs ручной набор» по среднему интервалу между символами (чистая логика). - food-market.pos.hwcheck: окно на Avalonia (код, без XAML), светлая тема, русский. Весы (Найти/Прочитать/Запустить-Остановить, live-вес ~350 мс, сырой hex, ручной выбор порта/скорости/протокола), COM-порты с пометкой «занят», принтеры (только чтение), сканер (EAN + тип ввода), «Сохранить/Копировать отчёт». Тестовая печать ВЫКЛ по умолчанию, включается только --allow-test-print. - tests: EAN контрольная цифра (13/8, валид/битый) + классификация ввода. 50/50. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
1.1 KiB
C#
29 lines
1.1 KiB
C#
using Avalonia;
|
||
|
||
namespace foodmarket.Pos.HwCheck;
|
||
|
||
internal static class Program
|
||
{
|
||
/// <summary>Тестовая печать разрешена ТОЛЬКО при запуске с --allow-test-print
|
||
/// (ключ даёт владелец). Без него кнопка «Тестовая печать» выключена и на принтер
|
||
/// ничего не отправляется.</summary>
|
||
public static bool AllowTestPrint { get; private set; }
|
||
|
||
[STAThread]
|
||
public static int Main(string[] args)
|
||
{
|
||
AllowTestPrint = args.Contains("--allow-test-print");
|
||
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||
return 0;
|
||
}
|
||
|
||
public static AppBuilder BuildAvaloniaApp()
|
||
{
|
||
var b = AppBuilder.Configure<App>().UsePlatformDetect();
|
||
// На headless/VM без GPU — ПО-рендеринг, чтобы окно не было чёрным.
|
||
if (OperatingSystem.IsWindows())
|
||
b = b.With(new Win32PlatformOptions { RenderingMode = new[] { Win32RenderingMode.Software } });
|
||
return b.WithInterFont().LogToTrace();
|
||
}
|
||
}
|