Skip to content

C# Библиотека управления ЧБ монитором клавиатуры Logitech

Notifications You must be signed in to change notification settings

IngvarRiga/Logitech_Monitor

Repository files navigation

Logitech_Monitor

Библиотека управления ЧБ монитором клавиатуры Logitech.

Сборка под платформу 4.6

Библиотека предназначена для управления простым выводом текстовой информации на черно-белый монитор клавиатуры Logitech из собственных программ на C#. Является самодостаточной, однако не до конца отлаженной. Также при некоторой доработке может использоваться и для вывода на цветной монитор клавиатур того же производителя.

Никаких ограничений по использованию - берите и дорабатывайте кому надо.

История изменений

02.04.2018

  • оптимизация функций
  • очистка мусора
  • корректное завершение работы (я надеюсь)

Вариант использования:

using etisLogitechDisplay;
...
private static void Main(string[] args)
{
    ...
    Display.Init(Properties.Resources.ETR, KeyProcessor);
    ... 
    AppContext = new winMainWin();
    Application.Run(AppContext);
    ...
    Display.DeInit();
    ...
}

private static void KeyProcessor(int KeyPressed)
{
      switch (KeyPressed)
      {
        case 0:
          ...
          break;
        case 1:
          ...
          break;
        case 2:
          ...
          break;
        case 3:
          ...
          break;
        default: 
          throw new ArgumentException();
      }
}

Класс Display. Подстраивается по конкретную программу.

using System;
using System.Drawing;
using plgLogitechSDK;
using System.Threading;

namespace LogitechDisplay
{
  /// <summary>
  /// Класс управления монитором клавиатуры Logitech. 
  /// </summary>
  public static class Display
  {
    #region -- Внутренние поля класса
    /// <summary>
    /// Название отображаемой системы
    /// </summary>
    private static string fSystemName;
    /// <summary>
    /// Принадлежность системы
    /// </summary>
    private static string fSystemOwner;
    /// <summary>
    /// Наличие в системе продаваемых редких товаров на одной из станций
    /// </summary>
    private static bool fRarPresent;
    /// <summary>
    /// Наличие в системе станций с инженером
    /// </summary>
    private static bool fIngPresent;
    /// <summary>
    /// Класс управления монитором клавиатуры
    /// </summary>
    private static MonitorMONO mon;
    /// <summary>
    /// Полотно, на котором отображается информация и потом выводится на экран монитора
    /// </summary>
    private static byte[] View;
    /// <summary>
    /// Поток обновления экрана монитора
    /// </summary>
    private static Thread ViewRefreshThread;
    /// <summary>
    /// Флаг окончания 
    /// </summary>
    private static bool Exit;
    #endregion
    
    #region Внешние свойства класса
    public static string SystemName
    {
      get { return fSystemName; }
      set
      {
        if (value != null && value != fSystemName)
        {
          fSystemName = value;
          RefreshDisplay();
        }
      }
    }

    public static bool RarPresent
    {
      get { return fRarPresent; }
      set
      {
        if (value != fRarPresent)
        {
          fRarPresent = value;
          RefreshDisplay();
        }
      }
    }
    public static bool IngPresent
    {
      get { return fIngPresent; }
      set
      {
        if (value != fIngPresent)
        {
          fIngPresent = value;
          RefreshDisplay();
        }
      }
    }
    public static int DampPeriod
    {
      get { return fDampPeriod; }
      set
      {
        if (value != fDampPeriod)
        {
          fDampPeriod = value;
          RefreshDisplay();
        }
      }
    } 
    #endregion

    /// <summary>
    /// Инициализация монитора
    /// </summary>
    /// <param name="KeyProcessor"></param>
    public static void Init(Bitmap Spl = null, LogitechLCDKeyProcessor KeyProcessor = null)
    {
      //-- Инициализация монитора
      var initRes = LogitechMonitor.InitLogitechMonitor(Spl, KeyProcessor);
      //-- создание (пока что единственного) логического монитора
      mon = new MonitorMONO();
      fSystemName = "«Не указана»";
      fRarPresent = false;
      fIngPresent = false;
      if (initRes)
        StartMonitor();
    }

    public static void DeInit()
    {
      LogitechMonitor.DeInitLogitechMonitor();
      Exit = true;
    }
    /// <summary>
    /// Установить дисплей
    /// </summary>
    /// <param name="SysName">Название текущей системы</param>
    /// <param name="rp">Наличие в системе продаваемых редких товаров на одной из станций</param>
    /// <param name="ip">Наличие в системе станций с инженером</param>
    public static void SetupDisplay(string SysName, string Owner, bool rp, bool ip)
    {
      fSystemName = SysName;
      fSystemOwner = Owner;
      fRarPresent = rp;
      fIngPresent = ip;
      RefreshDisplay();
    }

    /// <summary>
    /// Обновление дисплея клавиатуры
    /// </summary>
    private static void RefreshDisplay()
    {
      //-- Получаем чистое полотно, на котором будем рисовать текущее содержимое дисплея
      View = LogitechMonitor.BitmapToByteRgbNaive(Properties.Resources.cls);
      //-- предварительная подготовка информации о требовании дампа.
      //-- надпись и центрирование по первой кнопке дисплея последняя строка с 0 по 39 пиксель
      //-- и запроса информации по EDAPI
      //-- с 80 по 119 пиксель
      var txtEDAPI = "EDAPI";
      var posEDAPI = 88;
      // на первой строке просто надпись
      mon.TextOut(ref View, 0, 0, "Текущая система:");
      //-- вторая строка - название текущей системы (даже при маленьком шрифте может и не уместиться)
      mon.TextOut(ref View, 0, 9, fSystemName);
      //-- третья строка - принадлежность системы
      mon.TextOut(ref View, 0, 18, fSystemOwner);
      //-- вывод надписей (иконок) над кнопками
      mon.TextOut(ref View, posEDAPI, 35, txtEDAPI);
      //-- текущее системное время: часы, минуты, секунды... этого достаточно
      var posTime = 161 - mon.GetStringLengthPost("00:00:00");
      mon.TextOutPost(ref View, posTime, 0, DateTime.Now.TimeOfDay.ToString("hh\\:mm\\:ss"));
      //-- Перенос сформированного изображения на экран монитора клавиатуры
      LogitechMonitor.Paint(View);
    }

    private static void StartMonitor()
    {
        Exit = false;
        ViewRefreshThread = new Thread(new ThreadStart(LoopRefresh)) {Name = "ETR_RefreshLogitechMonitor", IsBackground = true};
        ViewRefreshThread.Start();
    }

    private static void LoopRefresh()
    {
      while (!Exit)
      {
        try
        {
          Thread.Sleep(1000);
          RefreshDisplay();
        }
        catch (Exception ex)
        {
          //ServiceWins.ShowError(ex);
        }
      }
    }
  }
}

About

C# Библиотека управления ЧБ монитором клавиатуры Logitech

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages