Skip to content

Commit 54542c9

Browse files
landre-cerpMutex666
authored andcommitted
Add PLT ch47 support
1 parent 8172d27 commit 54542c9

File tree

5 files changed

+323
-20
lines changed

5 files changed

+323
-20
lines changed
2.21 MB
Loading

src/DCSFlightpanels/PanelUserControls/CDU737/Cdu737UserControlCH47.xaml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,17 @@
1111
d:DesignHeight="650" d:DesignWidth="1000">
1212

1313
<StackPanel Orientation="Horizontal">
14-
14+
1515
<customControls:CDU737UserControl x:Name="CDU737UserControl" />
16-
16+
1717
<StackPanel Orientation="Vertical">
1818

1919
<Label Content="CH47 Mappings " FontSize="24" FontWeight="Bold" />
20-
<Label Content="Menu buttons are mapped in the same order, as shown on the picture below" FontSize="12" FontWeight="Bold" />
2120
<Label Content="BRT -/+ are operative - but a bug in DCSBios ATM prevent a correct usage" FontSize="12" FontWeight="Bold" />
21+
<Label Content="LSK, RSK mapped as in Aircraft" FontSize="12" FontWeight="Bold" />
22+
<Label Content="Prev Page, Next Page are mapped to Up / Down Arrow&#xA;[ INIT REF , ... , DES ] =&gt; [MSN, ...., DIR]&#xA;SNSR -&gt; Menu , CNI -&gt; DEP ARR , LEGS -&gt; MARK ,&#xD;&#xA;HOLD-&gt;TDL , PROG-&gt; ASE, EXEC-&gt;STAT&#xA;" FontSize="12" FontWeight="Bold" />
23+
<Image Source="/Images/CDU737/CH47.png" Stretch="Fill" Height="348" Width="286"/>
2224

23-
<Image Height="181" Width="372" Source="/Images/CDU737/mappingmenukey.jpg"/>
24-
<Label Content="LSK means Left Shift Key, key on the left, numbered from top to bottom" FontSize="12" FontWeight="Bold" />
25-
<Label Content="LSK 5 and LSK 6 are mapped to P/G" FontSize="12" FontWeight="Bold" />
26-
<Label Content="Prev Page, Next Page are mapped to P/G" FontSize="12" FontWeight="Bold" />
27-
<Label Content="RSK 5 and RSK 6 are mapped to +/- RockerSwitch" FontSize="12" FontWeight="Bold" />
28-
<Label Content="FIX is mapped to MK" FontSize="12" FontWeight="Bold" />
2925

3026
</StackPanel>
3127
</StackPanel>

src/NonVisuals/CockpitMaster/Panels/CDUTextLineHelpers.cs

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,118 @@ public static class CDUTextLineHelpers
223223
{'~' , CDUCharset.NeedInvertedBig02 | (CDUCharset) Modifier.Big | (CDUCharset) Modifier.Inverted }
224224

225225
};
226+
public static readonly Dictionary<char, CDUCharset> CH47ConvertTable =
227+
new()
228+
{
229+
{ ' ' , CDUCharset.Space },
230+
{ '.' , CDUCharset.Dot },
231+
{ '*' , CDUCharset.Check },
232+
{ '0' , CDUCharset.Zero | (CDUCharset) Modifier.Big },
233+
{ '1' , CDUCharset.One | (CDUCharset) Modifier.Big },
234+
{ '2' , CDUCharset.Two |(CDUCharset) Modifier.Big },
235+
{ '3' , CDUCharset.Three |(CDUCharset) Modifier.Big },
236+
{ '4' , CDUCharset.Four |(CDUCharset) Modifier.Big },
237+
{ '5' , CDUCharset.Five |(CDUCharset) Modifier.Big },
238+
{ '6' , CDUCharset.Six |(CDUCharset) Modifier.Big },
239+
{ '7' , CDUCharset.Seven |(CDUCharset) Modifier.Big },
240+
{ '8' , CDUCharset.Eight |(CDUCharset) Modifier.Big },
241+
{ '9' , CDUCharset.Nine |(CDUCharset) Modifier.Big },
242+
{ 'a' , CDUCharset.A },
243+
{ 'b' , CDUCharset.B },
244+
{ 'c' , CDUCharset.C},
245+
{ 'd' , CDUCharset.D },
246+
{ 'e' , CDUCharset.E },
247+
{ 'f' , CDUCharset.F },
248+
{ 'g' , CDUCharset.G },
249+
{ 'h' , CDUCharset.H },
250+
{ 'i' , CDUCharset.I },
251+
{ 'j' , CDUCharset.J },
252+
{ 'k' , CDUCharset.K },
253+
{ 'l' , CDUCharset.L },
254+
{ 'm' , CDUCharset.M },
255+
{ 'n' , CDUCharset.N },
256+
{ 'o' , CDUCharset.O },
257+
{ 'p' , CDUCharset.P },
258+
{ 'q' , CDUCharset.Q },
259+
{ 'r' , CDUCharset.R },
260+
{ 's' , CDUCharset.S },
261+
{ 't' , CDUCharset.T },
262+
{ 'u' , CDUCharset.U },
263+
{ 'v' , CDUCharset.V },
264+
{ 'w' , CDUCharset.W },
265+
{ 'x' , CDUCharset.X },
266+
{ 'y' , CDUCharset.Y },
267+
{ 'z' , CDUCharset.Z },
268+
{ '(' , CDUCharset.OpenParent },
269+
{ ')' , CDUCharset.CloseParent },
270+
{ '<' , CDUCharset.Lower },
271+
{ '>' , CDUCharset.Greater },
272+
{ '-' , CDUCharset.Dash },
273+
{ '/' , CDUCharset.Slash },
274+
{ ':' , CDUCharset.Colon },
275+
{ '%' , CDUCharset.Percent },
276+
{ '+' , CDUCharset.Plus },
277+
{ ';' , CDUCharset.Semicolon },
278+
{ '=' , CDUCharset.Degree },
279+
{ 'A' , CDUCharset.A | (CDUCharset) Modifier.Big },
280+
{ 'B' , CDUCharset.B | (CDUCharset) Modifier.Big},
281+
{ 'C' , CDUCharset.C | (CDUCharset) Modifier.Big},
282+
{ 'D' , CDUCharset.D | (CDUCharset) Modifier.Big },
283+
{ 'E' , CDUCharset.E | (CDUCharset) Modifier.Big},
284+
{ 'F' , CDUCharset.F | (CDUCharset) Modifier.Big },
285+
{ 'G' , CDUCharset.G | (CDUCharset) Modifier.Big },
286+
{ 'H' , CDUCharset.H | (CDUCharset) Modifier.Big },
287+
{ 'I' , CDUCharset.I | (CDUCharset) Modifier.Big },
288+
{ 'J' , CDUCharset.J | (CDUCharset) Modifier.Big},
289+
{ 'K' , CDUCharset.K | (CDUCharset) Modifier.Big},
290+
{ 'L' , CDUCharset.L | (CDUCharset) Modifier.Big},
291+
{ 'M' , CDUCharset.M | (CDUCharset) Modifier.Big},
292+
{ 'N' , CDUCharset.N | (CDUCharset) Modifier.Big},
293+
{ 'O' , CDUCharset.O | (CDUCharset) Modifier.Big},
294+
{ 'P' , CDUCharset.P | (CDUCharset) Modifier.Big},
295+
{ 'Q' , CDUCharset.Q | (CDUCharset) Modifier.Big},
296+
{ 'R' , CDUCharset.R | (CDUCharset) Modifier.Big},
297+
{ 'S' , CDUCharset.S | (CDUCharset) Modifier.Big},
298+
{ 'T' , CDUCharset.T | (CDUCharset) Modifier.Big},
299+
{ 'U' , CDUCharset.U | (CDUCharset) Modifier.Big},
300+
{ 'V' , CDUCharset.V | (CDUCharset) Modifier.Big},
301+
{ 'W' , CDUCharset.W | (CDUCharset) Modifier.Big},
302+
{ 'X' , CDUCharset.X | (CDUCharset) Modifier.Big},
303+
{ 'Y' , CDUCharset.Y | (CDUCharset) Modifier.Big},
304+
{ 'Z' , CDUCharset.Z | (CDUCharset) Modifier.Big},
305+
{ '[' , CDUCharset.OpenParent | (CDUCharset) Modifier.Big },
306+
{ ']' , CDUCharset.CloseParent | (CDUCharset) Modifier.Big },
307+
{ '|' , CDUCharset.OpenParent | (CDUCharset) Modifier.Big },
308+
309+
{ '?' , CDUCharset.Plus| (CDUCharset) Modifier.Inverted },
310+
311+
{ '}' , CDUCharset.DownArrow },
312+
313+
// Special chars
314+
{ (char)187 , CDUCharset.RightArrow | (CDUCharset) Modifier.Big },
315+
{ (char)171 , CDUCharset.LeftArrow | (CDUCharset) Modifier.Big },
316+
317+
// Blinking Cursor
318+
{ (char)182 , CDUCharset.NeedInvertedBig01 | (CDUCharset) Modifier.Inverted },
319+
{ '#' , CDUCharset.NeedInvertedBig01 | (CDUCharset) Modifier.Inverted },
320+
321+
// up&down arrow in same char => most "same looking" :
322+
{ (char)174 , CDUCharset.Colon | (CDUCharset) Modifier.Big },
323+
324+
// 2 circles in front of a Line
325+
{ (char)169 , CDUCharset.O| (CDUCharset) Modifier.Big | (CDUCharset) Modifier.Inverted },
326+
{ (char)176 , CDUCharset.Degree | (CDUCharset) Modifier.Big },
327+
328+
// Selection Box [] in front of lines
329+
{ (char)161 , CDUCharset.EmptySquare |(CDUCharset) Modifier.Big },
330+
331+
// +/- in a char
332+
{ (char)177 , CDUCharset.Plus},
333+
334+
{'~' , CDUCharset.NeedInvertedBig02 | (CDUCharset) Modifier.Big | (CDUCharset) Modifier.Inverted }
335+
336+
};
337+
226338

