1
0
Fork 0
mirror of https://github.com/hawkeye-stan/msfs-popout-panel-manager.git synced 2024-11-25 15:20:10 +00:00

Fix avionics power on issue for Cessna 208B and Cessna 172

This commit is contained in:
Stanley 2022-07-01 12:13:28 -04:00
parent 93442a0150
commit 5a6757f267
5 changed files with 32 additions and 38 deletions

View file

@ -4,10 +4,6 @@
{ {
KEY_MASTER_BATTERY_SET, KEY_MASTER_BATTERY_SET,
KEY_ALTERNATOR_SET, KEY_ALTERNATOR_SET,
KEY_TOGGLE_AVIONICS_MASTER
KEY_AVIONICS_MASTER_SET,
KEY_AVIONICS_MASTER_2_SET,
LIGHT_POTENTIOMETER_2_SET
} }
} }

View file

@ -12,7 +12,8 @@ namespace MSFSPopoutPanelManager.FsConnector
{ {
("Title", "Title", null, SIMCONNECT_DATATYPE.STRING256, typeof(string)), ("Title", "Title", null, SIMCONNECT_DATATYPE.STRING256, typeof(string)),
("ElectricalMasterBattery", "ELECTRICAL MASTER BATTERY", "Bool", SIMCONNECT_DATATYPE.FLOAT64, typeof(bool)), ("ElectricalMasterBattery", "ELECTRICAL MASTER BATTERY", "Bool", SIMCONNECT_DATATYPE.FLOAT64, typeof(bool)),
("TrackIREnable", "TRACK IR ENABLE", "Bool", SIMCONNECT_DATATYPE.FLOAT64, typeof(bool)) ("TrackIREnable", "TRACK IR ENABLE", "Bool", SIMCONNECT_DATATYPE.FLOAT64, typeof(bool)),
("AtcOnParkingSpot", "ATC ON PARKING SPOT", "Bool", SIMCONNECT_DATATYPE.FLOAT64, typeof(bool))
}; };
return def; return def;

View file

@ -10,5 +10,6 @@ namespace MSFSPopoutPanelManager.FsConnector
public double Prop02; public double Prop02;
public double Prop03; public double Prop03;
public double Prop04;
} }
} }

View file

@ -50,10 +50,10 @@ namespace MSFSPopoutPanelManager.Provider
public class PInvoke public class PInvoke
{ {
[DllImport("user32")] [DllImport("user32", SetLastError = true)]
public static extern int EnumWindows(CallBack callback, int lParam); public static extern int EnumWindows(CallBack callback, int lParam);
[DllImport("user32")] [DllImport("user32", SetLastError = true)]
public static extern bool EnumChildWindows(IntPtr window, CallBack callback, IntPtr lParam); public static extern bool EnumChildWindows(IntPtr window, CallBack callback, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)] [DllImport("user32.dll", SetLastError = true)]
@ -62,7 +62,7 @@ namespace MSFSPopoutPanelManager.Provider
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
public static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); public static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)] [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetClassName(IntPtr hWnd, StringBuilder strPtrClassName, Int32 nMaxCount); private static extern int GetClassName(IntPtr hWnd, StringBuilder strPtrClassName, Int32 nMaxCount);
public static string GetClassName(IntPtr hwnd) public static string GetClassName(IntPtr hwnd)
@ -72,21 +72,21 @@ namespace MSFSPopoutPanelManager.Provider
return sb.ToString(); return sb.ToString();
} }
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern bool GetClientRect(IntPtr hWnd, out Rectangle lpRect); public static extern bool GetClientRect(IntPtr hWnd, out Rectangle lpRect);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out Point lpPoint); public static extern bool GetCursorPos(out Point lpPoint);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); public static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll", SetLastError = true)] [DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern int GetWindowRect(IntPtr hwnd, out Rectangle lpRect); public static extern int GetWindowRect(IntPtr hwnd, out Rectangle lpRect);
[DllImport("user32.dll", CharSet = CharSet.Auto)] [DllImport("user32.dll", CharSet = CharSet.Auto)]
@ -99,50 +99,50 @@ namespace MSFSPopoutPanelManager.Provider
return sb.ToString(); return sb.ToString();
} }
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWindow(IntPtr hWnd); public static extern bool IsWindow(IntPtr hWnd);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo); public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern void mouse_event(uint dwFlags, int dx, int dy, uint cButtons, uint dwExtraInfo); public static extern void mouse_event(uint dwFlags, int dx, int dy, uint cButtons, uint dwExtraInfo);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint); public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);
[DllImport("User32.dll")] [DllImport("User32.dll", SetLastError = true)]
public static extern bool SetCursorPos(int X, int Y); public static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll", SetLastError = true)] [DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SetFocus(IntPtr hWnd); public static extern IntPtr SetFocus(IntPtr hWnd);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern bool SetForegroundWindow(IntPtr hWnd); public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)] [DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow); public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow);
[DllImport("USER32.dll")] [DllImport("USER32.dll", SetLastError = true)]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong); public static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint wFlags); public static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint wFlags);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern bool SetWindowText(System.IntPtr hwnd, System.String lpString); public static extern bool SetWindowText(System.IntPtr hwnd, System.String lpString);
[DllImport("user32.dll", SetLastError = true)] [DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr hmodWinEventProc, WinEventProc lpfnWinEventProc, int idProcess, int idThread, uint dwflags); public static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr hmodWinEventProc, WinEventProc lpfnWinEventProc, int idProcess, int idThread, uint dwflags);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")] [DllImport("user32.dll", SetLastError = true)]
public static extern int UnhookWinEvent(IntPtr hWinEventHook); public static extern int UnhookWinEvent(IntPtr hWinEventHook);
public delegate bool CallBack(IntPtr hwnd, int lParam); public delegate bool CallBack(IntPtr hwnd, int lParam);

