From 142546ed187893403f8658cf77336d07069c4e81 Mon Sep 17 00:00:00 2001 From: achikhv Date: Fri, 8 Apr 2016 11:52:48 +1000 Subject: [PATCH] Initial upload --- VKT5_RemoteConsole/Plugin.cs | 174 ++++ VKT5_RemoteConsole/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 153 ++++ VKT5_RemoteConsole/Properties/Resources.resx | 148 +++ VKT5_RemoteConsole/Properties/licenses.licx | 0 VKT5_RemoteConsole/Resources/PluginImage.png | Bin 0 -> 6821 bytes VKT5_RemoteConsole/Resources/back.png | Bin 0 -> 5740 bytes VKT5_RemoteConsole/Resources/down.png | Bin 0 -> 5278 bytes VKT5_RemoteConsole/Resources/enter.png | Bin 0 -> 5032 bytes VKT5_RemoteConsole/Resources/left.png | Bin 0 -> 5614 bytes VKT5_RemoteConsole/Resources/menu.png | Bin 0 -> 5193 bytes VKT5_RemoteConsole/Resources/right.png | Bin 0 -> 4795 bytes VKT5_RemoteConsole/Resources/tab.png | Bin 0 -> 5297 bytes VKT5_RemoteConsole/Resources/up.png | Bin 0 -> 5284 bytes VKT5_RemoteConsole/Resources/vkt5_icon.png | Bin 0 -> 705 bytes VKT5_RemoteConsole/Resources/vkt5_icon1.png | Bin 0 -> 705 bytes VKT5_RemoteConsole/Vkt5Console.cs | 333 +++++++ .../Vkt5ConsoleControl.Designer.cs | 222 +++++ VKT5_RemoteConsole/Vkt5ConsoleControl.cs | 382 ++++++++ VKT5_RemoteConsole/Vkt5ConsoleControl.resx | 866 ++++++++++++++++++ VKT5_RemoteConsole/Vkt5RemoteConsoleForm.cs | 81 ++ VKT5_RemoteConsole/Vkt5_RemoteConsole.csproj | 127 +++ VKT5_RemoteConsole/Vkt5_RemoteConsole.sln | 28 + .../Vkt5_RemoteConsole_debug.csproj | 134 +++ .../Vkt5_RemoteConsole_debug.sln | 22 + 25 files changed, 2706 insertions(+) create mode 100644 VKT5_RemoteConsole/Plugin.cs create mode 100644 VKT5_RemoteConsole/Properties/AssemblyInfo.cs create mode 100644 VKT5_RemoteConsole/Properties/Resources.Designer.cs create mode 100644 VKT5_RemoteConsole/Properties/Resources.resx create mode 100644 VKT5_RemoteConsole/Properties/licenses.licx create mode 100644 VKT5_RemoteConsole/Resources/PluginImage.png create mode 100644 VKT5_RemoteConsole/Resources/back.png create mode 100644 VKT5_RemoteConsole/Resources/down.png create mode 100644 VKT5_RemoteConsole/Resources/enter.png create mode 100644 VKT5_RemoteConsole/Resources/left.png create mode 100644 VKT5_RemoteConsole/Resources/menu.png create mode 100644 VKT5_RemoteConsole/Resources/right.png create mode 100644 VKT5_RemoteConsole/Resources/tab.png create mode 100644 VKT5_RemoteConsole/Resources/up.png create mode 100644 VKT5_RemoteConsole/Resources/vkt5_icon.png create mode 100644 VKT5_RemoteConsole/Resources/vkt5_icon1.png create mode 100644 VKT5_RemoteConsole/Vkt5Console.cs create mode 100644 VKT5_RemoteConsole/Vkt5ConsoleControl.Designer.cs create mode 100644 VKT5_RemoteConsole/Vkt5ConsoleControl.cs create mode 100644 VKT5_RemoteConsole/Vkt5ConsoleControl.resx create mode 100644 VKT5_RemoteConsole/Vkt5RemoteConsoleForm.cs create mode 100644 VKT5_RemoteConsole/Vkt5_RemoteConsole.csproj create mode 100644 VKT5_RemoteConsole/Vkt5_RemoteConsole.sln create mode 100644 VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.csproj create mode 100644 VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.sln diff --git a/VKT5_RemoteConsole/Plugin.cs b/VKT5_RemoteConsole/Plugin.cs new file mode 100644 index 0000000..63c1fbc --- /dev/null +++ b/VKT5_RemoteConsole/Plugin.cs @@ -0,0 +1,174 @@ +using System; +using System.Windows.Forms; +using Lers.Plugins; +using Lers.UI; +using Lers.Poll; +using Lers.Utils; +using Lers.Interop; +using System.Collections.Generic; +using Lers.UI.Tabs; +using Lers.Core; + +namespace Vkt5_RemoteConsole +{ + public class Plugin : IPlugin + { + #region IPlugin Members + + /// + /// Инициализация плагина + /// + /// + public void Initialize(IPluginHost pluginHost) + { + Plugin.Host = pluginHost; + + // Добавляем элементы управления для точек учёта + Plugin.Host.MainWindow.RegisterObjectAction(ObjectType.MeasurePoint, "ВКТ-5: Удалённый пульт", Properties.Resources.vkt5_icon, OnRemoteConsoleOpen); + } + + #endregion + + /// + /// Экземпляр хост-интерфейса клиента + /// + internal static IPluginHost Host + { + get; + private set; + } + + /// + /// Пользователь выбрал пункт меню или навигационного окна "Удалённый пульт" + /// + /// + /// + private void OnRemoteConsoleOpen(int actionId, object sender) + { + MeasurePoint measurePoint = (MeasurePoint)sender; + + // Запрашиваем требуемую для работы информацию + measurePoint.Refresh(MeasurePointInfoFlags.Equipment); + + // Проверим, что у точки учёта есть устройство + if (measurePoint.Device == null) + { + MessageBox.Show("У выбранной точки учёта не задано устройство. Выберите точку учёта с поддерживаемым устройством.", + "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); + + return; + } + + // Проверим, что мы работаем с ВКТ-5 + if (!CheckDeviceModel(measurePoint.Device)) + { + MessageBox.Show("Удалённый пульт ВКТ-5 не поддерживает работу с устройствами " + + measurePoint.Device.Model.Title, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); + + return; + } + + // Проверим, открыто ли окно с опросом этого устройства + Vkt5RemoteConsoleForm currentForm = GetOpenedForm(measurePoint.Device); + if (currentForm == null) + { + // Такого окна нет, открываем + NewForm(measurePoint.Device); + } + else + { + // Окно уже есть, переводим фокус на него + currentForm.Show(); + currentForm.Focus(); + } + } + + + /// + /// Проверяет, что в выбранной точке учёта указана модель, + /// которая поддерживается удалённым пультом + /// + /// + /// true если модель поддерживается, иначе false + private bool CheckDeviceModel(Equipment device) + { + return device.Model.Id == (int)DeviceModel.VKT_5; + } + + /// + /// Открывает новое окно для управления устройством + /// + /// + private void NewForm(Equipment device) + { + // Окно для этого устройства ещё не открыто + Vkt5RemoteConsoleForm mainForm = new Vkt5RemoteConsoleForm(); + + // Заголовок окна + mainForm.Text = "Удалённый пульт - " + device.ToString(); + + RemoteConsoleFormParams param = new RemoteConsoleFormParams(); + + // Параметры базовой формы опроса + param.PollConnections = device.PollSettings.Connections; + if (param.PollConnections != null && param.PollConnections.Length > 0) + { + param.SelectedConnection = param.PollConnections[0]; + } + + // Параметры формы удалённого пульта + param.Device = device; + + // Инициализация + mainForm.Initialize(param, Plugin.Host.Server); + + Plugin.Host.MainWindow.AddPage(mainForm); + + mainForm.Show(); + + mainForm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(currentForm_FormClosed); + + lock (this.visibleForms) + { + this.visibleForms.Add(mainForm); + } + } + + /// + /// Возвращает открытую форму, работающую с указанным устройством, или null если формы нет + /// + /// + /// + private Vkt5RemoteConsoleForm GetOpenedForm(Equipment device) + { + lock (this.visibleForms) + { + foreach (Vkt5RemoteConsoleForm form in this.visibleForms) + { + if (form.Parameters.Device == device) + { + return form; + } + } + } + + return null; + } + + + /// + /// Закрыто окно удалённого пульта. Удаляем его из списка открытых окон. + /// + /// + /// + void currentForm_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) + { + lock (this.visibleForms) + { + this.visibleForms.Remove((Vkt5RemoteConsoleForm)sender); + } + } + + private List visibleForms = new List(); + } +} \ No newline at end of file diff --git a/VKT5_RemoteConsole/Properties/AssemblyInfo.cs b/VKT5_RemoteConsole/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7f4425e --- /dev/null +++ b/VKT5_RemoteConsole/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Lers.Plugins; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Удалённый пульт ВКТ-5")] +[assembly: AssemblyDescription("Внешний модуль ЛЭРС УЧЕТ для удалённого управления теплосчётчиками ВКТ-5")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("ООО \"Хабаровский центр энергоресурсосбережения\" (www.lers.ru)")] +[assembly: AssemblyProduct("Система диспетчеризации ЛЭРС УЧЕТ")] +[assembly: AssemblyCopyright("© 2000-2014, Хабаровский центр энергоресурсосбережения")] +[assembly: AssemblyTrademark("Внимание: Данная компьютерная программа защищена законами об авторских правах и международными соглашениями. Незаконное воспроизведение или распространения данной программы или любой ее части влечет гражданскую и уголовную ответственность.")] +[assembly: AssemblyCulture("")] + +[assembly: AssemblyPlugin("B8837A83-3700-47E1-ADAA-02E7496914F0")] +[assembly: AssemblyPluginWebsite("http://www.lers.ru")] +[assembly: AssemblyPluginEmail("support@lers.ru")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("092a73fe-433c-4ab9-b6df-54ca0393806c")] + +// Чтобы внешние модули обновлялись автоматически, необходимо увеличивать версию файла. +// Т.к. мы можем забыть это сделать, то лучше чтобы версия увеличивалась сама. Звездочку можно задать только для версии сборки, +// для версии файла она не работает. Но если не указать версию файла, то она будет равна версии сборки. + +[assembly: AssemblyVersion("1.1.*")] +//[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/VKT5_RemoteConsole/Properties/Resources.Designer.cs b/VKT5_RemoteConsole/Properties/Resources.Designer.cs new file mode 100644 index 0000000..7f3ade7 --- /dev/null +++ b/VKT5_RemoteConsole/Properties/Resources.Designer.cs @@ -0,0 +1,153 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Vkt5_RemoteConsole.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Vkt5_RemoteConsole.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap back { + get { + object obj = ResourceManager.GetObject("back", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap down { + get { + object obj = ResourceManager.GetObject("down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap enter { + get { + object obj = ResourceManager.GetObject("enter", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap left { + get { + object obj = ResourceManager.GetObject("left", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap menu { + get { + object obj = ResourceManager.GetObject("menu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap right { + get { + object obj = ResourceManager.GetObject("right", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tab { + get { + object obj = ResourceManager.GetObject("tab", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap up { + get { + object obj = ResourceManager.GetObject("up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap vkt5_icon { + get { + object obj = ResourceManager.GetObject("vkt5_icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/VKT5_RemoteConsole/Properties/Resources.resx b/VKT5_RemoteConsole/Properties/Resources.resx new file mode 100644 index 0000000..dddbd34 --- /dev/null +++ b/VKT5_RemoteConsole/Properties/Resources.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\vkt5_icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\enter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\menu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tab.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/VKT5_RemoteConsole/Properties/licenses.licx b/VKT5_RemoteConsole/Properties/licenses.licx new file mode 100644 index 0000000..e69de29 diff --git a/VKT5_RemoteConsole/Resources/PluginImage.png b/VKT5_RemoteConsole/Resources/PluginImage.png new file mode 100644 index 0000000000000000000000000000000000000000..ab44f6616a95b70a3b90083854eeea1dacf0e947 GIT binary patch literal 6821 zcmV;W8d~LvP)O{}GLw(VOg>~Y`I78%11+<2=2v1NV4u zdI3kS_wVDi1;UznZPTAd+MT>cq=|E!r}4Oau8`{@{$?@nE#kY#){ZpU_#4ITxX1Y& z&V}7A?%>#gw304VcJ%EM*Lm7s(*8<-{rei_K=F<2x}P)nV54Oc!;`CUO|4*Pas^J# zN2c8vnQ~)v+CvlL{(Nl4gYj7}#^(GOn-5@=u`+6xQ_7NaOjnV<>$xvyw{e9#*mE1k>r?)i7~-3 zDO*xlG|6icNJPYWG4l8L>^Mj9n{l3t#y4ObUcjB)Ml`7Hgo$6hQLlBj-^^~r*y0+N zgDJSZNd)+U9=^Cg93TKMAF@qA8;C?wh{rY%i>`B>L^PJ7ts}%^Qeq3?j>|YlA8p>bMY`z@ff0f&U$hK>j@qwh-7jL zsnn)yajxTH0}>nZxdfjPjjTh8B;ku~qo7uY!uoF5hG&Z3s8#mkKJ(4X-SrEv`XxwG z2yX6bfaBQ6G^_)QunvvG?ixq`@EH1CBe1z#=%ZPOT(ArcaX!p(5N2V61Lz%e(E8Ei zu%oBn29v!HMn@kE4hswe7HAzk(Ds|4;iw$2LTR^i)S<&>fogCNfmPvkMprxm ztpl*yT*IyV=nGuApMih*@c`aVKZLi^4&a^i12`n?{sA0*@D7e- z9Kx{&hw$!$gB;(%yBP;@{NW+I_xLbQX40|_(cZzSoI^OBe*`BB4&!wBah$6;jkC3< zajyOh&eom5`GybiMeF;x(s2cs6}K=uyG(DVuU2xd?Ff~4ffX|Hwbc)v##Ln(>SnZ>Dw(LeA5P{aZ z54L~bvku&+XC>yVSBk+tF@cF^&oDAN$9(+*Zd4ZIc>P;A()lX_{v}QbkV=B=dQ-O3 zs<-g2@=cu3awM4dIG)f5a6Bdei?x=X)gC0kqqtx^i7!lN@H_K|_@?gyu2{an*Vc=) z-{O+(3tYBe!oMlMCD>&oVo|Iv`^dx|>^wU&+R_rHCtOf= zbz*vY78_d|usO!Du?H_9I3 zbnTlssQgzPp{L%}5U^GlJw`ys>9Kd!2MF>o!5zdY%|Uwb06lmRXS9d#q2UNVHXg$# zrsFu@a{?E7PvL@@)_YpE&nzcsr|_lu1AJ+@fG>JK!&jY`F*E1EI$7K84#73&!}Glz z?Cou0b2EwboH&)i8_&*ai{C1nXsel34eK`kulyHY=YD$DiY-;t5VQ9$@$~M3u}t z=HzL5^R&o6&D%IhJH`Avr6*7Vd!O?&+=%z}Z!>HOR8NrIM+x{C=ST6O{un+MW;lxT z1|Bne?Uqj+D*P^Fzz9l{CaNu1HpQzCSE?zHAO$3r-)I)-z~Q#hwS zjt|twa9(*7A8FsidG#r-PvT>mn4i-fWkejpDdXEXt7ll(e}?fT37dS6fSXEcY7VLO zT_hl;zU^9p@4s`X9sSfOu6g-*ls8dR%ws8QC# z8win&1Msnw)Tk|}R`#Kx%Yxc2BkFWk)No!;YfxKJuQH=fX_c*($C@+_tVt9$be;g4 zL$G!y2}+2HbPD`{@MJ)uR1A@osh&sDvy0UB3yv?a zvGWtwpYLJ)1&=@9#KtbyJih*X2OE3a*m(W|$rpP_?(Om19#VVHvBmPRwX=n-?G4_~ zd-$x4O_Iw7kEi|v8ynm3Q#JWhNlHHniFK+Zs;U%^MN?F38=Huw_FHHcn^G`ly&9o)i-P1cKD3zA)vXv`*a_LNMfE!H%;I zuOkpz=Xqhf2uEHZ%xfY{fe<|q6w)yKl0Wtw!RQVGl#$`^CPJ^yha$TOMz$C^+w!yg zLEaPGp>lhHRqF9&hUtoT3qe1BKM=>VKMs%Ehh>kSVHt#bg&M#cz`WZnACFNbg@w^6 zA&Lx%7NQCi^DxO(dKJc5H9D%m2?5r@7O54h1P~2yw|wFvA3dESpbbn@ndtgvptH`f zBU(VWWtydF7JB_K&BKdMwN)EY(^+JmU;;96-%X z7@S+ewOkc$7k442+J^FW2demjSxt7_D^X*KJ2)}t#obap?$-36tYsWcS|@5vi+I%7 zhoS~6Q{W{!E#pY9=)sd3BTLB?8cee&RF2_xi2>^FDI~Xc@u*6RtHqtTS-}3bqyw2P zL#WivqS`Qnk`@Otiq*Kz{`gv61Ip@j6dZnbOpHjO{ABeU>1;FWsz&~ z?9(*@*CV6JjEd$Vj6QXvvF8~|HDf4kvN4BWqTS@egUTML7$KD{HneE^VRWq`qmE61 zaTI&&+sG@k;6{mtjd}+jm#gro+KBu{JIcBSkymTPqjEiNmK&(*v;=Qvd7*QJllZQ} zMB5o8v4sTD(n29Bs6J6=wJ=j?$OI+63iuiKqTBJaA#k%j3Nkkn(heJFFYcA8aKBWE zf^r?g>p!Eq!@}Jf!lQ~lc!HalWyAcSq#NlZf_mjRRwzC5>K%AQAcggIB({ErvUdy_ zmA$C$vcV($1fPF{fL*vztb)3C1e+<|qcGuiX*-IV3~-FBpq~wZ$~4Ybu-q5;*hu-J~r4v zK0sn~>|{Z|S8gKMZVU}CvfoT#ng#z>Q5Sy5SHevqnWlElsk0)jMu`WdS~#YcnHqXr zrRL5i;MnHRY_(kc(LRP@6Q)-rYS%Ektqy$is1~i=BS>v+;YqccWZ8l2YAr@){IEDh zPLEK+vW4p>XyX|9MTKiDm1XS&yC%FT!0rQ$gxR#yQ4&E)B-9Y2PD^c^NhkEa4&(a_ z8!ti1y=;K35o6yUB9pSka!jo;Uve*Mzo)tMu`Ng^vWnGFe<^#MaB(a|HX3=rn%Im`SnYH-hZUH_` zQ{dwta`D;CY}_i;@V==0E$BvpiZ9uKOX&*S%vIp?>m|7KsG2oSN6+rap?K|yh5#FI z@pciuyq<&4(@JnTtC|}zhHWaOJZjh;9#TYJ73C2p|2Bi4U%2;G=KT3BD3H zay$83o!l%7*;s&MiIhDnfbV-(_A1{iAha>r_zBtAJV4LxgKfhqK??OG7+D6(9F8%E zr{|WDNoLGop8S~8h=04Uz*XAg;#NFS^s<@g zsa-M(QaS^ZJvRucNAT{!)P*% zqEYLj$e2bV^%4Wj{T8m<3}!SL`_Z5uMGN_&zSF`!+KnhBV261O4ecg0cA8L2?DAJ<9u&0bD00TIv>YNx!NmKaD}cWCt^h0WX!*`hYPIO?AEswJDGr#k zoS<)w_wkqpK92;~h1}Y8)tA|VMcC+nn3o@Xc)qSVm)$eO(;~2qq27mWy&Fnhh{W!qY|4x;bDcS zv2D0n+`^R5A-i<|b;b$Q_RKQ0d2OKzKjbvw``mhz3W8b{;8-+6CAy2O9x;mMkmTocxJf)J z>qF2R!T9(b(kLn(RQDpgQZIkdF6tV`;|4qOt8@&(9kl5OkzTAtMk#A{l@Sk{`jOc_ zg!F19x{M=;^O`ILnU;0-W~l~`6y4A{7ofCFQb6=GUs=~n)g-Vwe3z#{d4m8e#Kdc_ zicl7Fp^-%i6?HbeAI8+iz4j4?G4-bSi^3NWb(Uc1VLvZki!h{_w~jF~Eo<9Dg&NwS zDdg9)Y&28ZG@0lX4ctCI#wTZSx2zkt$~1Ub)QQ32N!%n;Un^7+fEo$rU<2EPZ^mcjcaT380fzXcvRoGTa@@nOK}Cy{yZBcF6l5s#<)iF6 zLL@4|%#O(g+^f`}sJ;jNR8zHj7wYu`ctVwPIkN_9yk>ZE2I&d|!;k8x!AQ}uitlq; zahbL9AsITxFs>8bRV6oyVO~tHsEw0+VKaVvy9{0G5faoEGRrl%Uf7Ae3LU0q!x$P{ zVUw^(?LCLtg=N&VnDG7MCVcm#4JGwPEG`FFB3}szIgDSC6mwN#ItuBiHdD+9f)a93 z(PqVcs+J{|8&Akf(0*RTu7Pzo7?$AVkELacKf74$?^ojM$94GKy<&WNJrBQsSj*Cr zz|iC~iiLLWdNcF83AWLBe15A0pWP~Cp0*>J_=#PM1K;Iz;7V2_E4H1LN?3BS;g@RJF_sKcy;cmDkH!t+Fr;Q^j-^|^mM7)vNfGZga ze0nnvA6?JHC*R$}r$0Q#5A^J+HwxRxGkl-bfXnyFsdVyi@%s#%r||gdRx$Iem2A8P zMXQFJQ-+K8^6}yIEL^yefse1I;kOTp(X8o1WGhAWL}8NOMrBruD~}ZT!qL)5*a49*|X%04vI7kR4Be-h2&Ik|gG=i*;7F-}T6KmOl{o zihlvzl#B%Hj*^l0^VT&%QNc#wQCTN$vpc$8P=~wOmB=mYKt8(((S(bC?Q%KKtL$RU zZpOocMm(m-$YZWFs;sQhNf@mIC~Y>Nu)%=Lx?W^f8OY2=5|0k9kvZyc2};uhDmrW= zKob=0HVTe@6x5K>>#by8J8ByGP}|zaxt@LXIF^?D`yiQ{LLc~
R;kR&U{03E07 z9YW^ou1Ay}`GcE}F)n#og1o#*G{qsTCA?T;IhvdBV3vR;=OdV02w-vEOABM3)c=&a zcKE6D`x&x+KGzeAvJDmOC_6O%ZXmP|($8w* z^|L4Uc?gtF^SPO`gY3M>#zH|U7{+N7@hjZTu*U=6(gK1cn*SvIZ?cPVkB#ErJM7qK zH6f(zK~QhShRJ~h*GYCVsV*}D)Uey8A#C;xB51WETBk!o*AHKkT01P-MS`P+*gA&z z(!v`7QQBw{Us{S1T!eL=Yac^#l@%c%?h_yW7^Z%X;vT>Fr%@O;%@=0GtgOOKQgSm_ zz1$QJ%Z-=!`o#TyFC>C(*Vrg3wCHwD;*F+m=ZhQJO)w3NBD~^;r=|lbl8KMS+tW<2 zODlM8oyAsrKcbX@DeE{kj2y|JN!<_<>H%zY4&X)41d?h8k}TrM#vW|3ZSxVBcwtfR z1lh@>Y~pJILCRkg_UGd3LYNyeGBS-xmb<>bQS>_|(C?f^-@pXyLz8g0rZ77F4E?Tg z%r36N=A1wuk6Q-DFgPNJ)-XI3-o;xbJlSIp5ZSsY(q?iU{Dx)X&&?W=siEZN(=a?=6v)r=Ta~(e|Z#N z5QFT!#r=LCL)gz}2o|Pig#~zQWzCOLc2Boi5C~adyG6LP;?Eetw-wLpQLHldk zTU}=7e=AgdD5t6_q0*_Lwk>J3A(vf8X+&qq00000NkvXXu0mjf0%0-r literal 0 HcmV?d00001 diff --git a/VKT5_RemoteConsole/Resources/back.png b/VKT5_RemoteConsole/Resources/back.png new file mode 100644 index 0000000000000000000000000000000000000000..c95a0d3ecf7ea234bed3f2dbe56f39dbe3ebf031 GIT binary patch literal 5740 zcmV-y7L)0TP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000%+NklV`M2Zw8YL{qjmgQw^jaS*SP$FUTyJ_XHHW*=+W&zE$Bs#f5>5Wj4aN2XZWsWr_yR5phQzDNV&xu=9xUDk zh;GXTgd<&Ey&jNmq!W*HAl*n0_gDb+0o;oOc%FjtI_?`!(Ao33&hLJlc0b^5D;)bp zFdD4~L*c*K4vX8CS+rLd27u3Ji3f#yy@Zq3LUFudIqw8ed{&^Hgjc%(%Kd=R-zo@; z(6cnuY#Tsf2?Sj@<*=4r4+cZO_yH<@|1EAL`71k|*j2*%{R+TC=o~29jp7zcSw5fm zyl{YPmURH87e!TBwR|U_JSf~{JJN|LZ`5;o^rE~^c|)lAZNkm(NDwav^%x9EAmHu> z?BK7yU((4_SwD)~0JM3Yt(;*^ht%zm32nY78GM7+KKxN&Lh0DA?PT~XUxbC-FpILdF3LjP z0P4Z*9z$q|tKp&E@)F;E7lp`T0I|#wAXwW%{F>bq0Oy*e4$k41rfaplh7q5GPC#6~ z50cJiT!8QWL9U0CxG3tvF-WY}^vH&I@Vz<52(F_9M|nV?xNXN#JT88h zqXJQm>Tg{4a}4nPn`k(h92!|5P2)GJt!^FYwJnT0g$R56WVRR+t2g5q*L9Er$4Usg_^`xv9d z#ff6wcO{D|Y`aK^-*LYkLOGt}u%4ry#3-h;;dwspwYW!h(RK89c>Zm#6aD?a1mnh% zhw#J~5L_%C;6)iP57E%k@G>D_9)<-0r4RIL&Nr4;#Uc`NV-kT^;Ydu9iKv`d8j~v< zr=>Df7dw^|KZ!%@uP}-SdA@@L!ziX9!y1l;mGPd26<*K~L(JOzMuB)Sn1^+Hoah%` zH}bzj%#9~PK|JB-2LT?Y1oWYtmK!|=45a0nN`OUe^$Lm@tA!mKz&qj*lnd{|Re@;zc98AJY<%bC zcU>I2;UeK3`X{eMlbK&eV#zN<;e(k8a8SX9>O9j2j?uRA%XRsDCrSPt8y;K zSS%&^oGYhKPRiz;^K$pr8M$@$vXq+*abpPybB~M1Ts-d(|G`iKW02wrCFPP?-|$Ge zcu=?Xs0ZLoFZy(&SC4|=JCEah+2yx?`FAkUROS!iSQ>Y~BNdiX7g{JD;9NQ3LwTS1 ztO}qAF(1;{#{+IODUoPGBB_LA(zc8>qVnMGIoaC$MDA~$ms|JF%g2|`N+gj2Xk4QF zHlknv;PQ+hA*p*t0G?=Y^2YH51L+;@S3)5n-It1>Jbl~P^C3XYIrMWwL<9DZNThp!Mg@X zG?o1zl1zUaim9S%ZIqAjKm~!qmIA?wHenG|EAoAq?;~7OFND;}sVr$WNl3+Ib}TRV z?w*kcDF5KWC3*1ZvTQxPD0lG6=}TuNn9bn1q=XQ9nFEh%hyjGg%cNwpA3<>4Og-%C zy_|d4YkJr$Re5a{y4aKnEB3YEw`>C+w1qO+!{Jm4g$_bRNvoE!StNj1F?bMTp*S1> zEL@T(peX4jo=6ie9N8-}`Ggd55xI7LNgixnk)4NEWOrv>b^!9|;U&4ZbwRFeZAfKu z3a_Na!2k}=u>s+*kLZ4)UNNazvm>C)=Brh<*|%sF0+#VamsZvaL<>_&8&4o|xGj>& zjJQdx6Hgj4x@vu_Zb+;G0QFWB0I@_y;<210;u$0*$z%dBDR_~WQZ^xr6BXIHzb22i zRe69szABF&ugT+`E3yrsTU%?gdijEc)f@21;`!=z&3q<}>pr2WRySI_V#rRZqqUt@ z$6D)|@`x%z0krpOy@!W<_DEYQm*0dVCPbVBwGHu03oBtjMPpHvkD_c`5~R;03P(r^ z$z)d2$&94&WIEj^xolo){c*W@X$b&;*g^S6R{*gt50RanYw`#{TaO5_&1*6=H6al~ zEQ}!n5dgu#_xprqMXeaT05P3rAWBU~QK~hbHfZ!c+Mpf5Q=O&@HQ+Ye68Ze=XeL9R z$4UtbwKzO501`+N00+k?5(98F10PZuNpYU$ce!l8^y7`W>6$zwd>-svmM6Pw2p-wJ zX29$!5Y8X+-PZjpa$)_PByu@ClO>r@!jOV>v$S-R)s0x2Hww;Pq|+CYP6|@(YZQcb znjKW#?X(oyZE7oxylzVt%5THjJ_!=HVcZ?X`Vm0HQ^bEdi*Us9@hl;g&r3Ad2PX(E zt|fC>DfH)MsGO3G>t`W1UU;%@fb2iHhOEoplQm>r9zEGG-r0V5L2lo_AS08b;_^(J z5Ou>D!b`y@$q$AXUef|--$EY)h=Z0{!w9ZeJ_Djdn>Mb~Qh(c)>Muz&-zRP+Dd9BM zXZMW)BANtPIwjF;T4GsJE7ngCLW#aS0CEOIs+f~vIU}v95}|Y%>t99b4cXhhDbMzA z%KrWp+1tM?yL)T0^W>`R0OY~LHGo`_Pp({)c%g#v@)Va@QaoWslFzEnQPIavwi;gh8L zGLk9wOTJi?e1BRRwXEFUIAwtB@2<zb^Yv39)?ykL>c@lShyrxd-_- z;L1d60dMCd6wLtyj?#lzrmE1i>H`Q$qP%vRU9{6GogNjhv@@CMR8R`U1CSI7#Zfwn zn`4BQDy;yF)d{6cU!UZWEMChM%aSXUC0{N}q0}#fm8`5R49jDzytjK55ZCa;HGr(k z^SyP>*N}BW?7BRKBhPlO$}abAJ-jNL_t)j})r+DL;U;pFDr8N7XnSiWE7}HYXla_& z@OdxF5nrzy@%ECn)EkzOws^kqHcptt@JKvG!3S~E{e6;rBX#o z168Tks!|`$$;QTU*;Q{C5P0M121kU?FPw)d;6TM-8dr|)(Ddo9kQiX+&+d6N_I`RO7IS*GwlFT z543ww9uKqw;z%zcrXKMGUbkgR1DokWLDGaz4lm^T;DZ7w5>DlkWDD?NpokZWGEgZ> ztu`P-!&Mm`?vq=$PQU>|=Q)Z#zb?<7;Q>6Npq@RwVZv)4c>-^CIX;H)k2Edo-ePwA zb8_?EIXQZ4fjuQ@Hb+0Tmu4-U()2RO==KItmN63JCMA1E58mkV%17NEfB;NE^;ny2 z#Y%moP#%;lv6}5G0EBQVlq6RwN)9gM2jIhCMaq?`3{>kfR3DONb5NER8}efRs(cEF zXU{j}`OE8g1g~(uPiXD#-IndgcV&BLgAEZ6Xt@Fi&0f2YNz)Mi;RC{pz30l!H4Ira zRdkT{n9->TF%Kc8`$)Ujg$H;BqIYzA0RlffJ$Q!C5TDQ*X{!#_4;Ke&gwKEhlY<9& z1EL`L%77HARVmd5Ww4=AmpXmLG^NPhjgwgas(kk1y1aUMM_#-l<-WWHs5|m_@2+e< zxG8gI7G->XLe8!(V|`Na&P7r*=@?*75Cx;fbg`q|NVTH*| zA(Ul5!2{iRprZ$G80nQRJk;f}4!2bXOCR)?3*Y7-bEZT%k&W_5-#|h7ssmCQtjpl= zsMJPAWN36)Mkj`4d9fxh_pSh9Lq7j>LtehRE6-otk^L9N1{;nt+oCYw?n zX-JW99G|VrHPZB>?entpfUsio)N*DUkKDg^Q8sQ}X6-6G$(oUp59z@pT@1!MdLcYq z>0~qPgd+;*k9g%sH=w$G-{PeYOetR|58N$ODtG{Iz=J}y$l@g_4pr&58vp^sSW|{4 z8ZtXulg+!Q3g%R1faT1=a%KFAd zsf>+ECk12|9??Cd6P_G_C+%=Tr3*mqWU!As-hZB=7$8H{L$%@B7j+12gpjB=Yton` z-A*-Sc5YNITwH|EoAUViwp`v=l@sR{G0m$;aOwUit_{;=6 z86`Bw;7X0`2aqxxEKwyCij+fC6qG{2SdeQeIYX9PySgf;&z}=Njb1lo*WFyn{zpQ} z00D$%st%9!1wj7w=(I83`2EPt=-ZL$F=;^T#yI=NWCKNpWoD*HFTN%lw=c=D)AOXu zIXQK1g-PNuS^juY&Yb_)$g$Il(mFmTv&$`+oST4GV}$33R7L=z93d0-k=nBqo~cZp zsR~s#m3D|;D4GaMv5=Efr&eUR**qAOQ)_8;+i7-nHbdPzdV1fom;CEV<9p(d%}$Io zXD7)zO**+@+)Pb1S(l|#3s~wTT$qx@Q}c5C3&4heNqGuRlWA8`-L z6AuIjfP&Ckiz4yg&wdq5b8`I9=*;Bjjn=p{X2-}pWf__tB&Cj_)ReRqr)6$ohGOri zEU}55I=d`q&YhAK!eZ&f3_O~Z6Q>Bbm3cfeDPugRjz?kf872Ek|GJG5Vo5*Y}j#A@*2-Z#e$AH&*Y#OwW)1 zW@cgX>lxyF8U-f^wQ&eM!TDrs#K;)lI=VP3M@hSLfSOqZ9QRBCesoH+)d+i1Q;L;A zDGpG}^^tbdIf=rJ2;7Lg8~o|4*9^u@&#v!c^rfkW79r-dzvlB#dx!WQ%+ZDEU(GMg z?zZNpP#o_7qS+cVVKc?~G}dp;P0I|tnSu`^8irGdNxcf9CRO&OQnhCKjuf3{g3vN^ zU_26L(x~$+ouF9o#JpRiG|}0W_97n3-Sv3w|Lm>qdoYW~=6-Q}WwAcLIPHhEWoC~(;*D;2Q+Q>93U_o0PcYtT zP*@J(g+_CTYPmry+)BaC>4s$Vyz~HiuO5p0g`L` zoWc`nMouX+k!JwT7*-`1cA0Gj-|#|omsbh@_y3FXT|l!-v%jTHU6`Jk`s)njZo-W! zoEU%;+Eo@Hx7Jk|N|F@)e}WlV3eTi6jGXXF44y=islP@Nk%eeH{Qv*oLEi;*e0l!R z?EDPrdMZs_w%QzPz8)GG`b&eZa)91ufEugBF<&nHC0*!$%^YAgO%6_GQXfW>i66GP eeRt9CeEx4{%zs!>FA2&30000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000yXNklUa3(WV0{Yp8I;r@dimJvzu}8eq%(O*@q8-da!=WDC20|9z;TQM zESB~@i>BPjbENd!zLF{A-|+I;&%Hc}X9{9xb0n4#8~Ioyog(>!ekN&?IOmhk1wa+V z%H=uF@jX`@zUy$$hQYMu!ICF21IU2-JesuL_-)z!il^Od?nVCa)iheSb0kg@Hi@M< z>WI6rp$TfzDPt@Sex!DpR_~Rt( zFv_k002q>X@Q6c#sXTtkGy2(#k&FVhjGSNt7Bmby%A|f*&yBZumfuuRDpA|<0HamT zlepzbJeihgBKcJ;m6&}lFjg_|bBo0vJ!IjKOgh7eF>(q>nX!?Snw`ppWOVeoW@Lx_ z7;TG0ty~!lL=TI;-Y>Gk3aV4&-q|yLN{TPiV zeZL7zrq+1PE|q_9iv{rts_ltc705(ZjAWKSNND0(S}mfGl{{HUULC6-W_W8wk21oa$WsE z^6EF20f2#&RxOp73v)L2FuKLLUbkQ=Wz%c4qNN=P!%QS;eH~3XFa1+6g>wB!BREa$Ug>)Rk&1V2!kXpr-qmQr3!;=r?!SOY@e|#Y2X2X16 z%di5`?w@clGYP7(6<`c0#bGMWy{PsU(=d@2pA#vb1BA{7qVW`wF8y6Fp}nbM5>*@zop7(5CKajvCo1!74esUQFYCba#BuO}#C238brU)n# z3Rc1B^E?v)P%xhUE*P`^Z2V%iS})aVqCg5&fKXvFu#qu-shP;~*(;SXxB{$ERsoo& z5+S_|-P_6W{8`y;);&2sx*?~4c=T{zZXewjw~9xU4U8PoMh62XQ2<0VX%lqx1m_xz zdX$JEJ-r`IbB_q~ITWLU#VrZN(-MfL>p!zntT+Btgn9*$D_3BJk*|<)Ol1GAX-l2=wF!# z10YKB(YPn!82ZNp5sV!{KC#pUNQh^G8h{DHhyuYQ5{#z*WPlXvjaLed#!m`F4Oy%< z0aTSj117kZtJV#mT#cj^AQH;~ssKAVK6_L)7r)r*BP|9Lip6G59s=a}bXSgu{d)&S zqFPqX2$PKJUDqT=T80VqpFlDR03;`6HWJ4V01P3c0LK6T0)Wz^dL$IJl#!qOQR|hd zV!iE@8g1%)3joSWLyEPk6kAm(HJVbYG^Ap#0SK0IfXw0_1yL}P!!xkx07xf@+J9QD zEYbo973=uqhU`7KBWa#9C6{UxfrXeRZ~Sp4C!>2?!U{x#5myjlSPDjM{J@cOjd@rL z05X8Y0@0NC>5x-}M(aws)sYgBZ%kMz!$zr9lUjR0YPFWs0D_IARD}txY&5rQ9k$AK z6OL9m3W5U&8)>x{3ILgu-s49f%HF-(;xGuNS0Je<(ozs%N^qEC1Q1aS9*WcKVw2=2 zK2WLYIit@}SqM(5mH1<@!Sez2NhEn?s@`3A+FWRnIHOLKTP>+_)bnb)BUR+pAn7L8 z^Pd`aq5-!M6cotF&l_%19VSLaKYr99BcC zq|Pc)IL@^g&%^;1Qp-Q4otaPu8~)sJ~HT*<&)$0saPMFKJwAML#kZO z%yiWgVe}uyBVo#|CZ#1;OKK1hK@wFd1pp9;O|Ibs04Q6N2*QXy=Z`uv&-Z=t^p{i3 z-hu!|T8mw2_IlFkaa2ildQv0t`a%~bI7fQTwgQ4FLglAm%1AMbN8IwHVHS|qQa3M8 zjsQX*dGv6X`PL!52u7IgYDbSydJPCdHLnsfqs^$RkySQ9e4<|Ps}EF827m&b_(%Z- zBFak2_+&}}w3d3(9`pdxl}1;A4WzE17D*nEH3i4@PM7nArZfm;P<>RUAmmLYgAwLv zg>qh&yIDD_h<4Tkgriuqz8o3$n1dAZ-#~=ntd=u#?0Iec)J63vpAjvix5qDI#e9MUp+ zR;kp;;RL0O?-ZD8-Nfws^5EeuIiRyU z%mk9GH{z+hnUZJ|)C$D*kCDnG`H7K3Bp22Q103ipNjzsV8L+e%c<__($nthq72ptGF%_Z5(zIG0Lv!UHdbVL zydN4!vh%ElfC-~VlkCTvVJi} zKbv2LU?PmPLIy}u{E3Mt!T^a-k;0lhAc7=IuK-9AIdSCkJODKU3M4}L9jvcj>62uS z=&lZAWn(Do8%wgavnHE6V;K|cJFBv?y)Hd~bVmvpP%F#Q=`SL)fmG>3>XkfYy2N~K zsZVD=zQuZEPae?_KRWt|HG7@SyQ0KsiUtg8ji8ock`IxL%1N7>0%HEeC=)vJnmk~1 z?*$5$*h*m5$vyL#yX@WjXK8u7@N_uZjr3J{jSOReB6^?)ds57;?wej!c^P42Q zE~_NE4v6uEP1)SuluLiS%m%`?Y+o324wwsTY$U82prbJ|8!b~Hda|_Cm4lCV<&Rgd zN|*EDazh?7^ZkT4IX%E9hf-i7S*6NtUEGm(uH9fISY%eKMn_5{Yo_GH9KO&>q{;fY z?o%JAxx;GgvoI`iJq$bH^iT7l-~GeCt)Jic@6Gc&vIa8>WCI}E?0j6jv;&xn za{lcdIe(dJm$zi|;H7!Ft_CN@d4d^ zPY&-~r^DZtTX*)Ugezz34LbL;UchLpq;%xXv;zsLnYF~u;TIo3w0HQ=81eBvb1#&d zOyl+6`sI!K3Q}6$oJecq;)ZM!I~O(pa6z_UWqc87ZNtXJEm;HX@)kZ(Fe@vt(v{Ju zB_~v<$ESyK^5nKW`LBKX9mwhFz8u}B!+(5RKG?fqUOkwyOD7M;vLuMC810}Y z$|(DYIap9h`IQaK@1qo(%7x@+xjzH2=}?MD{CQzDzI^_r(a!pJ!|f4_tjQ{XHUP1~ zp45(EV;jF*!0?z}?<2JVhVQKm=`YGiPwJhzyz}muYIRGVJiZNxTk^@1eK{o_!psB8 z@kbvYn7*VSbnz52^C_k!jJS~#n)gTI0Em+)1`koOg4)ID70L*q5}OSri8Nt-$MKhY zT+3T)!_gLOVD2$7+FTQuk_{xa^EN&?za?Wlw0eo2cwkG~zG|23-8+Rg@2T9Flsz{>d*fGx?2 zRyOS?<4I5HBdZ>bwA$-PLFZqclDz$PA6DL%6V@Upx@JGU$yEM^9NybCQy<-+*4b}_ zQRyJVB2U~NIDChBSX9MxS-40SPgSAm(S`})9&Qt&cP+-TGuc-OI_9^ z_a0uCYq#E`vrjhNqGn#jY}QOUCM8w%Z<-ze0>pe!ftaq%ITea?m6`&a4MzYI`}-So z&y2r3Uj0;)?IRls9LijTV{fm z%&3_$x&oUGVs63*AYUN%^;{tS&o{9Z471(W+DrW(8cf-BrrTnM+hEO7M@E%}j+6nR zE655=R9Zcjx4H?Tn|ACC>uyRR%StjQ2Y0T@?!kvrT3nPM8xH}CQVSbCX1Lk|Xk?~0 z%)rP@NVTsG(Uxg{N@fC7CjiaD*o>)C8u1@|q3ExBt?*1@-9gva8Z7)+?XYHNDO@wl z;Wkq0vH76eM9g$qhvZ94-}9{5*$y=?c-Z^ZcZ(_Bt6#jdBJW)JgISvg*#??RWB@^P zGra%?NS@^A1%Mz?HS=_Uip0pz!N4>UQxMu$W)XTq`H_M+z*m{PkwTj{jEsHGiKxm)=J3Xh9}utusIO*%vFCgB_6$s=+kLg%S@@#JmQWrR@+DS; zB&VSOQtbKadqUkEF?+b?H9>Z=@kY}N#*vQ(bE;Y7Gy@wmT6werspkD8Zdi!|CW1dW zV(1yzm<<3rkov;skN@9ZhCTz6uQy-J)a!?iZpamzXYWjufg&Y!@_x~5K?*^E}Mx z+S<%g%?=3tLi>VYf>EY(&mtr34>R~-dOl3VyULbHpq&S)B{bnsTZ$S{feGIj1AewBs#IJ&iXsW`c?DX9DrN#G5nz z=>PA3s`+b%VoB%4Xxw?7wZvd9Vee9%p0W%0jrIf|jm^xF0xF}#H|Ijhr~eU%?!Fa> k4bBCVub&I1eisk?4}I{hl3HYrZ~y=R07*qoM6N<$f=Z|2g#Z8m literal 0 HcmV?d00001 diff --git a/VKT5_RemoteConsole/Resources/enter.png b/VKT5_RemoteConsole/Resources/enter.png new file mode 100644 index 0000000000000000000000000000000000000000..9531f912851402df4925dd58f014f90eeeea0ebb GIT binary patch literal 5032 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 literal 0 HcmV?d00001 diff --git a/VKT5_RemoteConsole/Resources/left.png b/VKT5_RemoteConsole/Resources/left.png new file mode 100644 index 0000000000000000000000000000000000000000..ff63819ce38dc61c0a9304228474550b0c425d7f GIT binary patch literal 5614 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 V<;DA3>lgq4002ovPDHLkV1huw02crN literal 0 HcmV?d00001 diff --git a/VKT5_RemoteConsole/Resources/tab.png b/VKT5_RemoteConsole/Resources/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7e23ccf5a0b6063e03284db10037413cbc6e9a GIT binary patch literal 5297 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 literal 0 HcmV?d00001 diff --git a/VKT5_RemoteConsole/Resources/vkt5_icon1.png b/VKT5_RemoteConsole/Resources/vkt5_icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c37715dd62b14331ec62b18317b259bcb24a36e GIT binary patch literal 705 zcmV;y0zUnTP)N2bPDNB8b~7$DE-^4L z^m3s900I$7L_t(2Q+1HpZV~|)M(0(05SPRYb}pQXp~#yc-g{+ll+-~S28Z2YHg)@gNQ+Gc~6Swm|}XsrsG zUZMGqDtfz)Vdr`So#BZ=RX+MHsCMvtW>6eF<#6(l^2Gy6lY5BPefvJ7c=m|g=rMIO z!gSJRcHZRj)0pe43kG8YK~jpedNoSZy9nI*FOuoz;#6gRrm&dkd|V9Z^fiR0S>?m! z3Fc`IZL~}4B!=7z)940}3_oRUi;C_?lJ`&)(WXeZ+rY9qbb7Wx?=|>*W05YT2)^DX zCnoXwH}Quy+1~Nv+48Ux39#&Z$=b#Su1zn)vCg~2n3f?UwEHrbUnZ36MdIlM`BI8- zB!qX%O~@8F*H>(jj~9+59Iu?LxjhVqP3CWhs9Fud7^+--pHWfDMD}8ot9gPuA;NEh zwkXKzhKp!C%*y&IF0UJ3D9B)>Go25Sn^lDFSmWl$f?}g{#}Y!{GH$*7uRgqjK%0VtpDxb7lMahaO zqKOE*`!O!}id<$tllb)q3#6ODHxFHS00000NkvXXu0mjfQlB(+ literal 0 HcmV?d00001 diff --git a/VKT5_RemoteConsole/Vkt5Console.cs b/VKT5_RemoteConsole/Vkt5Console.cs new file mode 100644 index 0000000..3f1e71b --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5Console.cs @@ -0,0 +1,333 @@ +using System; +using Lers; +using Lers.Poll; +using System.Collections.Generic; + + +namespace Vkt5_RemoteConsole +{ + delegate void VktDataReadEventHandler(byte[] dataByte); + + enum Vkt5Key: byte + { + Right = 0, + Left = 1, + Down = 2, + Up = 3, + Tab = 4, + Enter = 5, + Back = 6, + Menu = 7, + LongMenuPress = 9 + } + + + /// + /// Класс для отправки запросов и считывания ответов от ECL 300 + /// ВНИМАНИЕ! После считывания ответа перед повторным запросом к прибору нужно выждать 400мс + /// + class Vkt5Console + { + #region События и методы для протоколирования + + /// + /// Вызвается при ошибке выполнения запроса + /// + public event EventHandler RequestError; + + private void CallRequestError() + { + if (this.RequestError != null) + this.RequestError(this, EventArgs.Empty); + } + + /// + /// Событие поднимается когда необходимо запротоколировать ошибку чтения данных + /// + public event WriteLogEventHandler WriteLog; + + private void LogMessage(string msg) + { + if (this.WriteLog != null) + { + this.WriteLog(Importance.Info, msg); + } + } + + private void LogWarning(string msg) + { + if (this.WriteLog != null) + { + this.WriteLog(Importance.Warn, msg); + } + } + + private void LogError(string msg) + { + if (this.WriteLog != null) + { + this.WriteLog(Importance.Error, msg); + } + } + + #endregion + + /// + /// Сетевой адрес прибора + /// + public int NetworkAddress + { + get; + set; + } + + /// + /// Конструктор + /// + /// + public Vkt5Console(RemoteConsole remoteConsole) + { + this.NetworkAddress = 0; + + this.remoteConsole = remoteConsole; + this.remoteConsole.DeviceDataReceived += new EventHandler(remoteConsole_DeviceDataReceived); + } + + /// + /// Сброс состояния объекта в исходную позицию + /// + public void Reset() + { + this.handlers.Clear(); + } + + /// + /// Отправляет команду на чтение буфера экрана устройства + /// + /// + public void ReadScreenBuffer(VktDataReadEventHandler readHandler) + { + byte[] rq = PackRequest(new byte[] { 0x03, 0x0C, 0x00, 0x00, 0x00 }); + SendRequest(rq, 38, readHandler); + } + + + /// + /// Отправляет в устройство команду нажатия клавишы + /// + /// + /// + public void SendKeyCode(Vkt5Key key, VktDataReadEventHandler readHandler) + { + byte[] rq = PackRequest(new byte[] { 0x10, 0x0D, 0x00, 0x00, 0x01, 0x01, (byte)key }); + SendRequest(rq, 8, readHandler); + } + + /// + /// Формирует пакет с запросом прибору + /// + /// + /// + private byte[] PackRequest(byte[] rqData) + { + List request = new List(); + + // Сетевой адрес + request.Add((byte)this.NetworkAddress); + + // Пакет с запросом + request.AddRange(rqData); + + ushort crc = ModBusCrc.Calc(request); + + request.Add((byte)(crc & 0x00FF)); + request.Add((byte)((crc & 0xFF00) >> 8)); + + + return request.ToArray(); + } + + + /// + /// Отправка запроса прибору + /// + /// + /// + /// + private void SendRequest(byte[] request, int responseLength, VktDataReadEventHandler readHandler) + { + CommandSettings cmd = new CommandSettings("", 1000, responseLength, 10); + + this.handlers.AddLast(readHandler); + + this.responseLength = responseLength; + + this.remoteConsole.SendCommandAsync(request, cmd, 0, DataReadCallback, null); + } + + private void DataReadCallback(Lers.AsyncOperation asyncOp) + { + try + { + // Завершаем операцию чтения данных + Lers.Networking.ExecuteRequestAsyncOperation execRequestAsyncOp + = (Lers.Networking.ExecuteRequestAsyncOperation)asyncOp; + + execRequestAsyncOp.EndExecuteRequest(); + } + catch (Exception e) + { + // При ошибке отправки данных отключаемся от устройства + LogError("Ошибка чтения данных. " + e.Message); + } + } + + private void remoteConsole_DeviceDataReceived(object sender, DeviceDataEventArgs args) + { + // Проверим, что консоль подключена к прибору + if (!this.remoteConsole.IsConnected) + { + return; + } + + // Получаем обработчик запроса + VktDataReadEventHandler currentHandler = this.handlers.First.Value; + this.handlers.RemoveFirst(); + + // Проверим длину считанного пакета + if (args.Response.Length < 5) + { + // Повторяем запрос + LogError("Неверная длина ответа прибора. Ожидалось не менее 5 байт, получено " + args.Response.Length); + + CallRequestError(); + + // Отключаемся + try + { + this.remoteConsole.DisconnectAsync(null, null); + } + catch (Lers.PermissionDeniedException exc) + { + LogError("Ошибка отключения удалённого пульта. " + exc.Message); + } + + return; + } + + // Проверим контрольную сумму + ushort calcCs = ModBusCrc.Calc(args.Response, 0, args.Response.Length - 2); + ushort recvCrc = BitConverter.ToUInt16(args.Response, args.Response.Length - 2); + + if (calcCs != recvCrc) + { + LogWarning("Не сходится контрольная сумма ответа"); + + // Повторяем запрос + SendRequest(args.Request, this.responseLength, currentHandler); + + return; + } + + // Проверим сетевой адрес + if (args.Response[0] != (byte)this.NetworkAddress) + { + LogWarning("В ответе указан неверный контрольный адрес"); + + // Повторяем запрос + SendRequest(args.Request, this.responseLength, currentHandler); + + return; + } + + // Возвращаем считанные прибором данные + if (currentHandler != null) + { + byte[] rspData = new byte[args.Response.Length - 5]; + Array.Copy(args.Response, 3, rspData, 0, rspData.Length); + currentHandler(rspData); + } + } + + + /// + /// Объект для отправки запросов и считывания ответов от удалённого прибора + /// + private RemoteConsole remoteConsole = null; + + /// + /// Длина ответа на запрос + /// + private int responseLength = 0; + + /// + /// Список обработчиков ответов + /// + LinkedList handlers = new LinkedList(); + } + + class ModBusCrc + { + /// + /// Вычисляет контрольную сумму для переданного блока данных, согласно + /// спецификации протокола ModBus (Modicon Modbus Protocol Reference Guide) + /// + /// Для расчета контрольной суммы используется модифицированный CRC-16-IBM с полиномом 0xA001. + /// В отличие от стандартного алгоритма CRC-16-IBM, начальное значение устанавливается равным 0xFFFF + /// + /// Массив байт, по которому нужно посчитать CRC + /// Начальный индекс в массиве байт + /// Количество байт, начиная со start, используемых в расчете контрольной суммы + /// Значение контрольной суммы + public static ushort Calc(IList input, int start, int length) + { + int i, j; + + if (length > input.Count) + throw new Exception(String.Format("При расчете контрольной суммы по блоку данных длиной {0} байт, указана длина {1} байт", input.Count, length)); + + // Для хранения CRC используем тип int, чтобы не заниматься приведением типов + // постоянно, а сделать это только при выходе + // При расчете CRC значение никогда не выйдет за границы 2-х младших байт (сдвигаем всегда вправо) + // поэтому при операциях сдвига, сдвиг знакового бита переменной crc не обрабатываем + int crc = 0xFFFF; + + // обнуляем 2 старших байта + for (i = start; i < start + length; i++) + { + crc = (ushort)crc & 0xFF00 + (ushort)(crc & 0x00FF) ^ input[i]; + + for (j = 0; j < 8; j++) + { + if ((crc & 0x01) > 0) + { + // Сдвигаем вправо на 1 бит и XOR-им полиномом 0xA001 + crc = (crc >> 1) ^ 0xA001; + } + else + { + // Сдвигаем вправо на 1 бит + crc = (crc >> 1); + } + } + } + + // Возвращаем 2 младших байта + return (ushort)crc; + } + + /// + /// Вычисляет контрольную сумму для переданного блока данных, согласно + /// спецификации протокола ModBus (Modicon Modbus Protocol Reference Guide) + /// + /// Для расчета контрольной суммы используется модифицированный CRC-16-IBM с полиномом 0xA001. + /// В отличие от стандартного алгоритма CRC-16-IBM, начальное значение устанавливается равным 0xFFFF + /// + /// Массив байт, по которому нужно посчитать CRC + /// Значение контрольной суммы + public static ushort Calc(IList input) + { + return ModBusCrc.Calc(input, 0, input.Count); + } + } +} \ No newline at end of file diff --git a/VKT5_RemoteConsole/Vkt5ConsoleControl.Designer.cs b/VKT5_RemoteConsole/Vkt5ConsoleControl.Designer.cs new file mode 100644 index 0000000..0e3548e --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5ConsoleControl.Designer.cs @@ -0,0 +1,222 @@ +namespace Vkt5_RemoteConsole +{ + partial class Vkt5ConsoleControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Vkt5ConsoleControl)); + this.panel1 = new System.Windows.Forms.Panel(); + this.txtLine2 = new System.Windows.Forms.Label(); + this.txtLine1 = new System.Windows.Forms.Label(); + this.btnMenu = new System.Windows.Forms.Button(); + this.btnBack = new System.Windows.Forms.Button(); + this.btnTab = new System.Windows.Forms.Button(); + this.btnLeft = new System.Windows.Forms.Button(); + this.btnEnter = new System.Windows.Forms.Button(); + this.btnDown = new System.Windows.Forms.Button(); + this.btnUp = new System.Windows.Forms.Button(); + this.btnRight = new System.Windows.Forms.Button(); + this.refreshTimer = new System.Windows.Forms.Timer(); + this.cursorTimer = new System.Windows.Forms.Timer(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(180)))), ((int)(((byte)(40))))); + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.txtLine2); + this.panel1.Controls.Add(this.txtLine1); + this.panel1.Location = new System.Drawing.Point(12, 14); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(318, 67); + this.panel1.TabIndex = 20; + // + // txtLine2 + // + this.txtLine2.Font = new System.Drawing.Font("Lucida Console", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.txtLine2.ForeColor = System.Drawing.Color.DimGray; + this.txtLine2.Location = new System.Drawing.Point(3, 35); + this.txtLine2.Name = "txtLine2"; + this.txtLine2.Size = new System.Drawing.Size(310, 29); + this.txtLine2.TabIndex = 1; + this.txtLine2.Text = "подключения"; + // + // txtLine1 + // + this.txtLine1.Font = new System.Drawing.Font("Lucida Console", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.txtLine1.ForeColor = System.Drawing.Color.DimGray; + this.txtLine1.Location = new System.Drawing.Point(3, 3); + this.txtLine1.Name = "txtLine1"; + this.txtLine1.Size = new System.Drawing.Size(310, 29); + this.txtLine1.TabIndex = 0; + this.txtLine1.Text = "Нет"; + // + // btnMenu + // + this.btnMenu.BackColor = System.Drawing.Color.Gray; + this.btnMenu.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnMenu.Image = ((System.Drawing.Image)(resources.GetObject("btnMenu.Image"))); + this.btnMenu.Location = new System.Drawing.Point(222, 102); + this.btnMenu.Name = "btnMenu"; + this.btnMenu.Size = new System.Drawing.Size(108, 64); + this.btnMenu.TabIndex = 18; + this.btnMenu.UseVisualStyleBackColor = false; + this.btnMenu.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnMenu_MouseDown); + this.btnMenu.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnMenu_MouseUp); + // + // btnBack + // + this.btnBack.BackColor = System.Drawing.Color.Gray; + this.btnBack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnBack.Image = ((System.Drawing.Image)(resources.GetObject("btnBack.Image"))); + this.btnBack.Location = new System.Drawing.Point(12, 102); + this.btnBack.Name = "btnBack"; + this.btnBack.Size = new System.Drawing.Size(64, 64); + this.btnBack.TabIndex = 12; + this.btnBack.UseVisualStyleBackColor = false; + this.btnBack.Click += new System.EventHandler(this.btnBack_Click); + // + // btnTab + // + this.btnTab.BackColor = System.Drawing.Color.Gray; + this.btnTab.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnTab.Image = ((System.Drawing.Image)(resources.GetObject("btnTab.Image"))); + this.btnTab.Location = new System.Drawing.Point(222, 172); + this.btnTab.Name = "btnTab"; + this.btnTab.Size = new System.Drawing.Size(108, 64); + this.btnTab.TabIndex = 19; + this.btnTab.UseVisualStyleBackColor = false; + this.btnTab.Click += new System.EventHandler(this.btnTab_Click); + // + // btnLeft + // + this.btnLeft.BackColor = System.Drawing.Color.Gray; + this.btnLeft.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnLeft.Image = ((System.Drawing.Image)(resources.GetObject("btnLeft.Image"))); + this.btnLeft.Location = new System.Drawing.Point(12, 172); + this.btnLeft.Name = "btnLeft"; + this.btnLeft.Size = new System.Drawing.Size(64, 64); + this.btnLeft.TabIndex = 15; + this.btnLeft.UseVisualStyleBackColor = false; + this.btnLeft.Click += new System.EventHandler(this.btnLeft_Click); + // + // btnEnter + // + this.btnEnter.BackColor = System.Drawing.Color.Gray; + this.btnEnter.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnter.Image = ((System.Drawing.Image)(resources.GetObject("btnEnter.Image"))); + this.btnEnter.Location = new System.Drawing.Point(152, 102); + this.btnEnter.Name = "btnEnter"; + this.btnEnter.Size = new System.Drawing.Size(64, 64); + this.btnEnter.TabIndex = 14; + this.btnEnter.UseVisualStyleBackColor = false; + this.btnEnter.Click += new System.EventHandler(this.btnEnter_Click); + // + // btnDown + // + this.btnDown.BackColor = System.Drawing.Color.Gray; + this.btnDown.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDown.Image = ((System.Drawing.Image)(resources.GetObject("btnDown.Image"))); + this.btnDown.Location = new System.Drawing.Point(82, 172); + this.btnDown.Name = "btnDown"; + this.btnDown.Size = new System.Drawing.Size(64, 64); + this.btnDown.TabIndex = 16; + this.btnDown.UseVisualStyleBackColor = false; + this.btnDown.Click += new System.EventHandler(this.btnDown_Click); + // + // btnUp + // + this.btnUp.BackColor = System.Drawing.Color.Gray; + this.btnUp.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUp.Image = ((System.Drawing.Image)(resources.GetObject("btnUp.Image"))); + this.btnUp.Location = new System.Drawing.Point(82, 102); + this.btnUp.Name = "btnUp"; + this.btnUp.Size = new System.Drawing.Size(64, 64); + this.btnUp.TabIndex = 13; + this.btnUp.UseVisualStyleBackColor = false; + this.btnUp.Click += new System.EventHandler(this.btnUp_Click); + // + // btnRight + // + this.btnRight.BackColor = System.Drawing.Color.Gray; + this.btnRight.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRight.Image = ((System.Drawing.Image)(resources.GetObject("btnRight.Image"))); + this.btnRight.Location = new System.Drawing.Point(152, 172); + this.btnRight.Name = "btnRight"; + this.btnRight.Size = new System.Drawing.Size(64, 64); + this.btnRight.TabIndex = 17; + this.btnRight.UseVisualStyleBackColor = false; + this.btnRight.Click += new System.EventHandler(this.btnRight_Click); + // + // refreshTimer + // + this.refreshTimer.Interval = 1000; + this.refreshTimer.Tick += new System.EventHandler(this.refreshTimer_Tick); + // + // cursorTimer + // + this.cursorTimer.Interval = 500; + this.cursorTimer.Tick += new System.EventHandler(this.cursorTimer_Tick); + // + // Vkt5ConsoleControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Controls.Add(this.btnMenu); + this.Controls.Add(this.btnBack); + this.Controls.Add(this.btnTab); + this.Controls.Add(this.btnLeft); + this.Controls.Add(this.btnEnter); + this.Controls.Add(this.btnDown); + this.Controls.Add(this.btnUp); + this.Controls.Add(this.btnRight); + this.Name = "Vkt5ConsoleControl"; + this.Size = new System.Drawing.Size(348, 257); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label txtLine2; + private System.Windows.Forms.Label txtLine1; + private System.Windows.Forms.Button btnMenu; + private System.Windows.Forms.Button btnBack; + private System.Windows.Forms.Button btnTab; + private System.Windows.Forms.Button btnLeft; + private System.Windows.Forms.Button btnEnter; + private System.Windows.Forms.Button btnDown; + private System.Windows.Forms.Button btnUp; + private System.Windows.Forms.Button btnRight; + private System.Windows.Forms.Timer refreshTimer; + private System.Windows.Forms.Timer cursorTimer; + } +} diff --git a/VKT5_RemoteConsole/Vkt5ConsoleControl.cs b/VKT5_RemoteConsole/Vkt5ConsoleControl.cs new file mode 100644 index 0000000..efbaad5 --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5ConsoleControl.cs @@ -0,0 +1,382 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Drawing.Text; +using System.Runtime.InteropServices; +using Lers; +using Lers.Poll; + +namespace Vkt5_RemoteConsole +{ + /// + /// Делегат для события . + /// + public delegate void WriteLogEventHandler(Importance importance, string message); + + + /// + /// Контрол удалённого пульта ВКТ-5 + /// + public partial class Vkt5ConsoleControl : UserControl + { + /// + /// Состояния контрола + /// + private enum State + { + /// Начальное состояния + None, + + /// Отключены от прибора + Disconnected, + + /// Режим ожидания команд + Ready, + + /// Чтение буфера экрана + ReadingScreenBuffer, + + /// Отправка кода клавиши + SendingKeyCode, + + /// Ожидание обновления буфера экрана + WaitingScreenBuffer + } + + + #region События и методы для протоколирования + + public event WriteLogEventHandler WriteLog; + + private void LogMessage(string msg) + { + if (this.WriteLog != null) + { + this.WriteLog(Importance.Info, msg); + } + } + + private void LogWarning(string msg) + { + if (this.WriteLog != null) + { + this.WriteLog(Importance.Warn, msg); + } + } + + private void LogError(string msg) + { + if (this.WriteLog != null) + { + this.WriteLog(Importance.Error, msg); + } + } + + #endregion + + + /// + /// Конструктор + /// + public Vkt5ConsoleControl() + { + InitializeComponent(); + + SetState(State.Disconnected); + } + + /// + /// Инициализация контрола + /// + /// + /// + public void Initialize(RemoteConsole remoteConsole, int networkAddress) + { + this.vktConsole = new Vkt5Console(remoteConsole); + this.vktConsole.WriteLog += this.WriteLog; + this.vktConsole.RequestError += new EventHandler(vktConsole_RequestError); + this.vktConsole.NetworkAddress = networkAddress; + } + + /// + /// Изменилось состояние подключения к удалённому устройству + /// + /// + public void ConnectionChanged(bool connected) + { + if (connected) + { + SetState(State.WaitingScreenBuffer); + + this.vktConsole.Reset(); + + ReadScreenBuffer(); + } + else + { + SetState(State.Disconnected); + } + } + + + #region Обработчики событий контролов + + private void cursorTimer_Tick(object sender, EventArgs e) + { + this.displayCursor = !this.displayCursor; + + RefreshCursor(); + } + + /// + /// Таймер обновления содержимого экрана + /// + /// + /// + private void refreshTimer_Tick(object sender, EventArgs e) + { + ReadScreenBuffer(); + } + + void vktConsole_RequestError(object sender, EventArgs e) + { + // Отменяем чтение + SetState(State.Ready); + } + + private void btnUp_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Up); + } + + private void btnDown_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Down); + } + + private void btnTab_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Tab); + } + + private void btnBack_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Back); + } + + private void btnRight_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Right); + } + + private void btnLeft_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Left); + } + + private void btnEnter_Click(object sender, EventArgs e) + { + SendKeyCode(Vkt5Key.Enter); + } + + private void btnMenu_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) + { + if (!this.btnMenu.Enabled) + { + return; + } + + this.isMenuBtnDown = true; + this.menuBtnPressTime = DateTime.Now; + } + + private void btnMenu_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) + { + if (!this.btnMenu.Enabled) + { + return; + } + + if (this.isMenuBtnDown) + { + this.isMenuBtnDown = false; + DateTime now = DateTime.Now; + + int totalMs = (int)(now - this.menuBtnPressTime).TotalMilliseconds; + + if (totalMs >= 3000) + { + SendKeyCode(Vkt5Key.LongMenuPress); + } + else + { + SendKeyCode(Vkt5Key.Menu); + } + } + } + + #endregion + + + private void ReadScreenBuffer() + { + if (this.state == State.Ready || this.state == State.WaitingScreenBuffer) + { + SetState(State.ReadingScreenBuffer); + + this.vktConsole.ReadScreenBuffer(this.ReadScreenBufferCallback); + } + } + + + private void ReadScreenBufferCallback(byte[] data) + { + if (this.state != State.SendingKeyCode) + { + // Буфер экрана считан. Выставим состояние "Ready", если он пришёл не во время отправки кода клавиши. + + SetState(State.Ready); + } + + this.displayLine = Encoding.GetEncoding(866).GetString(data, 0, data.Length - 1); + this.cursorPos = data[data.Length - 1]; + + RefreshCursor(); + + if (!this.cursorTimer.Enabled) + { + this.cursorTimer.Start(); + } + + if (!this.refreshTimer.Enabled) + { + this.refreshTimer.Start(); + } + } + + private void SendKeyCode(Vkt5Key keyCode) + { + if (this.state == State.Disconnected || this.state == State.SendingKeyCode) + { + return; + } + + SetState(State.SendingKeyCode); + this.vktConsole.SendKeyCode(keyCode, SendKeyCodeCallback); + } + + private void SendKeyCodeCallback(byte[] data) + { + SetState(State.WaitingScreenBuffer); + + ReadScreenBuffer(); + } + + /// + /// Устанавливает новое состояние контрола + /// + /// + private void SetState(State newState) + { + if (newState == this.state) + { + return; + } + + + switch (newState) + { + case State.Ready: + SetReady(); + break; + + case State.Disconnected: + SetDisconnected(); + break; + + case State.SendingKeyCode: + case State.WaitingScreenBuffer: + EnableButtons(false); + break; + + case State.ReadingScreenBuffer: + break; + } + + + this.state = newState; + } + + private void SetReady() + { + EnableButtons(true); + } + + private void SetDisconnected() + { + this.cursorTimer.Stop(); + this.displayLine = ""; + this.cursorPos = 0; + } + + + + private void RefreshCursor() + { + if (string.IsNullOrEmpty(this.displayLine)) + { + return; + } + + string cursorChar = "\u2588"; + + string showLine = this.displayLine; + + if (this.displayCursor) + { + showLine = showLine.Remove(this.cursorPos, 1); + showLine = showLine.Insert(this.cursorPos, cursorChar); + } + + this.txtLine1.Text = showLine.Substring(0, 16); + this.txtLine2.Text = showLine.Substring(16, 16); + } + + private void EnableButtons(bool enable) + { + this.btnUp.Enabled = enable; + this.btnDown.Enabled = enable; + this.btnLeft.Enabled = enable; + this.btnRight.Enabled = enable; + this.btnEnter.Enabled = enable; + this.btnBack.Enabled = enable; + this.btnMenu.Enabled = enable; + this.btnTab.Enabled = enable; + } + + + + + /// + /// Объект для работы с подключенным ECL 300 + /// + private Vkt5Console vktConsole = null; + + /// + /// Текущее состояние контрола + /// + private State state = State.None; + + private string displayLine = ""; + private int cursorPos = 0; + private bool displayCursor = false; + + private bool isMenuBtnDown = false; + private DateTime menuBtnPressTime = DateTime.MinValue; + } +} diff --git a/VKT5_RemoteConsole/Vkt5ConsoleControl.resx b/VKT5_RemoteConsole/Vkt5ConsoleControl.resx new file mode 100644 index 0000000..0d08dd6 --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5ConsoleControl.resx @@ -0,0 +1,866 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + 3208vUqMAAAAAElFTkSuQmCC + + + + + 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 + 8P9abW3/DWbMf1iOz3IqAAAAAElFTkSuQmCC + + + + + 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 + SUVORK5CYII= + + + + + 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 + SUVORK5CYII= + + + + + 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 + + + + 17, 17 + + + 132, 16 + + \ No newline at end of file diff --git a/VKT5_RemoteConsole/Vkt5RemoteConsoleForm.cs b/VKT5_RemoteConsole/Vkt5RemoteConsoleForm.cs new file mode 100644 index 0000000..3969744 --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5RemoteConsoleForm.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Lers; +using Lers.UI.Tabs; + +namespace Vkt5_RemoteConsole +{ + class Vkt5RemoteConsoleForm: RemoteConsoleForm + { + /// + /// Конструктор + /// + public Vkt5RemoteConsoleForm() + { + this.Load += new EventHandler(Vkt5RemoteConsoleForm_Load); + + // Создаём контрол удалённого пульта и размещаем на пользовательской панели + this.vktConsoleControl = new Vkt5ConsoleControl(); + this.vktConsoleControl.Parent = this.UserArea; + this.vktConsoleControl.Dock = System.Windows.Forms.DockStyle.Fill; + + // Подписываемся на событие протоколирование контрола удалённого пульта. + // Каждый раз когда удалённый пульт будет протоколировать событие, будет вызываться этот метод. + this.vktConsoleControl.WriteLog += new WriteLogEventHandler(vktConsoleControl_WriteLog); + } + + + /// + /// Переопределяем инициализацию окна с удалённым пультом ВКТ-5 + /// + /// + /// + public override void Initialize(RemoteConsoleFormParams parameters, Lers.LersServer server) + { + base.Initialize(parameters, server); + + // Подписка на события подключения и отключения от удалённого устройства + + this.RemoteConsole.Connected += new EventHandler(RemoteConsole_Connected); + this.RemoteConsole.Disconnected += new EventHandler(RemoteConsole_Disconnected); + + int networkAddress = 0; + if (parameters.Device.PollSettings.Network != null) + { + Int32.TryParse(parameters.Device.NetworkAddress, out networkAddress); + } + + // Инициализируем контрол с удалённым пультом + this.vktConsoleControl.Initialize(this.RemoteConsole, networkAddress); + } + + + void vktConsoleControl_WriteLog(Importance importance, string message) + { + this.AddLogRecord(importance, DateTime.Now, message); + } + + void Vkt5RemoteConsoleForm_Load(object sender, EventArgs e) + { + this.vktConsoleControl.Enabled = false; + } + + void RemoteConsole_Connected(object sender, EventArgs e) + { + this.vktConsoleControl.Enabled = true; + this.vktConsoleControl.ConnectionChanged(true); + } + + void RemoteConsole_Disconnected(object sender, EventArgs e) + { + this.vktConsoleControl.Enabled = false; + this.vktConsoleControl.ConnectionChanged(false); + } + + + private Vkt5ConsoleControl vktConsoleControl = null; + } +} diff --git a/VKT5_RemoteConsole/Vkt5_RemoteConsole.csproj b/VKT5_RemoteConsole/Vkt5_RemoteConsole.csproj new file mode 100644 index 0000000..20eb7f3 --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5_RemoteConsole.csproj @@ -0,0 +1,127 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8} + Library + Properties + Vkt5_RemoteConsole + Vkt5_RemoteConsole + v4.0 + 512 + + + true + full + false + C:\Program Files\LERS\Common\Plugins\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + False + + + False + + + False + + + False + False + + + + + + + + + + + + UserControl + + + Vkt5ConsoleControl.cs + + + Form + + + + + True + True + Resources.resx + + + + + Vkt5ConsoleControl.cs + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VKT5_RemoteConsole/Vkt5_RemoteConsole.sln b/VKT5_RemoteConsole/Vkt5_RemoteConsole.sln new file mode 100644 index 0000000..25e3d08 --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5_RemoteConsole.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vkt5_RemoteConsole", "Vkt5_RemoteConsole.csproj", "{5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Debug|x64.ActiveCfg = Debug|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Debug|x86.ActiveCfg = Debug|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Release|Any CPU.Build.0 = Release|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Release|x64.ActiveCfg = Release|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.csproj b/VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.csproj new file mode 100644 index 0000000..8bdd364 --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.csproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8} + Library + Properties + Vkt5_RemoteConsole + Vkt5_RemoteConsole + v4.0 + 512 + + + true + full + false + C:\Program Files\LERS\Common\Plugins\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + False + ..\..\Framework\Lers.Plugins\bin\Debug\Lers.Plugins.dll + False + + + False + ..\..\Framework\Lers.Plugins.Attributes\bin\Debug\Lers.Plugins.Attributes.dll + False + + + False + ..\..\Framework\Lers.System\bin\Debug\Lers.System.dll + False + + + False + ..\..\Framework\Lers.UI\bin\Debug\Lers.UI.dll + False + + + + + + + + + + + + UserControl + + + Vkt5ConsoleControl.cs + + + Form + + + + + True + True + Resources.resx + + + + + Vkt5ConsoleControl.cs + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.sln b/VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.sln new file mode 100644 index 0000000..8f6701d --- /dev/null +++ b/VKT5_RemoteConsole/Vkt5_RemoteConsole_debug.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vkt5_RemoteConsole_debug", "Vkt5_RemoteConsole_debug.csproj", "{5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5622B98C-E274-4C99-BF9B-6FCC2E85EBD8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal