From 667606562e1028b9d4734700d75d526e062f0289 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Tue, 21 Mar 2017 16:53:14 -0600 Subject: [PATCH] Working through queued command and the syncronous comms method in the BiampTesiraForteDsp class --- .../PepperDash_Essentials_Core.csproj | 448 ++++++------- .../PepperDash_Essentials_Core.projectinfo | Bin 1292 -> 1282 bytes .../Essentials_DM/Essentials_DM.csproj | 250 +++---- .../Essentials_DM/Essentials_DM.projectinfo | Bin 1149 -> 1139 bytes .../DSP/BiampTesira/BiampTesiraForteDsp.cs | 625 ++++++++++-------- .../BiampTesira/BiampTesiraForteDspLevel.cs | 119 ++-- .../Essentials Devices Common.csproj | 250 +++---- .../Essentials Devices Common.projectinfo | Bin 1153 -> 1163 bytes .../PepperDashEssentials.csproj | 374 +++++------ .../PepperDashEssentials.projectinfo | Bin 1937 -> 1876 bytes 10 files changed, 1063 insertions(+), 1003 deletions(-) diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj index 272328ec..323a7166 100644 --- a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -1,225 +1,225 @@ - - - Release - AnyCPU - 9.0.30729 - 2.0 - {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} - Library - Properties - PepperDash.Essentials.Core - PepperDash_Essentials_Core - {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - WindowsCE - E2BECB1F-8C8C-41ba-B736-9BE7D946A398 - 5.0 - SmartDeviceProject1 - v3.5 - Windows CE - - - - - .allowedReferenceRelatedFileExtensions - true - full - false - bin\ - DEBUG;TRACE; - prompt - 4 - 512 - true - true - off - - - .allowedReferenceRelatedFileExtensions - none - true - bin\ - prompt - 4 - 512 - true - true - off - - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.EthernetCommunications.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll - - - - False - ..\..\..\pepperdash-simplsharp-core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rem S# Pro preparation will execute after these operations - + + + Release + AnyCPU + 9.0.30729 + 2.0 + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} + Library + Properties + PepperDash.Essentials.Core + PepperDash_Essentials_Core + {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + WindowsCE + E2BECB1F-8C8C-41ba-B736-9BE7D946A398 + 5.0 + SmartDeviceProject1 + v3.5 + Windows CE + + + + + .allowedReferenceRelatedFileExtensions + true + full + false + bin\ + DEBUG;TRACE; + prompt + 4 + 512 + true + true + off + + + .allowedReferenceRelatedFileExtensions + none + true + bin\ + prompt + 4 + 512 + true + true + off + + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.EthernetCommunications.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll + + + + False + ..\..\..\PepperDash.Core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo index 053b261fdff3bb7309784a1696bd8f16f61b8330..18afaf24c132a00a86010bd3d4223906f428d72c 100644 GIT binary patch delta 1081 zcmV-91jhS}3W5rdzkl6NAMHPQw0AK6^x>!X_CDR;-ud*=&JMMkQ@fK#zwht+-Ku_D zEHBchMV(LEsxI>8_x*icf4}eV`})U!-`_X4o&LVRuR|aO0)Aun)sw8DZzjdk|GJC& zc)BWoK&TX!DlhBmrwNO*<$3k2DD!2u$bSfEZoqIQ2o;17A%A+-Q1|V%nY!24O`9)X z2$CD8h{knMXN$Aho9yD2Z5Meh6M8(G6>U*1vl3*H&rYhvis&=@a(TiSLftSV=D-F)=O2-4n1zhv~$7sawztQXIUdU2K2 z`A<>{q7lSwynnOvkp92-kbr-=ZddE}W!C=eb366+MYb%?^QLvE-lI=%C@oB!wm$Q61rLI4E z^gS~h_ruvZscE|FYB_#gELP>~c~-ATe8*4o%VL_pUawYF-6}vO@RNN49e>%LPvG}} zF7MpFkK4`6qxZnzhdhP-Df<5CqgQ#ubl^XK$;eFFr?;E5FT$Cc%+Bv;)AQ_r1mWIf za`51MZ+DhY4j%6A?j1~aXSbOt12UMNTLAvR=`r2@zj#g_+-gov+j(9u^OnrlV!bS; z84O_)&eOe5^G`p$xBu|L?tjDkyZbwN{^|MdWIvxw@83JWpJxwlF;5%23Fht=oqgEc zZA9h&#q)V^tNDDDFRC{0Okj4t_i4T}*}J#1zxOcz^x@ugcJKa9KK=CG^x@8fNq&n7 z4B-Ydb_?hqHe+Gm|1X}Rhqs!dug=2R**SQ4Z+9=-nND^l`}glX*nfGjHzS7MySJY| z*v)rtGdmV!Ffq3P{9zMgyZwLhob2v|lj054b4Cosc4oVihqHqR5ANN6cyRxG|9q0~ zPiObnIcFZAZ~|@ycgqQgclQ5gvhRjucZ~BQziLV0R_7hR?csFi;q?CO z-p(w`XS3P)!NdF0dw-v1)5&=@&39(^ecEq;7EHh`VBT^9HuU)a=2_SqnuS;Sd5N&Q zTAnT2yaqkO>B#S$pC9D2$s{}2pH62FcJJSxJbZYtpMUyb|KMN}xY4%(8_dfsfWP;= z40rwi<_WqtG(oR_;`z7pl6o1KpYxsR{hj->Sw5W|WDgGR&2si95AN^nKDfWLJDp4( z49w3U)L?pU0sFnDXRzo0_sve{13OopM1dRI)2z+Lv#fQqbFjBF`E+->e=t4B_NFx0 zgT06MALRLr*!|vv2S1D`KZ4#b`Tj5YC7iz~&eiXwajwf&hW-Bl8;ATwM->178 delta 1091 zcmV-J1ibr#3XBSnzki*Fk9O`q+Bq2CJNWee!47@=>7$(;YB#5LCy##L-}kE~ubbcZ z_nlu>ynU6nr|JPJ#amv!~i`LsP-o>$L`GGAtk{AU}-4S(pZ1e=1eAuP|Dr$yaf zn@M|p-L(1QgU*1vl29s&rYhviik7&a(T;n zHZT0JNP5d@KV3}n+3RXuPxIq?IxjAB%Lgab>iSLftSV=O;zy5+{Oo=7OGY1kQ7nta zdhx8N7gt%G|9>R4AObHm8V3HX=mcC~I_X6?^1lT%k;WXs|_Z(4`vJ^J)U z&M;*7A}f~1^wnZgUON!`^o=)P8^FxUlG+Ajp#OIF@AKSusMRIYw+SK$JIV8V2fLqs zdXUc!b{^ilfA3zN?PhzEPe0v1-=FPKOPQ!!jYz3}b3w!B)if)A_UGtkjuaX`%~$zy zmM^D8PE7YbGZpv4sW_==uIp+!eqAh9yUEaBUAGe#9NAH2b4|D$d^Yi`DN3ZgRiNJsUl98FQPj5G4Uxd>%nVsLyrsvtg z&UAWjGC6o~zPCHeCkGFAclQn^yR+L&lK~mb%`E_b;M|yQ|KBAD5<51X#A@Bg>X&%;~I&sS&R)a)EQytliT?Mx>-ll}Ym9_&1S*qafn z@7>$aAMEBkx0xCXGMJTH0RFI9vEBZ^bwYM`!Wr?#>3JVYuKkDS`OfUY!F2NJgHN-E zJ9|@N-JU`!``12446j1*b;BHC%cxV5wrTK11bH_3-@~f7VY<1r8(jHEC z9!~Gi?(NL7d^Ve%A3VH2z4vKF#v@V0w`4 zO=+YDdk^nF$nzO7`n?AarUS+!M!;KBx - - Release - AnyCPU - 9.0.30729 - 2.0 - {9199CE8A-0C9F-4952-8672-3EED798B284F} - Library - Properties - PepperDash.Essentials.DM - PepperDash_Essentials_DM - {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - WindowsCE - E2BECB1F-8C8C-41ba-B736-9BE7D946A398 - 5.0 - SmartDeviceProject1 - v3.5 - Windows CE - - - - - .allowedReferenceRelatedFileExtensions - true - full - false - bin\ - DEBUG;TRACE; - prompt - 4 - 512 - true - true - off - - - .allowedReferenceRelatedFileExtensions - none - true - bin\ - prompt - 4 - 512 - true - true - off - - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll - - - - False - ..\..\..\pepperdash-simplsharp-core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll - - - False - ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rem S# Pro preparation will execute after these operations - + + + Release + AnyCPU + 9.0.30729 + 2.0 + {9199CE8A-0C9F-4952-8672-3EED798B284F} + Library + Properties + PepperDash.Essentials.DM + PepperDash_Essentials_DM + {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + WindowsCE + E2BECB1F-8C8C-41ba-B736-9BE7D946A398 + 5.0 + SmartDeviceProject1 + v3.5 + Windows CE + + + + + .allowedReferenceRelatedFileExtensions + true + full + false + bin\ + DEBUG;TRACE; + prompt + 4 + 512 + true + true + off + + + .allowedReferenceRelatedFileExtensions + none + true + bin\ + prompt + 4 + 512 + true + true + off + + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll + + + + False + ..\..\..\PepperDash.Core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll + + + False + ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo index e335bd1d305673b76061a87365480da8b83c5e32..bbf70ee047d1e121993e039c639b2e4a49b45a40 100644 GIT binary patch delta 973 zcmV;;12X*m2=fS#w14~Qqx}bu?(L5s-rIffaA$9O=hH_!JJfDY?M@#3zQ6BxtNLxR zyhxuGbv|vYy2zW~_xF97uU2{eG;8L+@9+Ei$A917H@98>zQ3>QK7IOy|L5*}Yeue0TO^{goKWwywFc9042SV^}9b$?6foHf)*du@pQ`nqZJ z#S1~DOJPFzqRtj)vp3nr@YjpHmMJ)%&5E|DmRX4*%4a9lVnt(}eYw2l{FoPhb}2MG zU8jplK6_oQ>uG*mPv^yDZs+f$T3x@Xo>k>6ubYn^88+Vg=$DK>`l47Ci}m7JQ7^8t zI{!&(L6iWKkAHV|9@78!9un{`*X?TEzRcR66)vO>zQ~rvdET@RyL5IjrymkQg=^Jk{27%1Vl3E4>r~md2_V+&hs7IeJVZKf9=(F>OyXTXg+1~xx z!T!D7^DLX(yMM4hojo`|zyDyiJEfK~HMbazQu(H4&ws0FR{m_wh%(v@G<%w_^5raF zPN}bt9(~Uc{(eaKlbYtWu9oB1#bQ;yo@e!n1aSN`zbvNt>-B0?)vW?lYEH8(-=FO7 z-G7*6=b!FA+`0eod?(BA?e9OhH#wi}`P6(5=4ko*^+f0oC z8O+Bm0DsVYm`?xSH3<&}b<{~!=OO8Lc4oVihqHqR5ANN6cyRxG|9p~@in)J(x;MGM z&o(HgV?00s!EXWXRs@fC_5Ut1AKba(A|$-Fxt9c5ia; z)BF3M?qs*n>O;i81?2Z7e!SQJcg@4Ya2}k9zR0iIYS~oh9ZT?Vy7O>)e|B$YmgTeA z?EK*2{pr0=v+3kKo8~*S`~D1UfELjH7BFu``wjj5zl-X-J40lDm7kaJu&d?SvdwD{ zAb+HPe((JJAfHVp8F@40&g|a5KY94@U_bx#!T!O)B(TJ{0UJ!jEr7r0L=1QQ|FRj` z9h#BXKk@wAc}Z9dOvw4p^#0EM*({&V4zdRa_h$Q(2lw}OAKc&BolYhX1}0<>YA_$S zfc>8HG1%|_E2g9Kft{Sap~-ogwb^)dj!VmxevivS2 delta 983 zcmV;|11S9S2>l3x5e_}_x*iy+u!f|`?|i|(hxf9sembAFXUp^ISyAT8Y?1#gU=kv+l0FOSlYekIYn~Q$du_=4`nqZJ z#S6isOIyPBqRtj)vp3nr@YjT{5dU~KE83!3W+lcapPf{T6%BOu~*!Sr}=R`ofnt6ow<{0b^WG#R+TeCs{8 zf09}d8Nl1)oqwH&^#8qw1pLc&yIQv|v-X>3K7#&5wk*!`rgf;@qfd2WU*@Y-UO&y6 z`R^Yc_ZL~QJf<%elk(aD*r#v2X&3}DD@$q_jGF%2-M@eT{zpCHbgA-ff=8b{y!Yv+ z2RpmxlY@JEpFYSQ9PB-uWcT;;?9;vd2cPaepq4T(w|^LolK7@(&#P%x{;W)gve*p- zdz!EEJ`b|_-TGwO!L?4)vBsn1*oK) zW?8;J+26bWFw4$A-F>)o|Ka&gmfzdoe{gSdKHKw2`5w^ao!j?un^}1D9{v9;Pgj3J zzCZftRe#>_sQJ%dGBQ*2>FuV-OtjK$GCRMYP0zD~o$2)6WODG}d~bJ_PYxdL?(Q8- zc4xPl7Xvbwj9UQypvf?u{=aAj9)vUCjq9YU^N{ZQ56|-qrt$Xn%Zg8};8O_ueGW?;Y%tI?rbZI}h*O zzjrUscC)?7r=RYh?}zH=MwkKRZvpvzDIf3k|3#DVFq{M@nJ@CIwpupTc}M#{obEiF z-k;sunPvHGHakCfcz=5D(`-69&!)t;_kHqjfEEz`7BFu`_znI2zlh|!J3};om7kaJ zq<^dB*|N=Rj6NiOe((I8m~%484)&+h*@NBt_a_e@9_;6zKG;7vm;}6k8?eDF+yeM} z&cblV|8JU(-J$7t{S(i>otHGyf!R3Uncm;IKbz&#*#UW!_h$Q(2lw}OAKc&BolYhX z24-UrYA_kMfc>76G1%|V{akcDursqaG*B~7vo;&gvewPTJ>u5APqWGS!<|p3vwXJy z;C!+(eQ{{ef1RCb;a F001 LevelControlPoints { get; private set; } - - public bool isSubscribed; - - CrestronQueue CommandQueue; - - //new public Dictionary DialerControlPoints { get; private set; } - - //new public Dictionary SwitcherControlPoints { get; private set; } - - /// - /// Shows received lines as hex - /// - public bool ShowHexResponse { get; set; } - - public BiampTesiraForteDsp(string key, string name, IBasicCommunication comm, BiampTesiraFortePropertiesConfig props) : - base(key, name) - { - CommandQueue = new CrestronQueue(20); - - Communication = comm; - var socket = comm as ISocketStatus; - if (socket != null) - { - // This instance uses IP control - socket.ConnectionChange += new EventHandler(socket_ConnectionChange); - } - else - { - // This instance uses RS-232 control - } - PortGather = new CommunicationGather(Communication, '\x0a'); - PortGather.LineReceived += this.Port_LineReceived; - if (props.CommunicationMonitorProperties != null) - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); - } - else - { -#warning Need to deal with this poll string - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 120000, 120000, 300000, ""); - } - - LevelControlPoints = new Dictionary(); - - foreach (KeyValuePair block in props.LevelControlBlocks) - { - this.LevelControlPoints.Add(block.Key, new TesiraForteLevelControl(block.Value, this)); - } - - } - - public override bool CustomActivate() - { - Communication.Connect(); - CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; - CommunicationMonitor.Start(); - - CrestronConsole.AddNewConsoleCommand(SendLine, "send" + Key, "", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(s => Communication.Connect(), "con" + Key, "", ConsoleAccessLevelEnum.AccessOperator); - return true; - } - - void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) - { - if (e.Client.IsConnected) - { - Debug.Console(2, this, "Socket Status Change: {0}", e.Client.ClientStatus.ToString()); - // Maybe wait for message indicating valid TTP session - } - } - - /// - /// Initiates the subscription process to the DSP - /// - void SubscribeToAttributes() - { - EnqueueCommand("SESSION set verbose true"); - - foreach (KeyValuePair level in LevelControlPoints) - { - level.Value.Subscribe(); - } - - ResetSubscriptionTimer(); - } - - - - void ResetSubscriptionTimer() - { -#warning Add code to create/reset a CTimer to periodically check for subscribtion status - - isSubscribed = true; - - //CTimer SubscribtionTimer = new CTimer( - } - - /// - /// Handles a response message from the DSP - /// - /// - /// - void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) - { - if (Debug.Level == 2) - Debug.Console(2, this, "RX: '{0}'", - ShowHexResponse ? ComTextHelper.GetEscapedText(args.Text) : args.Text); - - try - { - if (args.Text.IndexOf("Welcome to the Tesira Text Protocol Server...") > -1) - { - // Indicates a new TTP session - - SubscribeToAttributes(); - } - else if (args.Text.IndexOf("publishToken") > -1) - { - // response is from a subscribed attribute - - string pattern = "! \"publishToken\":[\"](.*)[\"] \"value\":(.*)"; - - Match match = Regex.Match(args.Text, pattern); - - if (match.Success) - { - - string key; - - string customName; - - string value; - - customName = match.Groups[1].Value; - - // Finds the key (everything before the '~' character - key = customName.Substring(0, customName.IndexOf("~", 0) - 1); - - value = match.Groups[2].Value; - - foreach (KeyValuePair controlPoint in LevelControlPoints) - { - if (customName == controlPoint.Value.LevelCustomName || customName == controlPoint.Value.MuteCustomName) - { - controlPoint.Value.ParseSubscriptionMessage(customName, value); - return; - } - - } - } - - /// same for dialers - /// same for switchers - - } - else if (args.Text.IndexOf("+OK") > -1) - { - if (args.Text.Length > 4) // Check for a simple "+OK" only 'ack' repsonse - return; - - // response is not from a subscribed attribute. From a get/set/toggle/increment/decrement command - - if (!CommandQueue.IsEmpty) - { - if(CommandQueue.Peek() is QueuedCommand) - { - // Expected response belongs to a child class - QueuedCommand tempCommand = (QueuedCommand)CommandQueue.Dequeue(); - - tempCommand.ControlPoint.ParseGetMessage(tempCommand.AttributeCode, args.Text); - } - else - { - // Expected response belongs to this class - string temp = (string)CommandQueue.Dequeue(); - - } - - SendNextQueuedCommand(); - - } - - - } - else if (args.Text.IndexOf("-ERR") > -1) - { - // Error response - - if (args.Text == "-ERR ALREADY_SUBSCRIBED") - { - // Subscription still valid - ResetSubscriptionTimer(); - } - else - { - SubscribeToAttributes(); - } - - } - } - catch (Exception e) - { - if (Debug.Level == 2) - Debug.Console(2, this, "Error parsing response: '{0}'\n{1}", args.Text, e); - } - - } - - /// - /// Sends a command to the DSP (with delimiter appended) - /// - /// Command to send - public void SendLine(string s) - { - Debug.Console(2, this, "TX: '{0}'", s); - Communication.SendText(s + "\x0a"); - } - - /// - /// Adds a command from a child module to the queue - /// - /// Command object from child module - public void EnqueueCommand(QueuedCommand commandToEnqueue) - { - CommandQueue.Enqueue(commandToEnqueue); - } - - /// - /// Adds a raw string command to the queue - /// - /// - public void EnqueueCommand(string command) - { - CommandQueue.Enqueue(command); - } - - /// - /// Sends the next queued command to the DSP - /// - void SendNextQueuedCommand() - { - if (CommandQueue.Peek() is QueuedCommand) - { - QueuedCommand nextCommand = new QueuedCommand(); - - nextCommand = (QueuedCommand)CommandQueue.Peek(); - - SendLine(nextCommand.Command); - } - else - { - string nextCommand = (string)CommandQueue.Peek(); - - SendLine(nextCommand); - } - } - - /// - /// Sends a command to execute a preset - /// - /// Preset Name - public override void RunPreset(string name) - { - SendLine(string.Format("DEVICE recallPreset {0}", name)); - } - - public class QueuedCommand - { - public string Command { get; set; } - public string AttributeCode { get; set; } - public TesiraForteControlPoint ControlPoint { get; set; } - } - } + // ! "myLevelName" -77 + + + public class BiampTesiraForteDsp : DspBase + { + public IBasicCommunication Communication { get; private set; } + public CommunicationGather PortGather { get; private set; } + public StatusMonitorBase CommunicationMonitor { get; private set; } + + new public Dictionary LevelControlPoints { get; private set; } + + public bool isSubscribed; + + private CTimer SubscriptionTimer; + + CrestronQueue CommandQueue; + + bool CommandQueueInProgress = false; + + //new public Dictionary DialerControlPoints { get; private set; } + + //new public Dictionary SwitcherControlPoints { get; private set; } + + /// + /// Shows received lines as hex + /// + public bool ShowHexResponse { get; set; } + + public BiampTesiraForteDsp(string key, string name, IBasicCommunication comm, BiampTesiraFortePropertiesConfig props) : + base(key, name) + { + CommandQueue = new CrestronQueue(100); + + Communication = comm; + var socket = comm as ISocketStatus; + if (socket != null) + { + // This instance uses IP control + socket.ConnectionChange += new EventHandler(socket_ConnectionChange); + } + else + { + // This instance uses RS-232 control + } + PortGather = new CommunicationGather(Communication, "\x0d\x0a"); + PortGather.LineReceived += this.Port_LineReceived; + if (props.CommunicationMonitorProperties != null) + { + CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); + } + else + { +#warning Need to deal with this poll string + CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 120000, 120000, 300000, "SESSION get aliases\x0d\x0a"); + } + + LevelControlPoints = new Dictionary(); + + foreach (KeyValuePair block in props.LevelControlBlocks) + { + this.LevelControlPoints.Add(block.Key, new TesiraForteLevelControl(block.Key, block.Value, this)); + } + + } + + public override bool CustomActivate() + { + Communication.Connect(); + CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; + CommunicationMonitor.Start(); + + CrestronConsole.AddNewConsoleCommand(SendLine, "send" + Key, "", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => Communication.Connect(), "con" + Key, "", ConsoleAccessLevelEnum.AccessOperator); + return true; + } + + void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) + { + Debug.Console(2, this, "Socket Status Change: {0}", e.Client.ClientStatus.ToString()); + + if (e.Client.IsConnected) + { + // Tasks on connect + } + else + { + // Cleanup items from this session + + if (SubscriptionTimer != null) + { + SubscriptionTimer.Stop(); + SubscriptionTimer = null; + } + + isSubscribed = false; + CommandQueue.Clear(); + CommandQueueInProgress = false; + } + } + + /// + /// Initiates the subscription process to the DSP + /// + void SubscribeToAttributes() + { + SendLine("SESSION set verbose true"); + + foreach (KeyValuePair level in LevelControlPoints) + { + level.Value.Subscribe(); + } + + if (!CommandQueue.IsEmpty) + SendNextQueuedCommand(); + + ResetSubscriptionTimer(); + } + + /// + /// Resets or Sets the subscription timer + /// + void ResetSubscriptionTimer() + { + isSubscribed = true; + + if (SubscriptionTimer != null) + { + SubscriptionTimer = new CTimer(o => SubscribeToAttributes(), 30000); + SubscriptionTimer.Reset(); + + } + } + + /// + /// Handles a response message from the DSP + /// + /// + /// + void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) + { + if (Debug.Level == 2) + Debug.Console(2, this, "RX: '{0}'", + ShowHexResponse ? ComTextHelper.GetEscapedText(args.Text) : args.Text); + + try + { + if (args.Text.IndexOf("Welcome to the Tesira Text Protocol Server...") > -1) + { + // Indicates a new TTP session + + SubscribeToAttributes(); + } + else if (args.Text.IndexOf("publishToken") > -1) + { + // response is from a subscribed attribute + + string pattern = "! \"publishToken\":[\"](.*)[\"] \"value\":(.*)"; + + Match match = Regex.Match(args.Text, pattern); + + if (match.Success) + { + + string key; + + string customName; + + string value; + + customName = match.Groups[1].Value; + + // Finds the key (everything before the '~' character + key = customName.Substring(0, customName.IndexOf("~", 0) - 1); + + value = match.Groups[2].Value; + + foreach (KeyValuePair controlPoint in LevelControlPoints) + { + if (customName == controlPoint.Value.LevelCustomName || customName == controlPoint.Value.MuteCustomName) + { + controlPoint.Value.ParseSubscriptionMessage(customName, value); + return; + } + + } + } + + /// same for dialers + /// same for switchers + + } + else if (args.Text.IndexOf("+OK") > -1) + { + if (args.Text == "+OK" || args.Text.IndexOf("list\":") > -1 ) // Check for a simple "+OK" only 'ack' repsonse or a list response and ignore + return; + + // response is not from a subscribed attribute. From a get/set/toggle/increment/decrement command + + if (!CommandQueue.IsEmpty) + { + if (CommandQueue.Peek() is QueuedCommand) + { + // Expected response belongs to a child class + QueuedCommand tempCommand = (QueuedCommand)CommandQueue.Dequeue(); + Debug.Console(2, this, "Command Dequeued. CommandQueue Size: {0}", CommandQueue.Count); + + tempCommand.ControlPoint.ParseGetMessage(tempCommand.AttributeCode, args.Text); + } + else + { + // Expected response belongs to this class + string temp = (string)CommandQueue.Dequeue(); + Debug.Console(2, this, "Command Dequeued. CommandQueue Size: {0}", CommandQueue.Count); + + } + + + //if (CommandQueue.IsEmpty) + // CommandQueueInProgress = false; + //else + SendNextQueuedCommand(); + + } + + + } + else if (args.Text.IndexOf("-ERR") > -1) + { + // Error response + + if (args.Text == "-ERR ALREADY_SUBSCRIBED") + { + // Subscription still valid + ResetSubscriptionTimer(); + } + else + { + SubscribeToAttributes(); + } + + } + } + catch (Exception e) + { + if (Debug.Level == 2) + Debug.Console(2, this, "Error parsing response: '{0}'\n{1}", args.Text, e); + } + + } + + /// + /// Sends a command to the DSP (with delimiter appended) + /// + /// Command to send + public void SendLine(string s) + { + Debug.Console(2, this, "TX: '{0}'", s); + Communication.SendText(s + "\x0a"); + } + + /// + /// Adds a command from a child module to the queue + /// + /// Command object from child module + public void EnqueueCommand(QueuedCommand commandToEnqueue) + { + CommandQueue.Enqueue(commandToEnqueue); + SendNextQueuedCommand(); + } + + /// + /// Adds a raw string command to the queue + /// + /// + public void EnqueueCommand(string command) + { + CommandQueue.Enqueue(command); + SendNextQueuedCommand(); + } + + /// + /// Sends the next queued command to the DSP + /// + void SendNextQueuedCommand() + { + Debug.Console(2, this, "Attempting to send next queued command. CommandQueueInProgress: {0} Communication isConnected: {1}", CommandQueueInProgress, Communication.IsConnected); + if (!CommandQueueInProgress) + { + if (CommandQueue.IsEmpty) + CommandQueueInProgress = false; + + Debug.Console(2, this, "CommandQueue has {0} Elements", CommandQueue.Count); + + foreach (object o in CommandQueue) + { + if (o is string) + Debug.Console(2, this, "{0}", o); + else if(o is QueuedCommand) + { + var item = (QueuedCommand)o; + Debug.Console(2, this, "{0}", item.Command); + } + } + + if (Communication.IsConnected && !CommandQueue.IsEmpty) + { + CommandQueueInProgress = true; + + if (CommandQueue.Peek() is QueuedCommand) + { + QueuedCommand nextCommand = new QueuedCommand(); + + nextCommand = (QueuedCommand)CommandQueue.Peek(); + + SendLine(nextCommand.Command); + } + else + { + string nextCommand = (string)CommandQueue.Peek(); + + SendLine(nextCommand); + } + } + } + } + + /// + /// Sends a command to execute a preset + /// + /// Preset Name + public override void RunPreset(string name) + { + SendLine(string.Format("DEVICE recallPreset {0}", name)); + } + + public class QueuedCommand + { + public string Command { get; set; } + public string AttributeCode { get; set; } + public TesiraForteControlPoint ControlPoint { get; set; } + } + } } \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs index ec656b9f..18c6a98d 100644 --- a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs +++ b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs @@ -84,25 +84,25 @@ namespace PepperDash.Essentials.Devices.Common.DSP bool LevelIsSubscribed; - public TesiraForteLevelControl(string label, string id, int index1, int index2, bool hasMute, bool hasLevel, BiampTesiraForteDsp parent) - : base(id, index1, index2, parent) - { - Initialize(label, hasMute, hasLevel); - } + //public TesiraForteLevelControl(string label, string id, int index1, int index2, bool hasMute, bool hasLevel, BiampTesiraForteDsp parent) + // : base(id, index1, index2, parent) + //{ + // Initialize(label, hasMute, hasLevel); + //} - public TesiraForteLevelControl(BiampTesiraForteLevelControlBlockConfig config, BiampTesiraForteDsp parent) + public TesiraForteLevelControl(string key, BiampTesiraForteLevelControlBlockConfig config, BiampTesiraForteDsp parent) : base(config.InstanceTag, config.Index1, config.Index2, parent) { - Initialize(config.Label, config.HasMute, config.HasLevel); + Initialize(key, config.Label, config.HasMute, config.HasLevel); } /// /// Initializes this attribute based on config values and generates subscriptions commands and adds commands to the parent's queue. /// - public void Initialize(string label, bool hasMute, bool hasLevel) + public void Initialize(string key, string label, bool hasMute, bool hasLevel) { - Key = string.Format("{0}-{1}", Parent.Key, label); + Key = string.Format("{0}--{1}", Parent.Key, key); DeviceManager.AddDevice(this); @@ -205,54 +205,54 @@ namespace PepperDash.Essentials.Devices.Common.DSP /// Parses a non subscription response /// /// The attribute code of the command - /// The message to parse - public override void ParseGetMessage(string attributeCode, string message) - { - try - { - // Parse a "+OK" message - string pattern = "+OK \"value\":(.*)"; - - Match match = Regex.Match(message, pattern); - - if (match.Success) - { - - string value; - - if (message.IndexOf("\"value\":") > -1) - { - value = message.Substring(message.IndexOf(":"), message.Length - message.IndexOf(":")); - - switch (attributeCode) - { - case "minLevel": - { - MinLevel = Double.Parse(value); - - break; - } - case "maxLevel": - { - MaxLevel = Double.Parse(value); - - break; - } - default: - { - Debug.Console(2, "Response does not match expected attribute codes: '{0}'", message); - - break; - } - } - } - } - } - catch (Exception e) - { - Debug.Console(2, "Unable to parse message: '{0}'\n{1}", message, e); - } - + /// The message to parse + public override void ParseGetMessage(string attributeCode, string message) + { + try + { + // Parse an "+OK" message + string pattern = @"\+OK ""value"":(.*)"; + + Match match = Regex.Match(message, pattern); + + if (match.Success) + { + + string value = match.Groups[1].Value; + + Debug.Console(2, this, "{0} is {1}", attributeCode, value); + + if (message.IndexOf("\"value\":") > -1) + { + switch (attributeCode) + { + case "minLevel": + { + MinLevel = Double.Parse(value); + + break; + } + case "maxLevel": + { + MaxLevel = Double.Parse(value); + + break; + } + default: + { + Debug.Console(2, "Response does not match expected attribute codes: '{0}'", message); + + break; + } + } + } + } + } + catch (Exception e) + { + Debug.Console(2, "Unable to parse message: '{0}'\n{1}", message, e); + } + } /// @@ -276,7 +276,8 @@ namespace PepperDash.Essentials.Devices.Common.DSP /// /// public void SetVolume(ushort level) - { + { + Debug.Console(2, this, "volume: {0}", level); // Unmute volume if new level is higher than existing if (level > _VolumeLevel && AutomaticUnmuteOnVolumeUp) if(!_IsMuted) @@ -284,7 +285,7 @@ namespace PepperDash.Essentials.Devices.Common.DSP double volumeLevel = Scale(level, 0, 65535, MinLevel, MaxLevel); - SendFullCommand("Set", "level", volumeLevel.ToString()); + SendFullCommand("set", "level", volumeLevel.ToString()); } /// diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj index a892acca..c30380a8 100644 --- a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj +++ b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj @@ -1,126 +1,126 @@ - - - Release - AnyCPU - 9.0.30729 - 2.0 - {892B761C-E479-44CE-BD74-243E9214AF13} - Library - Properties - PepperDash.Essentials.Devices.Common - Essentials Devices Common - {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - WindowsCE - E2BECB1F-8C8C-41ba-B736-9BE7D946A398 - 5.0 - SmartDeviceProject1 - v3.5 - Windows CE - - - - - .allowedReferenceRelatedFileExtensions - true - full - false - bin\ - DEBUG;TRACE; - prompt - 4 - 512 - true - true - off - - - .allowedReferenceRelatedFileExtensions - none - true - bin\ - prompt - 4 - 512 - true - true - off - - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Gateways.dll - - - - False - ..\..\..\PepperDash.Core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll - - - False - ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rem S# Pro preparation will execute after these operations - + + + Release + AnyCPU + 9.0.30729 + 2.0 + {892B761C-E479-44CE-BD74-243E9214AF13} + Library + Properties + PepperDash.Essentials.Devices.Common + Essentials Devices Common + {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + WindowsCE + E2BECB1F-8C8C-41ba-B736-9BE7D946A398 + 5.0 + SmartDeviceProject1 + v3.5 + Windows CE + + + + + .allowedReferenceRelatedFileExtensions + true + full + false + bin\ + DEBUG;TRACE; + prompt + 4 + 512 + true + true + off + + + .allowedReferenceRelatedFileExtensions + none + true + bin\ + prompt + 4 + 512 + true + true + off + + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Gateways.dll + + + + False + ..\..\..\PepperDash.Core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll + + + False + ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe + False + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo index a1bedf3a0a7634999f58f736390d0ce833e04a27..220229331aac4e516b15822cb237272a46a00567 100644 GIT binary patch delta 981 zcmV;`11kK135yAk#DBY=KH7iq=-%%5;NI^22lo!PcRqczvqSCX)b8Zb@B90Hx2oS3 z%Zv1BQRmaPs*Ak&eShDV`D&HdPqSwJ`~JSKfBg6TeRJFM@B8}>V!83FNwMks@pM)G zfRHLIVP4kNPZK_8%k%14QRd5Rk^gWJ9>#Sgs1<}7p?ua5B7g0*na9`HO`9)X2)dgl zlm>WFXN$Aho9rTJ8qBS>TI99N?(u9^v_-YdN>D~VBaka1(d^6REvMeR@N+}h+i}9_ zVv^5ZSL=G3AJ@})ahY4zIH^|GZ>nciIm_$jqen)t_CES0qmRBQmc?SdcvjSltE|p{ zl3Eb8Aa>)Ooqvb)|GkF<{L6K_TDLE=_J=A2)bSVDvN+G1)?s~*KD~)s3{Aesisdmi zT1?7o2VtMS@n&)u%B(D@X+RSCZ|`7#4yqr-L4Ss&)KVtxHsjF=xUt>yYMPZl?0?z1kx_-5PxDp2oaM_YA@R|p z@0m#fA$;+wY0_(Y>2)o z|Ka&gmfzdoe{gSdKHKvN{T|Teo!j?ut0{W)9tiy0&1HYGzCZftRo*Z~_|IQ5GSm0z zt)}nutbfg~vg;k(UY6ZE*uS^8caYtmJ>1PFpMH9<_wf86yT#0P00)zH z3-BK_X`R0RzcF7A!ufLe{Qf6Zorm+YvoqVBJe(aocyRCj!-M%H=f4Voh zzt0BJ&QBarFdw%7cf0wB_x1k``X3C^-}Mohihupxor9g-`{(Dg`(#vhXZzW`2cKs5 zCigzQzyIk@HXWFXILu&HZUOndXC>b4|2HP+VK_lf;`7)d}n%p=l*P#PiF_&gM)js{mFy-d%F+r@9a(|lLrGc zH3&7Bs9V5(--#OR`2W@O)cL^9+TPHtJx delta 971 zcmV;+12p`L34sZa#D6;vAMMx5e_}_x*iy+wJfB`wpVG@vBL(>HG0?RsMi5 zDlAoA*40nv)Anq6UOg+ye3>osA0oEHh^_>$g76}I&zh%2-G5%28GL=+wE5zN;JRrl zX>=ELwm6%;$u5GX!K`X48l}wZ@oZMKMYYUIkVQTtkSn6k?91gXC*8d8b3oPG@xbX~ zlFwdO>w20W*VB1%nOmkfsaDr-s%KR>BV<2%WaMe@qhB)m=!;@mEY^!>MZLJn>ij3E z1(6EUHs0BJNPqv|dq}{)T(_%r`!Z{Pc)U-&evvJU^So&t%J=BgoA|^Kb*gS;QGcQ3(|naLXZdnkA~K^^MmXb)7AkT%-Ai!f6$C| z`u_jGWIYHc>t()L<@Hmd*6)8()p)x!Bzqnv7TZd5IvRTAnT2yarjq zS%1mzou3msPbS&H{&YHfuzUah_jh)ulgWdDX&QtY%+f7j zzway!cKrX|N$PxHr)+O%%ARIzHlAgzn?$60#NT_LW|Q-WJD*Nx`E38e`DADM;QsE; t-lv~t4}SJzmk4sd - - Release - AnyCPU - 9.0.30729 - 2.0 - {1BED5BA9-88C4-4365-9362-6F4B128071D3} - Library - Properties - PepperDash.Essentials - PepperDashEssentials - {0B4745B0-194B-4BB6-8E21-E9057CA92230};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - WindowsCE - E2BECB1F-8C8C-41ba-B736-9BE7D946A398 - 5.0 - SmartDeviceProject1 - v3.5 - Windows CE - - - - - .allowedReferenceRelatedFileExtensions - true - full - false - bin\ - DEBUG;TRACE; - prompt - 4 - 512 - true - true - off - - - .allowedReferenceRelatedFileExtensions - none - true - bin\ - prompt - 4 - 512 - true - true - off - - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.EthernetCommunications.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Fusion.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll - - - False - ..\..\Essentials Devices Common\Essentials Devices Common\bin\Essentials Devices Common.dll - - - - False - ..\..\..\pepperdash-portal-sync\PepperDashCorePortalSync\PepperDashPortalSync\bin\PepperDashCorePortalSync.dll - - - False - ..\..\..\pepperdash-simplsharp-core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll - - - False - ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll - - - False - ..\..\Essentials DM\Essentials_DM\bin\PepperDash_Essentials_DM.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rem S# Pro preparation will execute after these operations - + + + Release + AnyCPU + 9.0.30729 + 2.0 + {1BED5BA9-88C4-4365-9362-6F4B128071D3} + Library + Properties + PepperDash.Essentials + PepperDashEssentials + {0B4745B0-194B-4BB6-8E21-E9057CA92230};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + WindowsCE + E2BECB1F-8C8C-41ba-B736-9BE7D946A398 + 5.0 + SmartDeviceProject1 + v3.5 + Windows CE + + + + + .allowedReferenceRelatedFileExtensions + true + full + false + bin\ + DEBUG;TRACE; + prompt + 4 + 512 + true + true + off + + + .allowedReferenceRelatedFileExtensions + none + true + bin\ + prompt + 4 + 512 + true + true + off + + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.EthernetCommunications.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Fusion.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll + + + False + ..\..\Essentials Devices Common\Essentials Devices Common\bin\Essentials Devices Common.dll + + + + False + ..\..\..\pepperdash-portal-sync\SspPortalSync\SspPortalSync\bin\PepperDashCorePortalSync.dll + + + False + ..\..\..\PepperDash.Core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll + + + False + ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll + + + False + ..\..\Essentials DM\Essentials_DM\bin\PepperDash_Essentials_DM.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo index b6b3bbd224ba8134cccf07a4434e36134dfc7081..eacd8d73c573bb621f0e72913a98f1f4f6ca3d07 100644 GIT binary patch delta 1712 zcmV;h22c5s57Z8jxPQB!KH7iq=-$Kerw{IZdT_A2z4Pg#ogHd7r*h@O*M%MV z%ewk$>h)}SUOg+ye3>ospFOmq7_9_@f-oS=&Kl~ky*Bgl`hU7<^Ti9nYJmDQgo`>` zoXy^37dN(AsH`TMMoaJ@%(IX=PdmsIh(MMkt%VM!!JS*zORaWOeNiB#bkdN`s z&O`eD-a`WZ<$tJ`b}_-TGwO!L?4)vBsn1*kNfW?8;J+26bWFw4$A-F>)o|Ka&g zmfzdoe{gSdKHKwY_#V*Zo!j?u!yG(%kFI|>lhvP+?~guul{Y+Y{_~fN%p`q!yGi;Y zoSDh&{C|EnJ+pIe56cyLT|zo!w?;49H+QZUOk~PKW95|9x}t z;8t^R+RpQOnYUzH7VBj(&0wXB2rBvReVTvz>An4j4|X5k-`(HI^H0xrC;RzidjH<} z{XBbci+S1DO)yut=QJqwPP5_bCk!a3Q! z)tr2F7EZ^`!NYsR!#mT-&Sd}oy$3rF_GYB`_wMcI4|emN+f0WA8O+2j0DsMyu>JkN za1!>yNpPT2@gbWOhOlcp&L3ulp<_UVIz`~D={ z1TvU}TL8Xk5^n16|AmuqFPsDi^rWium*m1{u#9#_;0r#dUxS_lM7tX+7X#V?S1RV{uGuxd!oE%H=f4Vohzt1_C2;qG|q29R}-0kV@_wxTjGIzpq4{rxGLh=3Gor9g- z`{(Dg`=lIpXZzW`2cKs5CigzQzyIk@HXWdN9A-fLTR?sf;>SDuf8jiIBJcPRx`Frk z!`<`A&TQ}gjNHfF^DLX(yMI8O`hVd3{QiU4?k#2^9(UgY?$?`x{}+edyPde(ISeQD z^{Pc$cs0L1Tef+9o=rRAFq`c^c(|J#d^-E|{L=@s+4SDd!|6Wh>3na0N@1}-5w`;z z%*QRj-!vb$>-GPI)6xm2y>YCYwptvwZCy;((%4H0UxKii+)-+egw^nd>S?EK-* z&hDrAY?|%O$d`FIFf}&-52oi9UA)Ki+|cv?3#X_PVY{(>J1+_Rz{F(v?7?0>*`W;h zeag2|mgv(5I|q~e!KeHC_h-{td}87t!vOAPz_*`{cz^%zn}oeiJncsCBEM=WUsj!W z^63w!q(tt|?(NKoV6z$dl7IK7_dd<06O40b7DNmipmikSMwquJeXpzk7gD_wF^5rR z{w{aqCeM9uFT0oRd^$O}zjyEc?s=Zw+uPmQr4@$r^G^rZ-GK=sf}4Tep3bh1{}&Rt z6Ae48U*+c|7KE$ifPTsEou41%v&keQ*M)qS-TU_^4<8=v=bt{Zk_NGCFOqj>!j&o}D(^PTDao%^#{KAjz86u!>(ClBuL?LN4_vpbzk z9t_OKAk@%dy&3lHr(>|o|JTe$=L0)8otW7T>1ozx<5|{v>S%9g^6Bn$|6qEM?M-Qn zlyScQAkWE-ncjQwU@0JU2x)dRRXaqBAoNSV|4V)eudWy8y0SwfTbHd2^#1{c%DUr- GBLDzMB-Tm* delta 1773 zcmVolhU_>`=QowL5wA`~JRPHF@3q zzQ6DMvMLvO{rmpDPxIz&TdjWI-}kDj-xkY@-}m>;ZD+sl@9R4LeShB=I=}DlJ1Lg& zug25W52)Y54*O+Y{d7KU&z9%av!cwG*&_d0!YPW*O1dwodw)Xfta)10?X{VS*Vj#( zFJ1^r19T_+FY0V@HhYs@+}Mi7A@g%Qn-y(QEwd5>m(NbB#fm5}`*L~9$ulqfEYt0# zxjbD=^4aTZT~G7ldO9yIb33^w)$009^{gsqgwjWk4CC*8^h-t`eNiln#d`6qs25jR zo&O}YAc8vpwnUuNyk4yRHNUu4VTJa1Zu-aYzs!=&r5zsQQ^ zF@3n0l-KUvefq|mkLdfevZPkQfa$;8{rmSn{isKmE0Z?h-OR%~$zymM^D8 zP8{?-L+AS;olk0-!Ma+GUl)s2`Fft!D-yZ!)BLiS=C9YQRaLhNPzgBAvV4C6dCIc$ zPj?^g+<$n!ljZmJ_aEGwoX_@r0=@@ydFS?h+%N%;-lOXu!c6t&&|FQ{qaH|P8ZRdHt%v&-hi}kXYW-v=e_>^|{KFvS<^xpo%2fGjN@9yv9`KRZ* zll^=$y?^igex5zJ#iVTPCYY#OboMnTY9kK+FMpf7gIi7Bvo%aeI9YqseDdl3{cLtW z%XS_foIg02?oU3QKK%4vcD^?|zl~xGzy_0Z3*cXKa)LhpUp5&JZ#5a8XKj9!U3X;X z!QTE}zPG!VW%myD@9pg!WMrjxiHc;rAD$m%x0sF&;9x>-0sd=FNT=8Tmrcp;&aLL; zRe!#y+PpI*#Hyd>JCnV8JNtVN^G_e{O=tJ+@4$(gKHPaQ$!{?wA>3d_ZUOyk&Pdql z|Jx>H_f`|~)mb^BIGBuEfWK)nZrAJo+vcPbG<$rCjWBOd_g+{3 zZzFjpL=FS{{9W#7O(E0XUUo0rA!p|P-o5*~=XrK-Z+B;xmT=C`!+!;~7?>~=3xGv| z-JZyw(w-f$4lwalNC05z1<$zkr@138M|2~;y2m90M?7{B+`;&(c5BBpHedtl-vapUsXyH3|J!Dx6Ail|y#9&j8+H8o&h-Ay{n;#^&JM_Xyf>qS&HcUI z2lsb&r<2Kpfyo$z8fMJJEnwe%E(W{&f5%jGKClzh38CG1o@Q+}o@K44h4ywPpYBfg z52gp%-joJNzWn_Mc}`Bt^xlI9Q-3Ok2zE0`I~0o`^h>_~OMc1dqo2&{;#}9wXk_cM Pm4W_0!NL;illK