227339

228340
}

src/NonVisuals/CockpitMaster/Preprogrammed/CDU737PanelCH47.cs

Lines changed: 92 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
using DCS_BIOS.EventArgs;
2-
using DCS_BIOS;
3-
using NonVisuals.CockpitMaster.Panels;
4-
using System;
1+
using DCS_BIOS;
2+
using DCS_BIOS.ControlLocator;
3+
using DCS_BIOS.EventArgs;
54
using DCS_BIOS.Interfaces;
5+
using DCS_BIOS.Serialized;
6+
using NonVisuals.CockpitMaster.Panels;
67
using NonVisuals.CockpitMaster.Switches;
7-
using System.Collections.Generic;
88
using NonVisuals.HID;
9-
using DCS_BIOS.Serialized;
10-
using DCS_BIOS.ControlLocator;
9+
using System;
10+
using System.Collections.Generic;
11+
using System.Drawing.Imaging;
12+
using System.Linq;
1113

1214
namespace NonVisuals.CockpitMaster.PreProgrammed
1315
{
@@ -31,11 +33,42 @@ public class CDU737PanelCH47 : CDU737PanelBase , IDCSBIOSStringListener
3133
private DCSBIOSOutput _CDU_LINE_14;
3234

3335

36+
private DCSBIOSOutput _CDU_LINE1_COLOR;
37+
private DCSBIOSOutput _CDU_LINE2_COLOR;
38+
private DCSBIOSOutput _CDU_LINE3_COLOR;
39+
private DCSBIOSOutput _CDU_LINE4_COLOR;
40+
private DCSBIOSOutput _CDU_LINE5_COLOR;
41+
private DCSBIOSOutput _CDU_LINE6_COLOR;
42+
private DCSBIOSOutput _CDU_LINE7_COLOR;
43+
private DCSBIOSOutput _CDU_LINE8_COLOR;
44+
private DCSBIOSOutput _CDU_LINE9_COLOR;
45+
private DCSBIOSOutput _CDU_LINE10_COLOR;
46+
private DCSBIOSOutput _CDU_LINE11_COLOR;
47+
private DCSBIOSOutput _CDU_LINE12_COLOR;
48+
private DCSBIOSOutput _CDU_LINE13_COLOR;
49+
private DCSBIOSOutput _CDU_LINE14_COLOR;
50+
51+
52+
// PLT_CDU_LINE1_COLOR
53+
54+
3455
private DCSBIOSOutput _CDU_BRT;
3556

3657
private DCSBIOSOutput _MASTER_CAUTION;
3758

3859
private Dictionary<uint, int> _cduLineAddressToIndex;
60+
private Dictionary<uint, int> _cduLineColorAddressToIndex;
61+
62+
private readonly Dictionary<string, CDUColor> _colours = new()
63+
{
64+
{ "w", CDUColor.WHITE },
65+
{ "g", CDUColor.GREEN },
66+
{ "y", CDUColor.YELLOW },
67+
{ "r", CDUColor.RED },
68+
{ "c", CDUColor.CYAN },
69+
{ "b", CDUColor.BLUE },
70+
{ "p", CDUColor.PURPLE }
71+
};
3972

4073
public CDU737PanelCH47(HIDSkeleton hidSkeleton) : base(hidSkeleton)
4174
{}
@@ -46,11 +79,12 @@ public override void InitPanel()
4679
{
4780
base.InitPanel();
4881

49-
CDUPanelKeys = CDUMappedCommandKeyA10C.GetMappedPanelKeys();
50-
82+
CDUPanelKeys = CDUMappedCommandKeyCH47.GetMappedPanelKeys();
83+
ConvertTable = CDUTextLineHelpers.CH47ConvertTable;
84+
BaseColor = CDUColor.WHITE;
85+
5186
// CDU Lines & BRT
5287

53-
5488
_CDU_LINE_1 = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE1");
5589
_CDU_LINE_2 = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE2");
5690
_CDU_LINE_3 = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE3");
@@ -66,6 +100,20 @@ public override void InitPanel()
66100
_CDU_LINE_13 = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE13");
67101
_CDU_LINE_14 = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE14");
68102

103+
_CDU_LINE1_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE1_COLOR");
104+
_CDU_LINE2_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE2_COLOR");
105+
_CDU_LINE3_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE3_COLOR");
106+
_CDU_LINE4_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE4_COLOR");
107+
_CDU_LINE5_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE5_COLOR");
108+
_CDU_LINE6_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE6_COLOR");
109+
_CDU_LINE7_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE7_COLOR");
110+
_CDU_LINE8_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE8_COLOR");
111+
_CDU_LINE9_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE9_COLOR");
112+
_CDU_LINE10_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE10_COLOR");
113+
_CDU_LINE11_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE11_COLOR");
114+
_CDU_LINE12_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE12_COLOR");
115+
_CDU_LINE13_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE13_COLOR");
116+
_CDU_LINE14_COLOR = DCSBIOSControlLocator.GetStringDCSBIOSOutput("PLT_CDU_LINE14_COLOR");
69117

70118
_CDU_BRT = DCSBIOSControlLocator.GetUIntDCSBIOSOutput("PLT_INT_LIGHT_CDU");
71119
_MASTER_CAUTION = DCSBIOSControlLocator.GetUIntDCSBIOSOutput("PLT_MASTER_CAUTION_LIGHT");
@@ -89,6 +137,25 @@ public override void InitPanel()
89137
{ _CDU_LINE_14.Address, 13 }
90138
};
91139

140+
_cduLineColorAddressToIndex = new Dictionary<uint, int>
141+
{
142+
{ _CDU_LINE1_COLOR.Address, 0 },
143+
{ _CDU_LINE2_COLOR.Address, 1 },
144+
{ _CDU_LINE3_COLOR.Address, 2 },
145+
{ _CDU_LINE4_COLOR.Address, 3 },
146+
{ _CDU_LINE5_COLOR.Address, 4 },
147+
{ _CDU_LINE6_COLOR.Address, 5 },
148+
{ _CDU_LINE7_COLOR.Address, 6 },
149+
{ _CDU_LINE8_COLOR.Address, 7 },
150+
{ _CDU_LINE9_COLOR.Address, 8 },
151+
{ _CDU_LINE10_COLOR.Address, 9 },
152+
{ _CDU_LINE11_COLOR.Address, 10 },
153+
{ _CDU_LINE12_COLOR.Address, 11 },
154+
{ _CDU_LINE13_COLOR.Address, 12 },
155+
{ _CDU_LINE14_COLOR.Address, 13 }
156+
};
157+
158+
92159
BIOSEventHandler.AttachStringListener(this);
93160
BIOSEventHandler.AttachDataListener(this);
94161

@@ -202,9 +269,23 @@ public void DCSBIOSStringReceived(object sender, DCSBIOSStringDataEventArgs e)
202269
.Replace("***", "xxx")
203270
.Replace("**", "xx");
204271

272+
if (_cduLineColorAddressToIndex.TryGetValue(e.Address, out int line))
273+
{
274+
var colorArray = Enumerable.Range(0, 24).Select(_ => BaseColor).ToArray();
275+
for ( int i=0; i< data.Length && i < 24; i++)
276+
{
277+
char c = data[i];
278+
if (_colours.TryGetValue(c.ToString(), out CDUColor color))
279+
{
280+
colorArray[i] = color;
281+
}
282+
}
283+
SetMaskColorForLine(line, colorArray);
284+
285+
}
286+
205287
if (_cduLineAddressToIndex.TryGetValue(e.Address, out int lineIndex))
206288
{
207-
SetColorForLine(lineIndex, CDUColor.WHITE);
208289
SetLine(lineIndex, data);
209290
}
210291

0 commit comments

Comments
 (0)