View file

@ -59,16 +59,15 @@ namespace MSFSPopoutPanelManager.Provider
public void TurnOnPower(bool isRequiredForColdStart) public void TurnOnPower(bool isRequiredForColdStart)
{ {
if (isRequiredForColdStart && _simData != null && !_simData.ElectricalMasterBattery) // Wait for _simData.AtcOnParkingSpot to refresh
Thread.Sleep(MSFS_DATA_REFRESH_TIMEOUT + 250);
if (isRequiredForColdStart && _simData != null && (_simData.AtcOnParkingSpot || !_simData.ElectricalMasterBattery))
{ {
_isPowerOnForPopOut = true; _isPowerOnForPopOut = true;
_simConnector.TransmitActionEvent(ActionEvent.KEY_MASTER_BATTERY_SET, 1); _simConnector.TransmitActionEvent(ActionEvent.KEY_MASTER_BATTERY_SET, 1);
Thread.Sleep(100); Thread.Sleep(100);
_simConnector.TransmitActionEvent(ActionEvent.KEY_ALTERNATOR_SET, 1); _simConnector.TransmitActionEvent(ActionEvent.KEY_TOGGLE_AVIONICS_MASTER, 1);
Thread.Sleep(100);
_simConnector.TransmitActionEvent(ActionEvent.KEY_AVIONICS_MASTER_SET, 1);
Thread.Sleep(100);
_simConnector.TransmitActionEvent(ActionEvent.KEY_AVIONICS_MASTER_2_SET, 1);
} }
} }
@ -76,11 +75,7 @@ namespace MSFSPopoutPanelManager.Provider
{ {
if (_isPowerOnForPopOut) if (_isPowerOnForPopOut)
{ {
_simConnector.TransmitActionEvent(ActionEvent.KEY_AVIONICS_MASTER_2_SET, 0); _simConnector.TransmitActionEvent(ActionEvent.KEY_TOGGLE_AVIONICS_MASTER, 1);
Thread.Sleep(100);
_simConnector.TransmitActionEvent(ActionEvent.KEY_AVIONICS_MASTER_SET, 0);
Thread.Sleep(100);
_simConnector.TransmitActionEvent(ActionEvent.KEY_ALTERNATOR_SET, 0);
Thread.Sleep(100); Thread.Sleep(100);
_simConnector.TransmitActionEvent(ActionEvent.KEY_MASTER_BATTERY_SET, 0); _simConnector.TransmitActionEvent(ActionEvent.KEY_MASTER_BATTERY_SET, 0);
@ -115,8 +110,9 @@ namespace MSFSPopoutPanelManager.Provider
SimConnectStruct simConnectStruct = new SimConnectStruct(); SimConnectStruct simConnectStruct = new SimConnectStruct();
simConnectStruct.Prop01 = _simData.Title; // must set "Title" for TrackIR variable to write correctly simConnectStruct.Prop01 = _simData.Title; // must set "Title" for TrackIR variable to write correctly
simConnectStruct.Prop02 = _simData.ElectricalMasterBattery ? Convert.ToDouble(1) : Convert.ToDouble(0); // must set "ElectricalMasterBattery" for TrackIR variable to write correctly simConnectStruct.Prop02 = _simData.ElectricalMasterBattery ? Convert.ToDouble(1) : Convert.ToDouble(0); // must set "ElectricalMasterBattery" for TrackIR variable to write correctly
simConnectStruct.Prop03 = enable ? Convert.ToDouble(1) : Convert.ToDouble(0); // this is the TrackIR variable simConnectStruct.Prop03 = enable ? Convert.ToDouble(1) : Convert.ToDouble(0); // this is the TrackIR variable
simConnectStruct.Prop04 = _simData.AtcOnParkingSpot ? Convert.ToDouble(1) : Convert.ToDouble(0); // must set "AtcOnParkingSpot" for TrackIR variable to write correctly
_simConnector.SetDataObject(simConnectStruct); _simConnector.SetDataObject(simConnectStruct);
} }