mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-23 06:19:18 +02:00
merged upstream changes
This commit is contained in:
21
.gitignore
vendored
21
.gitignore
vendored
@@ -40,7 +40,7 @@ install_manifest.txt
|
|||||||
*.lai
|
*.lai
|
||||||
*.la
|
*.la
|
||||||
*.a
|
*.a
|
||||||
*.lib
|
#*.lib
|
||||||
|
|
||||||
# Executables
|
# Executables
|
||||||
*.exe
|
*.exe
|
||||||
@@ -54,17 +54,16 @@ install_manifest.txt
|
|||||||
*.~pas
|
*.~pas
|
||||||
*.opensdf
|
*.opensdf
|
||||||
*.sdf
|
*.sdf
|
||||||
*.sln
|
#*.sln
|
||||||
*.vcxproj
|
#*.vcxproj
|
||||||
*.filters
|
#*.filters
|
||||||
format_all_files.py
|
format_all_files.py
|
||||||
MaSzyna.opensdf
|
|
||||||
MaSzyna.sdf
|
|
||||||
MaSzyna.sln
|
|
||||||
MaSzyna.vcxproj
|
|
||||||
MaSzyna.vcxproj.filters
|
|
||||||
*.suo
|
*.suo
|
||||||
EU07.tds
|
EU07.tds
|
||||||
MaSzyna.VC.VC.opendb
|
*.opendb
|
||||||
MaSzyna.VC.db
|
*.db
|
||||||
.vs/
|
.vs/
|
||||||
|
Debug/
|
||||||
|
tmp/
|
||||||
|
bin/
|
||||||
|
ipch/
|
||||||
|
|||||||
433
Console.cpp
433
Console.cpp
@@ -10,51 +10,53 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "Console.h"
|
#include "Console.h"
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "Logs.h"
|
|
||||||
#include "PoKeys55.h"
|
|
||||||
#include "LPT.h"
|
#include "LPT.h"
|
||||||
|
#include "Logs.h"
|
||||||
|
#include "MWD.h" // maciek001: obsluga portu COM
|
||||||
|
#include "PoKeys55.h"
|
||||||
#include "mczapkie/mctools.h"
|
#include "mczapkie/mctools.h"
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Ra: klasa statyczna gromadząca sygnały sterujące oraz informacje zwrotne
|
// Ra: klasa statyczna gromadz<EFBFBD>ca sygna<EFBFBD>y steruj<EFBFBD>ce oraz informacje zwrotne
|
||||||
// Ra: stan wejścia zmieniany klawiaturą albo dedykowanym urządzeniem
|
// Ra: stan wej<EFBFBD>cia zmieniany klawiatur<EFBFBD> albo dedykowanym urz<EFBFBD>dzeniem
|
||||||
// Ra: stan wyjścia zmieniany przez symulację (mierniki, kontrolki)
|
// Ra: stan wyj<EFBFBD>cia zmieniany przez symulacj<EFBFBD> (mierniki, kontrolki)
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
Do klawisza klawiatury przypisana jest maska bitowa oraz numer wejścia.
|
Do klawisza klawiatury przypisana jest maska bitowa oraz numer wej<EFBFBD>cia.
|
||||||
Naciśnięcie klawisza powoduje wywołanie procedury ustawienia bitu o podanej
|
Naci<EFBFBD>ni<EFBFBD>cie klawisza powoduje wywo<EFBFBD>anie procedury ustawienia bitu o podanej
|
||||||
masce na podanym wejściu. Zwonienie klawisza analogicznie wywołuje zerowanie
|
masce na podanym wej<EFBFBD>ciu. Zwonienie klawisza analogicznie wywo<EFBFBD>uje zerowanie
|
||||||
bitu wg maski. Zasadniczo w masce ustawiony jest jeden bit, ale w razie
|
bitu wg maski. Zasadniczo w masce ustawiony jest jeden bit, ale w razie
|
||||||
potrzeby może być ich więcej.
|
potrzeby mo<EFBFBD>e by<EFBFBD> ich wi<EFBFBD>cej.
|
||||||
|
|
||||||
Oddzielne wejścia są wprowadzone po to, by można było używać więcej niż 32
|
Oddzielne wej<EFBFBD>cia s<EFBFBD> wprowadzone po to, by mo<EFBFBD>na by<EFBFBD>o u<EFBFBD>ywa<EFBFBD> wi<EFBFBD>cej ni<EFBFBD> 32
|
||||||
bity do sterowania. Podział na wejścia jest również ze względów organizacyjnych,
|
bity do sterowania. Podzia<EFBFBD> na wej<EFBFBD>cia jest r<EFBFBD>wnie<EFBFBD> ze wzgl<EFBFBD>d<EFBFBD>w organizacyjnych,
|
||||||
np. sterowanie światłami może mieć oddzielny numer wejścia niż przełączanie
|
np. sterowanie <EFBFBD>wiat<EFBFBD>ami mo<EFBFBD>e mie<EFBFBD> oddzielny numer wej<EFBFBD>cia ni<EFBFBD> prze<EFBFBD><EFBFBD>czanie
|
||||||
radia, ponieważ nie ma potrzeby ich uzależniać (tzn. badać wspólną maskę bitową).
|
radia, poniewa<EFBFBD> nie ma potrzeby ich uzale<EFBFBD>nia<EFBFBD> (tzn. bada<EFBFBD> wsp<EFBFBD>ln<EFBFBD> mask<EFBFBD> bitow<EFBFBD>).
|
||||||
|
|
||||||
Do każdego wejścia podpięty jest skrypt binarny, charakterystyczny dla danej
|
Do ka<EFBFBD>dego wej<EFBFBD>cia podpi<EFBFBD>ty jest skrypt binarny, charakterystyczny dla danej
|
||||||
konstrukcji pojazdu. Sprawdza on zależności (w tym uszkodzenia) za pomocą
|
konstrukcji pojazdu. Sprawdza on zale<EFBFBD>no<EFBFBD>ci (w tym uszkodzenia) za pomoc<EFBFBD>
|
||||||
operacji logicznych na maskach bitowych. Do każdego wejścia jest przypisana
|
operacji logicznych na maskach bitowych. Do ka<EFBFBD>dego wej<EFBFBD>cia jest przypisana
|
||||||
jedna, oddzielna maska 32 bit, ale w razie potrzeby istnieje też możliwość
|
jedna, oddzielna maska 32 bit, ale w razie potrzeby istnieje te<EFBFBD> mo<EFBFBD>liwo<EFBFBD><EFBFBD>
|
||||||
korzystania z masek innych wejść. Skrypt może też wysyłać maski na inne wejścia,
|
korzystania z masek innych wej<EFBFBD><EFBFBD>. Skrypt mo<EFBFBD>e te<EFBFBD> wysy<EFBFBD>a<EFBFBD> maski na inne wej<EFBFBD>cia,
|
||||||
ale należy unikać rekurencji.
|
ale nale<EFBFBD>y unika<EFBFBD> rekurencji.
|
||||||
|
|
||||||
Definiowanie wejść oraz przeznaczenia ich masek jest w gestii konstruktora
|
Definiowanie wej<EFBFBD><EFBFBD> oraz przeznaczenia ich masek jest w gestii konstruktora
|
||||||
skryptu. Każdy pojazd może mieć inny schemat wejść i masek, ale w miarę możliwości
|
skryptu. Ka<EFBFBD>dy pojazd mo<EFBFBD>e mie<EFBFBD> inny schemat wej<EFBFBD><EFBFBD> i masek, ale w miar<EFBFBD> mo<EFBFBD>liwo<EFBFBD>ci
|
||||||
należy dążyć do unifikacji. Skrypty mogą również używać dodatkowych masek bitowych.
|
nale<EFBFBD>y d<EFBFBD><EFBFBD>y<EFBFBD> do unifikacji. Skrypty mog<EFBFBD> r<EFBFBD>wnie<EFBFBD> u<EFBFBD>ywa<EFBFBD> dodatkowych masek bitowych.
|
||||||
Maski bitowe odpowiadają stanom przełączników, czujników, styczników itd.
|
Maski bitowe odpowiadaj<EFBFBD> stanom prze<EFBFBD><EFBFBD>cznik<EFBFBD>w, czujnik<EFBFBD>w, stycznik<EFBFBD>w itd.
|
||||||
|
|
||||||
Działanie jest następujące:
|
Dzia<EFBFBD>anie jest nast<EFBFBD>puj<EFBFBD>ce:
|
||||||
- na klawiaturze konsoli naciskany jest przycisk
|
- na klawiaturze konsoli naciskany jest przycisk
|
||||||
- naciśnięcie przycisku zamieniane jest na maskę bitową oraz numer wejścia
|
- naci<EFBFBD>ni<EFBFBD>cie przycisku zamieniane jest na mask<EFBFBD> bitow<EFBFBD> oraz numer wej<EFBFBD>cia
|
||||||
- wywoływany jest skrypt danego wejścia z ową maską
|
- wywo<EFBFBD>ywany jest skrypt danego wej<EFBFBD>cia z ow<EFBFBD> mask<EFBFBD>
|
||||||
- skrypt sprawdza zależności i np. modyfikuje własności fizyki albo inne maski
|
- skrypt sprawdza zale<EFBFBD>no<EFBFBD>ci i np. modyfikuje w<EFBFBD>asno<EFBFBD>ci fizyki albo inne maski
|
||||||
- ewentualnie do wyzwalacza czasowego dodana jest maska i numer wejścia
|
- ewentualnie do wyzwalacza czasowego dodana jest maska i numer wej<EFBFBD>cia
|
||||||
|
|
||||||
/*******************************/
|
/*******************************/
|
||||||
|
|
||||||
/* //kod do przetrawienia:
|
/* //kod do przetrawienia:
|
||||||
//aby się nie włączacz wygaszacz ekranu, co jakiś czas naciska się wirtualnie ScrollLock
|
//aby si<EFBFBD> nie w<EFBFBD><EFBFBD>czacz wygaszacz ekranu, co jaki<EFBFBD> czas naciska si<EFBFBD> wirtualnie ScrollLock
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
|
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
|
||||||
@@ -79,20 +81,21 @@ public static Int32 GetScreenSaverTimeout()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// static class member storage allocation
|
// static class member storage allocation
|
||||||
TKeyTrans Console::ktTable[ 4 * 256 ];
|
TKeyTrans Console::ktTable[4 * 256];
|
||||||
|
|
||||||
// Ra: do poprawienia
|
// Ra: do poprawienia
|
||||||
void SetLedState(char Code, bool bOn)
|
void SetLedState(char Code, bool bOn){
|
||||||
{ // Ra: bajer do migania LED-ami w klawiaturze
|
// Ra: bajer do migania LED-ami w klawiaturze
|
||||||
// NOTE: disabled for the time being
|
// NOTE: disabled for the time being
|
||||||
// TODO: find non Borland specific equivalent, or get rid of it
|
// TODO: find non Borland specific equivalent, or get rid of it
|
||||||
/* if (Win32Platform == VER_PLATFORM_WIN32_NT)
|
/* if (Win32Platform == VER_PLATFORM_WIN32_NT)
|
||||||
{
|
{
|
||||||
// WriteLog(AnsiString(int(GetAsyncKeyState(Code))));
|
// WriteLog(AnsiString(int(GetAsyncKeyState(Code))));
|
||||||
if (bool(GetAsyncKeyState(Code)) != bOn)
|
if (bool(GetAsyncKeyState(Code)) != bOn)
|
||||||
{
|
{
|
||||||
keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY, 0);
|
keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY, 0);
|
||||||
keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
|
keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -102,24 +105,25 @@ void SetLedState(char Code, bool bOn)
|
|||||||
KBState[Code] = bOn ? 1 : 0;
|
KBState[Code] = bOn ? 1 : 0;
|
||||||
SetKeyboardState(KBState);
|
SetKeyboardState(KBState);
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
int Console::iBits = 0; // zmienna statyczna - obiekt Console jest jednen wspólny
|
int Console::iBits = 0; // zmienna statyczna - obiekt Console jest jednen wsp<EFBFBD>lny
|
||||||
int Console::iMode = 0;
|
int Console::iMode = 0;
|
||||||
int Console::iConfig = 0;
|
int Console::iConfig = 0;
|
||||||
TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL};
|
TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL};
|
||||||
TLPT *Console::LPT = NULL;
|
TLPT *Console::LPT = NULL;
|
||||||
int Console::iSwitch[8]; // bistabilne w kabinie, załączane z [Shift], wyłączane bez
|
MWDComm *Console::MWD = NULL; // maciek001: obiekt dla MWD
|
||||||
int Console::iButton[8]; // monostabilne w kabinie, załączane podczas trzymania klawisza
|
int Console::iSwitch[8]; // bistabilne w kabinie, za<EFBFBD><EFBFBD>czane z [Shift], wy<77><79>czane bez
|
||||||
|
int Console::iButton[8]; // monostabilne w kabinie, za<7A><61>czane podczas trzymania klawisza
|
||||||
|
|
||||||
Console::Console()
|
Console::Console()
|
||||||
{
|
{
|
||||||
PoKeys55[0] = PoKeys55[1] = NULL;
|
PoKeys55[0] = PoKeys55[1] = NULL;
|
||||||
for (int i = 0; i < 8; ++i)
|
for (int i = 0; i < 8; ++i)
|
||||||
{ // zerowanie przełączników
|
{ // zerowanie prze<EFBFBD><EFBFBD>cznik<EFBFBD>w
|
||||||
iSwitch[i] = 0; // bity 0..127 - bez [Ctrl], 128..255 - z [Ctrl]
|
iSwitch[i] = 0; // bity 0..127 - bez [Ctrl], 128..255 - z [Ctrl]
|
||||||
iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift]
|
iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift]
|
||||||
}
|
}
|
||||||
@@ -129,6 +133,7 @@ Console::~Console()
|
|||||||
{
|
{
|
||||||
delete PoKeys55[0];
|
delete PoKeys55[0];
|
||||||
delete PoKeys55[1];
|
delete PoKeys55[1];
|
||||||
|
delete MWD;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::ModeSet(int m, int h)
|
void Console::ModeSet(int m, int h)
|
||||||
@@ -138,24 +143,24 @@ void Console::ModeSet(int m, int h)
|
|||||||
};
|
};
|
||||||
|
|
||||||
int Console::On()
|
int Console::On()
|
||||||
{ // załączenie konsoli (np. nawiązanie komunikacji)
|
{ // za<EFBFBD><EFBFBD>czenie konsoli (np. nawi<EFBFBD>zanie komunikacji)
|
||||||
iSwitch[0] = iSwitch[1] = iSwitch[2] = iSwitch[3] = 0; // bity 0..127 - bez [Ctrl]
|
iSwitch[0] = iSwitch[1] = iSwitch[2] = iSwitch[3] = 0; // bity 0..127 - bez [Ctrl]
|
||||||
iSwitch[4] = iSwitch[5] = iSwitch[6] = iSwitch[7] = 0; // bity 128..255 - z [Ctrl]
|
iSwitch[4] = iSwitch[5] = iSwitch[6] = iSwitch[7] = 0; // bity 128..255 - z [Ctrl]
|
||||||
switch (iMode)
|
switch (iMode)
|
||||||
{
|
{
|
||||||
case 1: // kontrolki klawiatury
|
case 1: // kontrolki klawiatury
|
||||||
case 2: // kontrolki klawiatury
|
case 2: // kontrolki klawiatury
|
||||||
iConfig = 0; // licznik użycia Scroll Lock
|
iConfig = 0; // licznik u<EFBFBD>ycia Scroll Lock
|
||||||
break;
|
break;
|
||||||
case 3: // LPT
|
case 3: // LPT
|
||||||
LPT = new TLPT(); // otwarcie inpout32.dll
|
LPT = new TLPT(); // otwarcie inpout32.dll
|
||||||
if (LPT ? LPT->Connect(iConfig) : false)
|
if (LPT ? LPT->Connect(iConfig) : false)
|
||||||
{ // wysłać 0?
|
{ // wys<EFBFBD>a<EFBFBD> 0?
|
||||||
BitsUpdate(-1); // aktualizacjia stanów, bo przy wczytywaniu mogło być nieaktywne
|
BitsUpdate(-1); // aktualizacjia stan<EFBFBD>w, bo przy wczytywaniu mog<EFBFBD>o by<EFBFBD> nieaktywne
|
||||||
WriteLog("Feedback Mode 3: InpOut32.dll OK");
|
WriteLog("Feedback Mode 3: InpOut32.dll OK");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // połączenie nie wyszło, ma być NULL
|
{ // po<EFBFBD><EFBFBD>czenie nie wysz<EFBFBD>o, ma by<EFBFBD> NULL
|
||||||
delete LPT;
|
delete LPT;
|
||||||
LPT = NULL;
|
LPT = NULL;
|
||||||
}
|
}
|
||||||
@@ -165,25 +170,35 @@ int Console::On()
|
|||||||
if (PoKeys55[0] ? PoKeys55[0]->Connect() : false)
|
if (PoKeys55[0] ? PoKeys55[0]->Connect() : false)
|
||||||
{
|
{
|
||||||
WriteLog("Found " + PoKeys55[0]->Version());
|
WriteLog("Found " + PoKeys55[0]->Version());
|
||||||
BitsUpdate(-1); // aktualizacjia stanów, bo przy wczytywaniu mogło być nieaktywne
|
BitsUpdate(-1); // aktualizacjia stan<EFBFBD>w, bo przy wczytywaniu mog<EFBFBD>o by<EFBFBD> nieaktywne
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // połączenie nie wyszło, ma być NULL
|
{ // po<EFBFBD><EFBFBD>czenie nie wysz<EFBFBD>o, ma by<EFBFBD> NULL
|
||||||
delete PoKeys55[0];
|
delete PoKeys55[0];
|
||||||
PoKeys55[0] = NULL;
|
PoKeys55[0] = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 5: // maciek001: MWD OK
|
||||||
|
MWD = new MWDComm();
|
||||||
|
if (!(MWD->Open()))
|
||||||
|
{
|
||||||
|
delete MWD;
|
||||||
|
iMode = 0;
|
||||||
|
Global::iFeedbackMode = 0;
|
||||||
|
WriteLog("COM Port not open!");
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::Off()
|
void Console::Off()
|
||||||
{ // wyłączenie informacji zwrotnych (reset pulpitu)
|
{ // wy<EFBFBD><EFBFBD>czenie informacji zwrotnych (reset pulpitu)
|
||||||
BitsClear(-1);
|
BitsClear(-1);
|
||||||
if ((iMode == 1) || (iMode == 2))
|
if ((iMode == 1) || (iMode == 2))
|
||||||
if (iConfig & 1) // licznik użycia Scroll Lock
|
if (iConfig & 1) // licznik u<EFBFBD>ycia Scroll Lock
|
||||||
{ // bez sensu to jest, ale mi się samo włącza
|
{ // bez sensu to jest, ale mi si<EFBFBD> samo w<EFBFBD><EFBFBD>cza
|
||||||
SetLedState(VK_SCROLL, true); // przyciśnięty
|
SetLedState(VK_SCROLL, true); // przyci<EFBFBD>ni<EFBFBD>ty
|
||||||
SetLedState(VK_SCROLL, false); // zwolniony
|
SetLedState(VK_SCROLL, false); // zwolniony
|
||||||
}
|
}
|
||||||
delete PoKeys55[0];
|
delete PoKeys55[0];
|
||||||
@@ -192,103 +207,203 @@ void Console::Off()
|
|||||||
PoKeys55[1] = NULL;
|
PoKeys55[1] = NULL;
|
||||||
delete LPT;
|
delete LPT;
|
||||||
LPT = NULL;
|
LPT = NULL;
|
||||||
|
delete MWD; // maciek001: zamykanie portu COM i takie tam inne ;)
|
||||||
|
MWD = NULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::BitsSet(int mask, int entry)
|
void Console::BitsSet(int mask, int entry)
|
||||||
{ // ustawienie bitów o podanej masce (mask) na wejściu (entry)
|
{ // ustawienie bit<EFBFBD>w o podanej masce (mask) na wej<EFBFBD>ciu (entry)
|
||||||
if ((iBits & mask) != mask) // jeżeli zmiana
|
if ((iBits & mask) != mask) // je<EFBFBD>eli zmiana
|
||||||
{
|
{
|
||||||
int old = iBits; // poprzednie stany
|
int old = iBits; // poprzednie stany
|
||||||
iBits |= mask;
|
iBits |= mask;
|
||||||
BitsUpdate(old ^ iBits); // 1 dla bitów zmienionych
|
BitsUpdate(old ^ iBits); // 1 dla bit<EFBFBD>w zmienionych
|
||||||
if (iMode == 4)
|
if (iMode == 4)
|
||||||
WriteLog("PoKeys::BitsSet: mask: " + std::to_string(mask) + " iBits: " + std::to_string(iBits));
|
WriteLog("PoKeys::BitsSet: mask: " + std::to_string(mask) +
|
||||||
|
" iBits: " + std::to_string(iBits));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::BitsClear(int mask, int entry)
|
void Console::BitsClear(int mask, int entry)
|
||||||
{ // zerowanie bitów o podanej masce (mask) na wejściu (entry)
|
{ // zerowanie bit<EFBFBD>w o podanej masce (mask) na wej<EFBFBD>ciu (entry)
|
||||||
if (iBits & mask) // jeżeli zmiana
|
if (iBits & mask) // je<EFBFBD>eli zmiana
|
||||||
{
|
{
|
||||||
int old = iBits; // poprzednie stany
|
int old = iBits; // poprzednie stany
|
||||||
iBits &= ~mask;
|
iBits &= ~mask;
|
||||||
BitsUpdate(old ^ iBits); // 1 dla bitów zmienionych
|
BitsUpdate(old ^ iBits); // 1 dla bit<EFBFBD>w zmienionych
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::BitsUpdate(int mask)
|
void Console::BitsUpdate(int mask)
|
||||||
{ // aktualizacja stanu interfejsu informacji zwrotnej; (mask) - zakres zmienianych bitów
|
{ // aktualizacja stanu interfejsu informacji zwrotnej; (mask) - zakres zmienianych bit<EFBFBD>w
|
||||||
switch (iMode)
|
switch (iMode)
|
||||||
{
|
{
|
||||||
case 1: // sterowanie światełkami klawiatury: CA/SHP+opory
|
case 1: // sterowanie <EFBFBD>wiate<EFBFBD>kami klawiatury: CA/SHP+opory
|
||||||
if (mask & 3) // gdy SHP albo CA
|
if (mask & 3) // gdy SHP albo CA
|
||||||
SetLedState(VK_CAPITAL, iBits & 3);
|
SetLedState(VK_CAPITAL, iBits & 3);
|
||||||
if (mask & 4) // gdy jazda na oporach
|
if (mask & 4) // gdy jazda na oporach
|
||||||
{ // Scroll Lock ma jakoś dziwnie... zmiana stanu na przeciwny
|
{ // Scroll Lock ma jako<EFBFBD> dziwnie... zmiana stanu na przeciwny
|
||||||
SetLedState(VK_SCROLL, true); // przyciśnięty
|
SetLedState(VK_SCROLL, true); // przyci<EFBFBD>ni<EFBFBD>ty
|
||||||
SetLedState(VK_SCROLL, false); // zwolniony
|
SetLedState(VK_SCROLL, false); // zwolniony
|
||||||
++iConfig; // licznik użycia Scroll Lock
|
++iConfig; // licznik u<EFBFBD>ycia Scroll Lock
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: // sterowanie światełkami klawiatury: CA+SHP
|
case 2: // sterowanie <EFBFBD>wiate<EFBFBD>kami klawiatury: CA+SHP
|
||||||
if (mask & 2) // gdy CA
|
if (mask & 2) // gdy CA
|
||||||
SetLedState(VK_CAPITAL, iBits & 2);
|
SetLedState(VK_CAPITAL, iBits & 2);
|
||||||
if (mask & 1) // gdy SHP
|
if (mask & 1) // gdy SHP
|
||||||
{ // Scroll Lock ma jakoś dziwnie... zmiana stanu na przeciwny
|
{ // Scroll Lock ma jako<EFBFBD> dziwnie... zmiana stanu na przeciwny
|
||||||
SetLedState(VK_SCROLL, true); // przyciśnięty
|
SetLedState(VK_SCROLL, true); // przyci<EFBFBD>ni<EFBFBD>ty
|
||||||
SetLedState(VK_SCROLL, false); // zwolniony
|
SetLedState(VK_SCROLL, false); // zwolniony
|
||||||
++iConfig; // licznik użycia Scroll Lock
|
++iConfig; // licznik u<EFBFBD>ycia Scroll Lock
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // LPT Marcela z modyfikacją (jazda na oporach zamiast brzęczyka)
|
case 3: // LPT Marcela z modyfikacj<EFBFBD> (jazda na oporach zamiast brz<EFBFBD>czyka)
|
||||||
if (LPT)
|
if (LPT)
|
||||||
LPT->Out(iBits);
|
LPT->Out(iBits);
|
||||||
break;
|
break;
|
||||||
case 4: // PoKeys55 wg Marcela - wersja druga z końca 2012
|
case 4: // PoKeys55 wg Marcela - wersja druga z ko<EFBFBD>ca 2012
|
||||||
if (PoKeys55[0])
|
if (PoKeys55[0])
|
||||||
{ // pewnie trzeba będzie to dodatkowo buforować i oczekiwać na potwierdzenie
|
{ // pewnie trzeba b<EFBFBD>dzie to dodatkowo buforowa<EFBFBD> i oczekiwa<EFBFBD> na potwierdzenie
|
||||||
if (mask & 0x0001) // b0 gdy SHP
|
if (mask & 0x0001) // b0 gdy SHP
|
||||||
PoKeys55[0]->Write(0x40, 23 - 1, (iBits & 0x0001) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 23 - 1, (iBits & 0x0001) ? 1 : 0);
|
||||||
if (mask & 0x0002) // b1 gdy zmieniony CA
|
if (mask & 0x0002) // b1 gdy zmieniony CA
|
||||||
PoKeys55[0]->Write(0x40, 24 - 1, (iBits & 0x0002) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 24 - 1, (iBits & 0x0002) ? 1 : 0);
|
||||||
if (mask & 0x0004) // b2 gdy jazda na oporach
|
if (mask & 0x0004) // b2 gdy jazda na oporach
|
||||||
PoKeys55[0]->Write(0x40, 32 - 1, (iBits & 0x0004) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 32 - 1, (iBits & 0x0004) ? 1 : 0);
|
||||||
if (mask & 0x0008) // b3 Lampka WS (wyłącznika szybkiego)
|
if (mask & 0x0008) // b3 Lampka WS (wy<EFBFBD><EFBFBD>cznika szybkiego)
|
||||||
PoKeys55[0]->Write(0x40, 25 - 1, (iBits & 0x0008) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 25 - 1, (iBits & 0x0008) ? 1 : 0);
|
||||||
if (mask & 0x0010) // b4 Lampka przekaźnika nadmiarowego silników trakcyjnych
|
if (mask & 0x0010) // b4 Lampka przeka<EFBFBD>nika nadmiarowego silnik<EFBFBD>w trakcyjnych
|
||||||
PoKeys55[0]->Write(0x40, 27 - 1, (iBits & 0x0010) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 27 - 1, (iBits & 0x0010) ? 1 : 0);
|
||||||
if (mask & 0x0020) // b5 Lampka styczników liniowych
|
if (mask & 0x0020) // b5 Lampka stycznik<EFBFBD>w liniowych
|
||||||
PoKeys55[0]->Write(0x40, 29 - 1, (iBits & 0x0020) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 29 - 1, (iBits & 0x0020) ? 1 : 0);
|
||||||
if (mask & 0x0040) // b6 Lampka poślizgu
|
if (mask & 0x0040) // b6 Lampka po<EFBFBD>lizgu
|
||||||
PoKeys55[0]->Write(0x40, 30 - 1, (iBits & 0x0040) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 30 - 1, (iBits & 0x0040) ? 1 : 0);
|
||||||
if (mask & 0x0080) // b7 Lampka "przetwornicy"
|
if (mask & 0x0080) // b7 Lampka "przetwornicy"
|
||||||
PoKeys55[0]->Write(0x40, 28 - 1, (iBits & 0x0080) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 28 - 1, (iBits & 0x0080) ? 1 : 0);
|
||||||
if (mask & 0x0100) // b8 Kontrolka przekaźnika nadmiarowego sprężarki
|
if (mask & 0x0100) // b8 Kontrolka przeka<EFBFBD>nika nadmiarowego spr<EFBFBD><EFBFBD>arki
|
||||||
PoKeys55[0]->Write(0x40, 33 - 1, (iBits & 0x0100) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 33 - 1, (iBits & 0x0100) ? 1 : 0);
|
||||||
if (mask & 0x0200) // b9 Kontrolka sygnalizacji wentylatorów i oporów
|
if (mask & 0x0200) // b9 Kontrolka sygnalizacji wentylator<EFBFBD>w i opor<EFBFBD>w
|
||||||
PoKeys55[0]->Write(0x40, 26 - 1, (iBits & 0x0200) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 26 - 1, (iBits & 0x0200) ? 1 : 0);
|
||||||
if (mask & 0x0400) // b10 Kontrolka wysokiego rozruchu
|
if (mask & 0x0400) // b10 Kontrolka wysokiego rozruchu
|
||||||
PoKeys55[0]->Write(0x40, 31 - 1, (iBits & 0x0400) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 31 - 1, (iBits & 0x0400) ? 1 : 0);
|
||||||
if (mask & 0x0800) // b11 Kontrolka ogrzewania pociągu
|
if (mask & 0x0800) // b11 Kontrolka ogrzewania poci<EFBFBD>gu
|
||||||
PoKeys55[0]->Write(0x40, 34 - 1, (iBits & 0x0800) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 34 - 1, (iBits & 0x0800) ? 1 : 0);
|
||||||
if (mask & 0x1000) // b12 Ciśnienie w cylindrach do odbijania w haslerze
|
if (mask & 0x1000) // b12 Ci<EFBFBD>nienie w cylindrach do odbijania w haslerze
|
||||||
PoKeys55[0]->Write(0x40, 52 - 1, (iBits & 0x1000) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 52 - 1, (iBits & 0x1000) ? 1 : 0);
|
||||||
if (mask & 0x2000) // b13 Prąd na silnikach do odbijania w haslerze
|
if (mask & 0x2000) // b13 Pr<EFBFBD>d na silnikach do odbijania w haslerze
|
||||||
PoKeys55[0]->Write(0x40, 53 - 1, (iBits & 0x2000) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 53 - 1, (iBits & 0x2000) ? 1 : 0);
|
||||||
if (mask & 0x4000) // b14 Brzęczyk SHP lub CA
|
if (mask & 0x4000) // b14 Brz<EFBFBD>czyk SHP lub CA
|
||||||
PoKeys55[0]->Write(0x40, 16 - 1, (iBits & 0x4000) ? 1 : 0);
|
PoKeys55[0]->Write(0x40, 16 - 1, (iBits & 0x4000) ? 1 : 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 5: // maciek001: MWD lampki i kontrolki
|
||||||
|
/* out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp
|
||||||
|
out4: stycz.liniowe, pezekaznikr??nicobwpomoc, nadmiarprzetw, roznicowy obw. g?,
|
||||||
|
nadmiarsilniki, wylszybki, zanikpr?duprzyje?dzienaoporach, nadmiarsprezarki
|
||||||
|
out5: HASLER */
|
||||||
|
if (mask & 0x0001)
|
||||||
|
if (iBits & 1)
|
||||||
|
{
|
||||||
|
MWD->WriteDataBuff[4] |= 1 << 7; // SHP HASLER te<74>
|
||||||
|
if (!MWD->bSHPstate)
|
||||||
|
{
|
||||||
|
MWD->bSHPstate = true;
|
||||||
|
MWD->bPrzejazdSHP = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
MWD->bPrzejazdSHP = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MWD->WriteDataBuff[4] &= ~(1 << 7);
|
||||||
|
MWD->bPrzejazdSHP = false;
|
||||||
|
MWD->bSHPstate = false;
|
||||||
|
}
|
||||||
|
if (mask & 0x0002)
|
||||||
|
if (iBits & 2)
|
||||||
|
MWD->WriteDataBuff[4] |= 1 << 6; // CA
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[4] &= ~(1 << 6);
|
||||||
|
if (mask & 0x0004)
|
||||||
|
if (iBits & 4)
|
||||||
|
MWD->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[4] &= ~(1 << 1);
|
||||||
|
if (mask & 0x0008)
|
||||||
|
if (iBits & 8)
|
||||||
|
MWD->WriteDataBuff[5] |= 1 << 5; // wy??cznik szybki
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[5] &= ~(1 << 5);
|
||||||
|
if (mask & 0x0010)
|
||||||
|
if (iBits & 0x10)
|
||||||
|
MWD->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silnik?w trakcyjnych
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[5] &= ~(1 << 4);
|
||||||
|
if (mask & 0x0020)
|
||||||
|
if (iBits & 0x20)
|
||||||
|
MWD->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[5] &= ~(1 << 0);
|
||||||
|
if (mask & 0x0040)
|
||||||
|
if (iBits & 0x40)
|
||||||
|
MWD->WriteDataBuff[4] |= 1 << 2; // po?lizg
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[4] &= ~(1 << 2);
|
||||||
|
if (mask & 0x0080)
|
||||||
|
if (iBits & 0x80)
|
||||||
|
MWD->WriteDataBuff[5] |= 1 << 2; // (nadmiarowy) przetwornicy? ++
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[5] &= ~(1 << 2);
|
||||||
|
if (mask & 0x0100)
|
||||||
|
if (iBits & 0x100)
|
||||||
|
MWD->WriteDataBuff[5] |= 1 << 7; // nadmiarowy spr??arki
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[5] &= ~(1 << 7);
|
||||||
|
if (mask & 0x0200)
|
||||||
|
if (iBits & 0x200)
|
||||||
|
MWD->WriteDataBuff[2] |= 1 << 1; // wentylatory i opory
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[2] &= ~(1 << 1);
|
||||||
|
if (mask & 0x0400)
|
||||||
|
if (iBits & 0x400)
|
||||||
|
MWD->WriteDataBuff[2] |= 1 << 2; // wysoki rozruch
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[2] &= ~(1 << 2);
|
||||||
|
if (mask & 0x0800)
|
||||||
|
if (iBits & 0x800)
|
||||||
|
MWD->WriteDataBuff[4] |= 1 << 0; // ogrzewanie poci?gu
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[4] &= ~(1 << 0);
|
||||||
|
if (mask & 0x1000)
|
||||||
|
if (iBits & 0x1000)
|
||||||
|
MWD->bHamowanie = true; // hasler: ci?nienie w hamulcach HASLER rysik 2
|
||||||
|
else
|
||||||
|
MWD->bHamowanie = false;
|
||||||
|
if (mask & 0x2000)
|
||||||
|
if (iBits & 0x2000)
|
||||||
|
MWD->WriteDataBuff[6] |=
|
||||||
|
1 << 4; // hasler: pr?d "na" silnikach HASLER rysik 3
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[6] &= ~(1 << 4);
|
||||||
|
if (mask & 0x4000)
|
||||||
|
if (iBits & 0x4000)
|
||||||
|
MWD->WriteDataBuff[6] |= 1 << 7; // brz?czyk SHP/CA
|
||||||
|
else
|
||||||
|
MWD->WriteDataBuff[6] &= ~(1 << 7);
|
||||||
|
// if(mask & 0x8000) if(iBits & 0x8000) MWD->WriteDataBuff[1] |= 1<<7; (puste)
|
||||||
|
// else MWD->WriteDataBuff[0] &= ~(1<<7);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool Console::Pressed(int x)
|
bool Console::Pressed(int x)
|
||||||
{ // na razie tak - czyta się tylko klawiatura
|
{ // na razie tak - czyta si<EFBFBD> tylko klawiatura
|
||||||
return Global::bActive && (GetKeyState(x) < 0);
|
return Global::bActive && (GetKeyState(x) < 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::ValueSet(int x, double y)
|
void Console::ValueSet(int x, double y)
|
||||||
{ // ustawienie wartości (y) na kanale analogowym (x)
|
{ // ustawienie warto<EFBFBD>ci (y) na kanale analogowym (x)
|
||||||
if (iMode == 4)
|
if (iMode == 4)
|
||||||
if (PoKeys55[0])
|
if (PoKeys55[0])
|
||||||
{
|
{
|
||||||
@@ -299,40 +414,104 @@ void Console::ValueSet(int x, double y)
|
|||||||
{
|
{
|
||||||
y = Global::CutValueToRange(0, y, Global::fCalibrateOutMax[x]);
|
y = Global::CutValueToRange(0, y, Global::fCalibrateOutMax[x]);
|
||||||
if (Global::iCalibrateOutDebugInfo == x)
|
if (Global::iCalibrateOutDebugInfo == x)
|
||||||
WriteLog(" cutted=" + std::to_string(y),false);
|
WriteLog(" cutted=" + std::to_string(y), false);
|
||||||
y = y / Global::fCalibrateOutMax[x]; // sprowadzenie do <0,1> jeśli podana maksymalna wartość
|
y = y / Global::fCalibrateOutMax[x]; // sprowadzenie do <0,1> je<EFBFBD>li podana
|
||||||
|
// maksymalna warto<74><6F>
|
||||||
if (Global::iCalibrateOutDebugInfo == x)
|
if (Global::iCalibrateOutDebugInfo == x)
|
||||||
WriteLog(" fraction=" + std::to_string(y),false);
|
WriteLog(" fraction=" + std::to_string(y), false);
|
||||||
}
|
}
|
||||||
double temp = (((((Global::fCalibrateOut[x][5] * y) + Global::fCalibrateOut[x][4]) * y +
|
double temp = (((((Global::fCalibrateOut[x][5] * y) + Global::fCalibrateOut[x][4]) * y +
|
||||||
Global::fCalibrateOut[x][3]) * y + Global::fCalibrateOut[x][2]) * y +
|
Global::fCalibrateOut[x][3]) *
|
||||||
Global::fCalibrateOut[x][1]) * y +
|
y +
|
||||||
|
Global::fCalibrateOut[x][2]) *
|
||||||
|
y +
|
||||||
|
Global::fCalibrateOut[x][1]) *
|
||||||
|
y +
|
||||||
Global::fCalibrateOut[x][0]; // zakres <0;1>
|
Global::fCalibrateOut[x][0]; // zakres <0;1>
|
||||||
if (Global::iCalibrateOutDebugInfo == x)
|
if (Global::iCalibrateOutDebugInfo == x)
|
||||||
WriteLog(" calibrated=" + std::to_string(temp));
|
WriteLog(" calibrated=" + std::to_string(temp));
|
||||||
PoKeys55[0]->PWM(x, temp);
|
PoKeys55[0]->PWM(x, temp);
|
||||||
}
|
}
|
||||||
|
if (iMode == 5 && MWD) // pwm-y i pr<70>dko<6B><6F>
|
||||||
|
{
|
||||||
|
unsigned int iliczba;
|
||||||
|
if (x == 0)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) +
|
||||||
|
0.5); // zbiornik g??wny
|
||||||
|
MWD->WriteDataBuff[12] = (unsigned char)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[11] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 1)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) +
|
||||||
|
0.5); // przew?d g??wny
|
||||||
|
MWD->WriteDataBuff[10] = (unsigned char)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[9] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 2)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) +
|
||||||
|
0.5); // cylinder hamulcowy
|
||||||
|
MWD->WriteDataBuff[8] = (unsigned char)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[7] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 3)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) +
|
||||||
|
0.5); // woltomierz WN
|
||||||
|
MWD->WriteDataBuff[14] = (unsigned char)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[13] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 4)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) +
|
||||||
|
0.5); // amp WN 1
|
||||||
|
MWD->WriteDataBuff[16] = (unsigned char)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[15] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 5)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) +
|
||||||
|
0.5); // amp WN 2
|
||||||
|
MWD->WriteDataBuff[18] = (unsigned char)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[17] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 6)
|
||||||
|
{
|
||||||
|
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) +
|
||||||
|
0.5); // amp WN 3
|
||||||
|
MWD->WriteDataBuff[20] = (unsigned int)(iliczba >> 8);
|
||||||
|
MWD->WriteDataBuff[19] = (unsigned char)iliczba;
|
||||||
|
}
|
||||||
|
else if (x == 7)
|
||||||
|
MWD->WriteDataBuff[0] = (unsigned char)floor(y); // pr<70>dko<6B><6F>
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void Console::Update()
|
void Console::Update()
|
||||||
{ // funkcja powinna być wywoływana regularnie, np. raz w każdej ramce ekranowej
|
{ // funkcja powinna by<EFBFBD> wywo<EFBFBD>ywana regularnie, np. raz w ka<EFBFBD>dej ramce ekranowej
|
||||||
if (iMode == 4)
|
if (iMode == 4)
|
||||||
if (PoKeys55[0])
|
if (PoKeys55[0])
|
||||||
if (PoKeys55[0]->Update((Global::iPause & 8) > 0))
|
if (PoKeys55[0]->Update((Global::iPause & 8) > 0))
|
||||||
{ // wykrycie przestawionych przełączników?
|
{ // wykrycie przestawionych prze<EFBFBD><EFBFBD>cznik<EFBFBD>w?
|
||||||
Global::iPause &= ~8;
|
Global::iPause &= ~8;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // błąd komunikacji - zapauzować symulację?
|
{ // b<EFBFBD><EFBFBD>d komunikacji - zapauzowa<EFBFBD> symulacj<EFBFBD>?
|
||||||
if (!(Global::iPause & 8)) // jeśli jeszcze nie oflagowana
|
if (!(Global::iPause & 8)) // je<EFBFBD>li jeszcze nie oflagowana
|
||||||
Global::iTextMode = VK_F1; // pokazanie czasu/pauzy
|
Global::iTextMode = VK_F1; // pokazanie czasu/pauzy
|
||||||
Global::iPause |= 8; // tak???
|
Global::iPause |= 8; // tak???
|
||||||
PoKeys55[0]->Connect(); // próba ponownego podłączenia
|
PoKeys55[0]->Connect(); // pr<EFBFBD>ba ponownego pod<EFBFBD><EFBFBD>czenia
|
||||||
|
}
|
||||||
|
if (iMode == 5) // Obs?uga MWD OK
|
||||||
|
{
|
||||||
|
MWD->Run();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
float Console::AnalogGet(int x)
|
float Console::AnalogGet(int x)
|
||||||
{ // pobranie wartości analogowej
|
{ // pobranie warto<EFBFBD>ci analogowej
|
||||||
if (iMode == 4)
|
if (iMode == 4)
|
||||||
if (PoKeys55[0])
|
if (PoKeys55[0])
|
||||||
return PoKeys55[0]->fAnalog[x];
|
return PoKeys55[0]->fAnalog[x];
|
||||||
@@ -340,19 +519,43 @@ float Console::AnalogGet(int x)
|
|||||||
};
|
};
|
||||||
|
|
||||||
float Console::AnalogCalibrateGet(int x)
|
float Console::AnalogCalibrateGet(int x)
|
||||||
{ // pobranie i kalibracja wartości analogowej, jeśli nie ma PoKeys zwraca NULL
|
{ // pobranie i kalibracja warto<EFBFBD>ci analogowej, je<EFBFBD>li nie ma PoKeys zwraca NULL
|
||||||
if (iMode == 4 && PoKeys55[0])
|
if (iMode == 4 && PoKeys55[0])
|
||||||
{
|
{
|
||||||
float b = PoKeys55[0]->fAnalog[x];
|
float b = PoKeys55[0]->fAnalog[x];
|
||||||
return (((((Global::fCalibrateIn[x][5] * b) + Global::fCalibrateIn[x][4]) * b +
|
return (((((Global::fCalibrateIn[x][5] * b) + Global::fCalibrateIn[x][4]) * b +
|
||||||
Global::fCalibrateIn[x][3]) * b + Global::fCalibrateIn[x][2]) * b +
|
Global::fCalibrateIn[x][3]) *
|
||||||
Global::fCalibrateIn[x][1]) *b + Global::fCalibrateIn[x][0];
|
b +
|
||||||
|
Global::fCalibrateIn[x][2]) *
|
||||||
|
b +
|
||||||
|
Global::fCalibrateIn[x][1]) *
|
||||||
|
b +
|
||||||
|
Global::fCalibrateIn[x][0];
|
||||||
}
|
}
|
||||||
return -1.0; //odcięcie
|
if (iMode == 5 && MWD) // maciek001: obs?uga hamulc?w (wej?? analogowych) OK
|
||||||
|
{
|
||||||
|
float b = MWD->fAnalog[x];
|
||||||
|
// b =
|
||||||
|
// b*(Global::fMWDAnalogCalib[x][0]-Global::fMWDAnalogCalib[x][1])/Global::fMWDAnalogCalib[x][3]+Global::fMWDAnalogCalib[x][1]/Global::fMWDAnalogCalib[x][3];
|
||||||
|
b = (b - Global::fMWDAnalogCalib[x][1]) /
|
||||||
|
(Global::fMWDAnalogCalib[x][1] - Global::fMWDAnalogCalib[x][0]);
|
||||||
|
switch (x)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return (b * 8 - 2);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
return (b * 10);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1.0; // odci<63>cie
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned char Console::DigitalGet(int x)
|
unsigned char Console::DigitalGet(int x)
|
||||||
{ // pobranie wartości cyfrowej
|
{ // pobranie warto<EFBFBD>ci cyfrowej
|
||||||
if (iMode == 4)
|
if (iMode == 4)
|
||||||
if (PoKeys55[0])
|
if (PoKeys55[0])
|
||||||
return PoKeys55[0]->iInputs[x];
|
return PoKeys55[0]->iInputs[x];
|
||||||
@@ -360,35 +563,35 @@ unsigned char Console::DigitalGet(int x)
|
|||||||
};
|
};
|
||||||
|
|
||||||
void Console::OnKeyDown(int k)
|
void Console::OnKeyDown(int k)
|
||||||
{ // naciśnięcie klawisza z powoduje wyłączenie, a
|
{ // naci<EFBFBD>ni<EFBFBD>cie klawisza z powoduje wy<EFBFBD><EFBFBD>czenie, a
|
||||||
if (k & 0x10000) // jeśli [Shift]
|
if (k & 0x10000) // je<EFBFBD>li [Shift]
|
||||||
{ // ustawienie bitu w tabeli przełączników bistabilnych
|
{ // ustawienie bitu w tabeli prze<EFBFBD><EFBFBD>cznik<EFBFBD>w bistabilnych
|
||||||
if (k & 0x20000) // jeśli [Ctrl], to zestaw dodatkowy
|
if (k & 0x20000) // je<EFBFBD>li [Ctrl], to zestaw dodatkowy
|
||||||
iSwitch[4 + (char(k) >> 5)] |= 1 << (k & 31); // załącz bistabliny dodatkowy
|
iSwitch[4 + (char(k) >> 5)] |= 1 << (k & 31); // za<EFBFBD><EFBFBD>cz bistabliny dodatkowy
|
||||||
else
|
else
|
||||||
{ // z [Shift] włączenie bitu bistabilnego i dodatkowego monostabilnego
|
{ // z [Shift] w<EFBFBD><EFBFBD>czenie bitu bistabilnego i dodatkowego monostabilnego
|
||||||
iSwitch[char(k) >> 5] |= 1 << (k & 31); // załącz bistabliny podstawowy
|
iSwitch[char(k) >> 5] |= 1 << (k & 31); // za<EFBFBD><EFBFBD>cz bistabliny podstawowy
|
||||||
iButton[4 + (char(k) >> 5)] |= (1 << (k & 31)); // załącz monostabilny dodatkowy
|
iButton[4 + (char(k) >> 5)] |= (1 << (k & 31)); // za<EFBFBD><EFBFBD>cz monostabilny dodatkowy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // zerowanie bitu w tabeli przełączników bistabilnych
|
{ // zerowanie bitu w tabeli prze<EFBFBD><EFBFBD>cznik<EFBFBD>w bistabilnych
|
||||||
if (k & 0x20000) // jeśli [Ctrl], to zestaw dodatkowy
|
if (k & 0x20000) // je<EFBFBD>li [Ctrl], to zestaw dodatkowy
|
||||||
iSwitch[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wyłącz bistabilny dodatkowy
|
iSwitch[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wy<EFBFBD><EFBFBD>cz bistabilny dodatkowy
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iSwitch[char(k) >> 5] &= ~(1 << (k & 31)); // wyłącz bistabilny podstawowy
|
iSwitch[char(k) >> 5] &= ~(1 << (k & 31)); // wy<EFBFBD><EFBFBD>cz bistabilny podstawowy
|
||||||
iButton[char(k) >> 5] |= 1 << (k & 31); // załącz monostabilny podstawowy
|
iButton[char(k) >> 5] |= 1 << (k & 31); // za<EFBFBD><EFBFBD>cz monostabilny podstawowy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
void Console::OnKeyUp(int k)
|
void Console::OnKeyUp(int k)
|
||||||
{ // puszczenie klawisza w zasadzie nie ma znaczenia dla iSwitch, ale zeruje iButton
|
{ // puszczenie klawisza w zasadzie nie ma znaczenia dla iSwitch, ale zeruje iButton
|
||||||
if ((k & 0x20000) == 0) // monostabilne tylko bez [Ctrl]
|
if ((k & 0x20000) == 0) // monostabilne tylko bez [Ctrl]
|
||||||
if (k & 0x10000) // jeśli [Shift]
|
if (k & 0x10000) // je<EFBFBD>li [Shift]
|
||||||
iButton[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wyłącz monostabilny dodatkowy
|
iButton[4 + (char(k) >> 5)] &= ~(1 << (k & 31)); // wy<EFBFBD><EFBFBD>cz monostabilny dodatkowy
|
||||||
else
|
else
|
||||||
iButton[char(k) >> 5] &= ~(1 << (k & 31)); // wyłącz monostabilny podstawowy
|
iButton[char(k) >> 5] &= ~(1 << (k & 31)); // wy<EFBFBD><EFBFBD>cz monostabilny podstawowy
|
||||||
};
|
};
|
||||||
int Console::KeyDownConvert(int k)
|
int Console::KeyDownConvert(int k)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
class TConsoleDevice; // urz¹dzenie pod³¹czalne za pomoc¹ DLL
|
class TConsoleDevice; // urz¹dzenie pod³¹czalne za pomoc¹ DLL
|
||||||
class TPoKeys55;
|
class TPoKeys55;
|
||||||
class TLPT;
|
class TLPT;
|
||||||
|
class MWDComm; // maciek001: dodana obsluga portu COM
|
||||||
|
|
||||||
// klasy konwersji znaków wprowadzanych z klawiatury
|
// klasy konwersji znaków wprowadzanych z klawiatury
|
||||||
class TKeyTrans
|
class TKeyTrans
|
||||||
@@ -31,6 +32,7 @@ class Console
|
|||||||
static int iBits; // podstawowy zestaw lampek
|
static int iBits; // podstawowy zestaw lampek
|
||||||
static TPoKeys55 *PoKeys55[2]; // mo¿e ich byæ kilka
|
static TPoKeys55 *PoKeys55[2]; // mo¿e ich byæ kilka
|
||||||
static TLPT *LPT;
|
static TLPT *LPT;
|
||||||
|
static MWDComm *MWD; // maciek001: na potrzeby MWD
|
||||||
static void BitsUpdate(int mask);
|
static void BitsUpdate(int mask);
|
||||||
// zmienne dla trybu "jednokabinowego", potrzebne do wspó³pracy z pulpitem (PoKeys)
|
// zmienne dla trybu "jednokabinowego", potrzebne do wspó³pracy z pulpitem (PoKeys)
|
||||||
// u¿ywaj¹c klawiatury, ka¿dy pojazd powinien mieæ w³asny stan prze³¹czników
|
// u¿ywaj¹c klawiatury, ka¿dy pojazd powinien mieæ w³asny stan prze³¹czników
|
||||||
|
|||||||
816
Console/MWD.cpp
Normal file
816
Console/MWD.cpp
Normal file
@@ -0,0 +1,816 @@
|
|||||||
|
/*
|
||||||
|
This Source Code Form is subject to the
|
||||||
|
terms of the Mozilla Public License, v.
|
||||||
|
2.0. If a copy of the MPL was not
|
||||||
|
distributed with this file, You can
|
||||||
|
obtain one at
|
||||||
|
http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Program obsługi portu COM i innych na potrzeby sterownika MWDevice
|
||||||
|
(oraz innych wykorzystujących komunikację przez port COM)
|
||||||
|
dla Symulatora Pojazdów Szynowych MaSzyna
|
||||||
|
author: Maciej Witek 2016
|
||||||
|
Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu!
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MWD.h"
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "Logs.h"
|
||||||
|
#include "World.h"
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/
|
||||||
|
#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/
|
||||||
|
|
||||||
|
HANDLE hComm;
|
||||||
|
|
||||||
|
MWDComm::MWDComm() // konstruktor
|
||||||
|
{
|
||||||
|
MWDTime = 0;
|
||||||
|
bSHPstate = false;
|
||||||
|
bPrzejazdSHP = false;
|
||||||
|
bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry!
|
||||||
|
bKabina2 = false;
|
||||||
|
bHamowanie = false;
|
||||||
|
bCzuwak = false;
|
||||||
|
|
||||||
|
bRysik1H = false;
|
||||||
|
bRysik1L = false;
|
||||||
|
bRysik2H = false;
|
||||||
|
bRysik2L = false;
|
||||||
|
|
||||||
|
bocznik = 0;
|
||||||
|
nastawnik = 0;
|
||||||
|
kierunek = 0;
|
||||||
|
bnkMask = 0;
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (i < BYTETOWRITE)
|
||||||
|
{
|
||||||
|
if (i < BYTETOREAD)
|
||||||
|
ReadDataBuff[i] = 0;
|
||||||
|
WriteDataBuff[i] = 0;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
while (i < 6)
|
||||||
|
{
|
||||||
|
lastStateData[i] = 0;
|
||||||
|
maskSwitch[i] = 0;
|
||||||
|
bitSwitch[i] = 0;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MWDComm::~MWDComm() // destruktor
|
||||||
|
{
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWDComm::Open() // otwieranie portu COM
|
||||||
|
{
|
||||||
|
LPCSTR portId = Global::sMWDPortId.c_str();
|
||||||
|
hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
|
||||||
|
FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
|
||||||
|
if (hComm == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
if (GetLastError() == ERROR_FILE_NOT_FOUND)
|
||||||
|
{
|
||||||
|
WriteLog("PortCOM ERROR: serial port does not exist"); // serial port does not exist.
|
||||||
|
// Inform user.
|
||||||
|
}
|
||||||
|
WriteLog("PortCOM ERROR! not open!");
|
||||||
|
// some other error occurred. Inform user.
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DCB CommDCB;
|
||||||
|
CommDCB.DCBlength = sizeof(DCB);
|
||||||
|
GetCommState(hComm, &CommDCB);
|
||||||
|
|
||||||
|
CommDCB.BaudRate = Global::iMWDBaudrate;
|
||||||
|
CommDCB.fBinary = TRUE;
|
||||||
|
CommDCB.fParity = FALSE;
|
||||||
|
CommDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
|
||||||
|
CommDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
|
||||||
|
CommDCB.fDtrControl = FALSE; // DTR flow control type
|
||||||
|
|
||||||
|
CommDCB.fDsrSensitivity = FALSE; // DSR sensitivity
|
||||||
|
CommDCB.fTXContinueOnXoff = FALSE; // XOFF continues Tx
|
||||||
|
CommDCB.fOutX = FALSE; // No XON/XOFF out flow control
|
||||||
|
CommDCB.fInX = FALSE; // No XON/XOFF in flow control
|
||||||
|
CommDCB.fErrorChar = FALSE; // Disable error replacement
|
||||||
|
CommDCB.fNull = FALSE; // Disable null stripping
|
||||||
|
CommDCB.fRtsControl = RTS_CONTROL_DISABLE;
|
||||||
|
|
||||||
|
CommDCB.fAbortOnError = FALSE;
|
||||||
|
|
||||||
|
CommDCB.ByteSize = 8;
|
||||||
|
CommDCB.Parity = NOPARITY;
|
||||||
|
CommDCB.StopBits = ONESTOPBIT;
|
||||||
|
|
||||||
|
// konfiguracja portu
|
||||||
|
if (!SetCommState(hComm, &CommDCB))
|
||||||
|
{
|
||||||
|
// dwError = GetLastError ();
|
||||||
|
WriteLog("Unable to configure the serial port!");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
WriteLog("PortCOM OPEN and CONFIG!");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWDComm::Close() // zamykanie portu COM
|
||||||
|
{
|
||||||
|
WriteLog("COM Port is closing...");
|
||||||
|
int i = 0;
|
||||||
|
while (i < BYTETOWRITE) // zerowanie danych...
|
||||||
|
{
|
||||||
|
WriteDataBuff[i] = 0;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
Sleep(100);
|
||||||
|
SendData(); // wysyłanie do pulpitu: zatrzymanie haslera i zgaszenie lampek
|
||||||
|
Sleep(700);
|
||||||
|
CloseHandle(hComm);
|
||||||
|
WriteLog("COM is close!");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
|
||||||
|
{
|
||||||
|
if (hComm > 0)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych
|
||||||
|
{
|
||||||
|
DWORD bytes_read;
|
||||||
|
ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL);
|
||||||
|
|
||||||
|
fAnalog[0] =
|
||||||
|
(float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) /
|
||||||
|
Global::fMWDAnalogCalib[0][3]; // 4095.0f; //max wartosc wynikająca z rozdzielczości
|
||||||
|
fAnalog[1] =
|
||||||
|
(float)((ReadDataBuff[11] << 8) + ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][3];
|
||||||
|
fAnalog[2] =
|
||||||
|
(float)((ReadDataBuff[13] << 8) + ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][3];
|
||||||
|
fAnalog[3] =
|
||||||
|
(float)((ReadDataBuff[15] << 8) + ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][3];
|
||||||
|
CheckData();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWDComm::SendData() // wysyłanie danych
|
||||||
|
{
|
||||||
|
DWORD bytes_write;
|
||||||
|
DWORD fdwEvtMask;
|
||||||
|
|
||||||
|
WriteFile(hComm, &WriteDataBuff[0], BYTETOWRITE, &bytes_write, NULL);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia
|
||||||
|
{
|
||||||
|
MWDTime++;
|
||||||
|
if (!(MWDTime % 5))
|
||||||
|
{
|
||||||
|
if (GetMWDState())
|
||||||
|
{
|
||||||
|
SendData();
|
||||||
|
if (Global::bMWDInputDataEnable)
|
||||||
|
ReadData();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WriteLog("Port COM: connection ERROR!");
|
||||||
|
// może spróbować się połączyć znowu?
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
MWDTime = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
while (i < 6)
|
||||||
|
{
|
||||||
|
maskData[i] = ReadDataBuff[i] ^ lastStateData[i];
|
||||||
|
lastStateData[i] = ReadDataBuff[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Rozpiska portów!
|
||||||
|
Port0: 0 NC odblok. przek. sprężarki i wentyl. oporów
|
||||||
|
1 M wyłącznik wył. szybkiego
|
||||||
|
2 Shift+M impuls załączający wył. szybki
|
||||||
|
3 N odblok. przekaźników nadmiarowych
|
||||||
|
i różnicowego obwodu głównego
|
||||||
|
4 NC rezerwa
|
||||||
|
5 Ctrl+N odblok. przek. nadmiarowych
|
||||||
|
przetwornicy, ogrzewania pociągu i różnicowych obw. pomocniczych
|
||||||
|
6 L wył. styczników liniowych
|
||||||
|
7 SPACE kasowanie czuwaka
|
||||||
|
|
||||||
|
Port1: 0 NC
|
||||||
|
1 (Shift) X przetwornica
|
||||||
|
2 (Shift) C sprężarka
|
||||||
|
3 S piasecznice
|
||||||
|
4 (Shift) H ogrzewanie składu
|
||||||
|
5 przel. hamowania Shift+B
|
||||||
|
pspbpwy Ctrl+B pospieszny B towarowy
|
||||||
|
6 przel. hamowania
|
||||||
|
7 (Shift) F rozruch w/n
|
||||||
|
|
||||||
|
Port2: 0 (Shift) P pantograf przedni
|
||||||
|
1 (Shift) O pantograf tylni
|
||||||
|
2 ENTER przyhamowanie przy poślizgu
|
||||||
|
3 () przyciemnienie świateł
|
||||||
|
4 () przyciemnienie świateł
|
||||||
|
5 NUM6 odluźniacz
|
||||||
|
6 a syrena lok W
|
||||||
|
7 A syrena lok N
|
||||||
|
|
||||||
|
Port3: 0 Shift+J bateria
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* po przełączeniu bistabilnego najpierw wciskamy klawisz i przy następnym
|
||||||
|
wejściu w pętlę MWD puszczamy bo inaczej nie działa
|
||||||
|
*/
|
||||||
|
|
||||||
|
// wciskanie przycisków klawiatury
|
||||||
|
/*PORT0*/
|
||||||
|
if (maskData[0] & 0x02 && lastStateData[0] & 0x02)
|
||||||
|
KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego
|
||||||
|
else
|
||||||
|
KeyBoard('M', 0); // monostabilny
|
||||||
|
if (maskData[0] & 0x04 && lastStateData[0] & 0x04)
|
||||||
|
{ // impuls załączający wyłącznik szybki
|
||||||
|
KeyBoard(0x10, 1); // monostabilny
|
||||||
|
KeyBoard('M', 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KeyBoard('M', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
if (maskData[0] & 0x08 && lastStateData[0] & 0x08)
|
||||||
|
KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych
|
||||||
|
else
|
||||||
|
KeyBoard('N', 0); // monostabilny
|
||||||
|
if (maskData[0] & 0x20 && lastStateData[0] & 0x20)
|
||||||
|
{ // odblok nadmiarowego przetwornicy, ogrzewania poc.
|
||||||
|
KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych
|
||||||
|
KeyBoard('N', 1); // monostabilny
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KeyBoard('N', 0);
|
||||||
|
KeyBoard(0x11, 0);
|
||||||
|
}
|
||||||
|
if (maskData[0] & 0x40 && lastStateData[0] & 0x40)
|
||||||
|
KeyBoard('L', 1); // wył. styczników liniowych
|
||||||
|
else
|
||||||
|
KeyBoard('L', 0); // monostabilny
|
||||||
|
if (maskData[0] & 0x80 && lastStateData[0] & 0x80)
|
||||||
|
KeyBoard(0x20, 1); // kasowanie czuwaka/SHP
|
||||||
|
else
|
||||||
|
KeyBoard(0x20, 0); // kasowanie czuwaka/SHP
|
||||||
|
|
||||||
|
/*PORT1*/
|
||||||
|
|
||||||
|
// puszczanie przycisku bistabilnego klawiatury
|
||||||
|
if (maskSwitch[1] & 0x02)
|
||||||
|
{
|
||||||
|
if (bitSwitch[1] & 0x02)
|
||||||
|
{
|
||||||
|
KeyBoard('X', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('X', 0);
|
||||||
|
maskSwitch[1] &= ~0x02;
|
||||||
|
}
|
||||||
|
if (maskSwitch[1] & 0x04)
|
||||||
|
{
|
||||||
|
if (bitSwitch[1] & 0x04)
|
||||||
|
{
|
||||||
|
KeyBoard('C', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('C', 0);
|
||||||
|
maskSwitch[1] &= ~0x04;
|
||||||
|
}
|
||||||
|
if (maskSwitch[1] & 0x10)
|
||||||
|
{
|
||||||
|
if (bitSwitch[1] & 0x10)
|
||||||
|
{
|
||||||
|
KeyBoard('H', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('H', 0);
|
||||||
|
maskSwitch[1] &= ~0x10;
|
||||||
|
}
|
||||||
|
if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40)
|
||||||
|
{
|
||||||
|
if (maskSwitch[1] & 0x20)
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
if (maskSwitch[1] & 0x40)
|
||||||
|
KeyBoard(0x11, 0);
|
||||||
|
KeyBoard('B', 0);
|
||||||
|
maskSwitch[1] &= ~0x60;
|
||||||
|
}
|
||||||
|
if (maskSwitch[1] & 0x80)
|
||||||
|
{
|
||||||
|
if (bitSwitch[1] & 0x80)
|
||||||
|
{
|
||||||
|
KeyBoard('F', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('F', 0);
|
||||||
|
maskSwitch[1] &= ~0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maskData[1] & 0x02 && lastStateData[1] & 0x02)
|
||||||
|
{ // przetwornica
|
||||||
|
KeyBoard(0x10, 1); // bistabilny
|
||||||
|
KeyBoard('X', 1);
|
||||||
|
maskSwitch[1] |= 0x02;
|
||||||
|
bitSwitch[1] |= 0x02;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[1] |= 0x02;
|
||||||
|
bitSwitch[1] &= ~0x02;
|
||||||
|
KeyBoard('X', 1);
|
||||||
|
}
|
||||||
|
if (maskData[1] & 0x04 && lastStateData[1] & 0x04)
|
||||||
|
{ // sprężarka
|
||||||
|
KeyBoard(0x10, 1); // bistabilny
|
||||||
|
KeyBoard('C', 1);
|
||||||
|
maskSwitch[1] |= 0x04;
|
||||||
|
bitSwitch[1] |= 0x04;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[1] |= 0x04;
|
||||||
|
bitSwitch[1] &= ~0x04;
|
||||||
|
KeyBoard('C', 1);
|
||||||
|
}
|
||||||
|
if (maskData[1] & 0x08 && lastStateData[1] & 0x08)
|
||||||
|
KeyBoard('S', 1); // piasecznica
|
||||||
|
else
|
||||||
|
KeyBoard('S', 0); // monostabilny
|
||||||
|
if (maskData[1] & 0x10 && lastStateData[1] & 0x10)
|
||||||
|
{ // ogrzewanie składu
|
||||||
|
KeyBoard(0x11, 1); // bistabilny
|
||||||
|
KeyBoard('H', 1);
|
||||||
|
maskSwitch[1] |= 0x10;
|
||||||
|
bitSwitch[1] |= 0x10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[1] |= 0x10;
|
||||||
|
bitSwitch[1] &= ~0x10;
|
||||||
|
KeyBoard('H', 1);
|
||||||
|
}
|
||||||
|
if (maskData[1] & 0x20 || maskData[1] & 0x40)
|
||||||
|
{ // przełącznik hamowania
|
||||||
|
if (lastStateData[1] & 0x20)
|
||||||
|
{ // Shift+B
|
||||||
|
KeyBoard(0x10, 1);
|
||||||
|
maskSwitch[1] |= 0x20;
|
||||||
|
}
|
||||||
|
else if (lastStateData[1] & 0x40)
|
||||||
|
{ // Ctrl+B
|
||||||
|
KeyBoard(0x11, 1);
|
||||||
|
maskSwitch[1] |= 0x40;
|
||||||
|
}
|
||||||
|
KeyBoard('B', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maskData[1] & 0x80 && lastStateData[1] & 0x80)
|
||||||
|
{ // rozruch wysoki/niski
|
||||||
|
KeyBoard(0x10, 1); // bistabilny
|
||||||
|
KeyBoard('F', 1);
|
||||||
|
maskSwitch[1] |= 0x80;
|
||||||
|
bitSwitch[1] |= 0x80;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[1] |= 0x80;
|
||||||
|
bitSwitch[1] &= ~0x80;
|
||||||
|
KeyBoard('F', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PORT2*/
|
||||||
|
|
||||||
|
if (maskSwitch[2] & 0x01)
|
||||||
|
{
|
||||||
|
if (bitSwitch[2] & 0x01)
|
||||||
|
{
|
||||||
|
KeyBoard('P', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('P', 0);
|
||||||
|
maskSwitch[2] &= ~0x01;
|
||||||
|
}
|
||||||
|
if (maskSwitch[2] & 0x02)
|
||||||
|
{
|
||||||
|
if (bitSwitch[2] & 0x02)
|
||||||
|
{
|
||||||
|
KeyBoard('O', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('O', 0);
|
||||||
|
maskSwitch[2] &= ~0x02;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maskData[2] & 0x01 && lastStateData[2] & 0x01)
|
||||||
|
{ // pantograf przedni
|
||||||
|
KeyBoard(0x10, 1); // bistabilny
|
||||||
|
KeyBoard('P', 1);
|
||||||
|
maskSwitch[2] |= 0x01;
|
||||||
|
bitSwitch[2] |= 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[2] |= 0x01;
|
||||||
|
bitSwitch[2] &= ~0x01;
|
||||||
|
KeyBoard('P', 1);
|
||||||
|
}
|
||||||
|
if (maskData[2] & 0x02 && lastStateData[2] & 0x02)
|
||||||
|
{ // pantograf tylni
|
||||||
|
KeyBoard(0x10, 1); // bistabilny
|
||||||
|
KeyBoard('O', 1);
|
||||||
|
maskSwitch[2] |= 0x02;
|
||||||
|
bitSwitch[2] |= 0x02;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[2] |= 0x02;
|
||||||
|
bitSwitch[2] &= ~0x02;
|
||||||
|
KeyBoard('O', 1);
|
||||||
|
}
|
||||||
|
if (maskData[2] & 0x04 && lastStateData[2] & 0x04)
|
||||||
|
{ // przyhamowanie przy poślizgu
|
||||||
|
KeyBoard(0x10, 1); // monostabilny
|
||||||
|
KeyBoard(0x0D, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
KeyBoard(0x0D, 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
/*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł
|
||||||
|
KeyBoard(' ',0); // bistabilny
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{
|
||||||
|
KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}
|
||||||
|
if(maskData[2] & 0x10 && lastStateData[2] & 0x10) { // przyciemnienie świateł
|
||||||
|
KeyBoard(' ',0); // bistabilny
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{
|
||||||
|
KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}*/
|
||||||
|
if (maskData[2] & 0x20 && lastStateData[2] & 0x20)
|
||||||
|
KeyBoard(0x66, 1); // odluźniacz
|
||||||
|
else
|
||||||
|
KeyBoard(0x66, 0); // monostabilny
|
||||||
|
if (maskData[2] & 0x40 && lastStateData[2] & 0x40)
|
||||||
|
{ // syrena wysoka
|
||||||
|
KeyBoard(0x10, 1); // monostabilny
|
||||||
|
KeyBoard('A', 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KeyBoard('A', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
if (maskData[2] & 0x80 && lastStateData[2] & 0x80)
|
||||||
|
KeyBoard('A', 1); // syrena niska
|
||||||
|
else
|
||||||
|
KeyBoard('A', 0); // monostabilny
|
||||||
|
|
||||||
|
/*PORT3*/
|
||||||
|
|
||||||
|
if (maskSwitch[3] & 0x01)
|
||||||
|
{
|
||||||
|
if (bitSwitch[3] & 0x01)
|
||||||
|
{
|
||||||
|
KeyBoard('J', 0);
|
||||||
|
KeyBoard(0x10, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KeyBoard('J', 0);
|
||||||
|
maskSwitch[3] &= ~0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maskData[3] & 0x01 && lastStateData[3] & 0x01)
|
||||||
|
{ // bateria
|
||||||
|
KeyBoard(0x10, 1); // bistabilny
|
||||||
|
KeyBoard('J', 1);
|
||||||
|
maskSwitch[3] |= 0x01;
|
||||||
|
bitSwitch[3] |= 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maskSwitch[3] |= 0x01;
|
||||||
|
bitSwitch[3] &= ~0x01;
|
||||||
|
KeyBoard('J', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
if(maskData[3] & 0x04 && lastStateData[1] & 0x04) { KeyBoard(0x10,1);
|
||||||
|
KeyBoard('C',1); //
|
||||||
|
KeyBoard('C',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}else{ KeyBoard('C',1); //
|
||||||
|
KeyBoard('C',0);
|
||||||
|
}
|
||||||
|
if(maskData[3] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
|
||||||
|
else KeyBoard('S',0);
|
||||||
|
|
||||||
|
|
||||||
|
if(maskData[3] & 0x10 && lastStateData[1] & 0x10) {
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard('H',1);
|
||||||
|
}else{ KeyBoard('H',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
}
|
||||||
|
if(maskData[3] & 0x20 && lastStateData[1] & 0x20) {
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{ KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
}
|
||||||
|
if(maskData[3] & 0x40 && lastStateData[1] & 0x40) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{ KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}
|
||||||
|
if(maskData[3] & 0x80 && lastStateData[1] & 0x80) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('F',1);
|
||||||
|
}else{ KeyBoard('F',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PORT4*/ /*
|
||||||
|
if(maskData[4] & 0x02 && lastStateData[1] & 0x02) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('X',1); //
|
||||||
|
KeyBoard('X',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}else{ KeyBoard('X',1); //
|
||||||
|
KeyBoard('X',0);
|
||||||
|
}
|
||||||
|
if(maskData[4] & 0x04 && lastStateData[1] & 0x04) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('C',1); //
|
||||||
|
KeyBoard('C',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}else{ KeyBoard('C',1); //
|
||||||
|
KeyBoard('C',0);
|
||||||
|
}
|
||||||
|
if(maskData[4] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
|
||||||
|
else KeyBoard('S',0);
|
||||||
|
|
||||||
|
|
||||||
|
if(maskData[4] & 0x10 && lastStateData[1] & 0x10) {
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard('H',1);
|
||||||
|
}else{ KeyBoard('H',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
}
|
||||||
|
if(maskData[4] & 0x20 && lastStateData[1] & 0x20) {
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{ KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
}
|
||||||
|
if(maskData[4] & 0x40 && lastStateData[1] & 0x40) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{ KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}
|
||||||
|
if(maskData[4] & 0x80 && lastStateData[1] & 0x80) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('F',1);
|
||||||
|
}else{ KeyBoard('F',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PORT5*/ /*
|
||||||
|
if(maskData[5] & 0x02 && lastStateData[1] & 0x02) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('X',1); //
|
||||||
|
KeyBoard('X',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}else{
|
||||||
|
KeyBoard('X',1); //
|
||||||
|
KeyBoard('X',0);
|
||||||
|
}
|
||||||
|
if(maskData[5] & 0x04 && lastStateData[1] & 0x04) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('C',1); //
|
||||||
|
KeyBoard('C',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}else{
|
||||||
|
KeyBoard('C',1); //
|
||||||
|
KeyBoard('C',0);
|
||||||
|
}
|
||||||
|
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
|
||||||
|
else
|
||||||
|
KeyBoard('S',0);
|
||||||
|
|
||||||
|
|
||||||
|
if(maskData[5] & 0x10 && lastStateData[1] & 0x10) {
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard('H',1);
|
||||||
|
}else{
|
||||||
|
KeyBoard('H',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
}
|
||||||
|
if(maskData[5] & 0x20 && lastStateData[1] & 0x20) {
|
||||||
|
KeyBoard(0x11,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{
|
||||||
|
KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x11,0);
|
||||||
|
}
|
||||||
|
if(maskData[5] & 0x40 && lastStateData[1] & 0x40) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard(' ',1);
|
||||||
|
}else{
|
||||||
|
KeyBoard(' ',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}
|
||||||
|
if(maskData[5] & 0x80 && lastStateData[1] & 0x80) {
|
||||||
|
KeyBoard(0x10,1);
|
||||||
|
KeyBoard('F',1);
|
||||||
|
}else{
|
||||||
|
KeyBoard('F',0);
|
||||||
|
KeyBoard(0x10,0);
|
||||||
|
}//*/
|
||||||
|
|
||||||
|
/* NASTAWNIK, BOCZNIK i KIERUNEK */
|
||||||
|
|
||||||
|
if (bnkMask & 1)
|
||||||
|
{ // puszczanie klawiszy
|
||||||
|
KeyBoard(0x6B, 0);
|
||||||
|
bnkMask &= ~1;
|
||||||
|
}
|
||||||
|
if (bnkMask & 2)
|
||||||
|
{
|
||||||
|
KeyBoard(0x6D, 0);
|
||||||
|
bnkMask &= ~2;
|
||||||
|
}
|
||||||
|
if (bnkMask & 4)
|
||||||
|
{
|
||||||
|
KeyBoard(0x6F, 0);
|
||||||
|
bnkMask &= ~4;
|
||||||
|
}
|
||||||
|
if (bnkMask & 8)
|
||||||
|
{
|
||||||
|
KeyBoard(0x6A, 0);
|
||||||
|
bnkMask &= ~8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nastawnik < ReadDataBuff[6])
|
||||||
|
{
|
||||||
|
bnkMask |= 1;
|
||||||
|
nastawnik++;
|
||||||
|
KeyBoard(0x6B, 1); // wciśnij + i dodaj 1 do nastawnika
|
||||||
|
}
|
||||||
|
if (nastawnik > ReadDataBuff[6])
|
||||||
|
{
|
||||||
|
bnkMask |= 2;
|
||||||
|
nastawnik--;
|
||||||
|
KeyBoard(0x6D, 1); // wciśnij - i odejmij 1 do nastawnika
|
||||||
|
}
|
||||||
|
if (bocznik < ReadDataBuff[7])
|
||||||
|
{
|
||||||
|
bnkMask |= 4;
|
||||||
|
bocznik++;
|
||||||
|
KeyBoard(0x6F, 1); // wciśnij / i dodaj 1 do bocznika
|
||||||
|
}
|
||||||
|
if (bocznik > ReadDataBuff[7])
|
||||||
|
{
|
||||||
|
bnkMask |= 8;
|
||||||
|
bocznik--;
|
||||||
|
KeyBoard(0x6A, 1); // wciśnij * i odejmij 1 do bocznika
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Obsługa HASLERA */
|
||||||
|
if (ReadDataBuff[0] & 0x80)
|
||||||
|
bCzuwak = true;
|
||||||
|
|
||||||
|
if (bKabina1)
|
||||||
|
{ // logika rysika 1
|
||||||
|
bRysik1H = true;
|
||||||
|
bRysik1L = false;
|
||||||
|
if (bPrzejazdSHP)
|
||||||
|
bRysik1H = false;
|
||||||
|
}
|
||||||
|
else if (bKabina2)
|
||||||
|
{
|
||||||
|
bRysik1L = true;
|
||||||
|
bRysik1H = false;
|
||||||
|
if (bPrzejazdSHP)
|
||||||
|
bRysik1L = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bRysik1H = false;
|
||||||
|
bRysik1L = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bHamowanie)
|
||||||
|
{ // logika rysika 2
|
||||||
|
bRysik2H = false;
|
||||||
|
bRysik2L = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (bCzuwak)
|
||||||
|
bRysik2H = true;
|
||||||
|
else
|
||||||
|
bRysik2H = false;
|
||||||
|
bRysik2L = false;
|
||||||
|
}
|
||||||
|
bCzuwak = false;
|
||||||
|
if (bRysik1H)
|
||||||
|
WriteDataBuff[6] |= 1 << 0;
|
||||||
|
else
|
||||||
|
WriteDataBuff[6] &= ~(1 << 0);
|
||||||
|
if (bRysik1L)
|
||||||
|
WriteDataBuff[6] |= 1 << 1;
|
||||||
|
else
|
||||||
|
WriteDataBuff[6] &= ~(1 << 1);
|
||||||
|
if (bRysik2H)
|
||||||
|
WriteDataBuff[6] |= 1 << 2;
|
||||||
|
else
|
||||||
|
WriteDataBuff[6] &= ~(1 << 2);
|
||||||
|
if (bRysik2L)
|
||||||
|
WriteDataBuff[6] |= 1 << 3;
|
||||||
|
else
|
||||||
|
WriteDataBuff[6] &= ~(1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
|
||||||
|
{
|
||||||
|
INPUT ip;
|
||||||
|
// Set up a generic keyboard event.
|
||||||
|
ip.type = INPUT_KEYBOARD;
|
||||||
|
ip.ki.wScan = 0; // hardware scan code for key
|
||||||
|
ip.ki.time = 0;
|
||||||
|
ip.ki.dwExtraInfo = 0;
|
||||||
|
|
||||||
|
ip.ki.wVk = key; // virtual-key code for the "a" key
|
||||||
|
|
||||||
|
if (s)
|
||||||
|
{ // Press the "A" key
|
||||||
|
ip.ki.dwFlags = 0; // 0 for key press
|
||||||
|
SendInput(1, &ip, sizeof(INPUT));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
|
||||||
|
SendInput(1, &ip, sizeof(INPUT));
|
||||||
|
}
|
||||||
|
|
||||||
|
// return 1;
|
||||||
|
}
|
||||||
107
Console/MWD.h
Normal file
107
Console/MWD.h
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
This Source Code Form is subject to the
|
||||||
|
terms of the Mozilla Public License, v.
|
||||||
|
2.0. If a copy of the MPL was not
|
||||||
|
distributed with this file, You can
|
||||||
|
obtain one at
|
||||||
|
http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Program obsługi portu COM i innych na potrzeby sterownika MWDevice
|
||||||
|
(oraz innych wykorzystujących komunikację przez port COM)
|
||||||
|
dla Symulatora Pojazdów Szynowych MaSzyna
|
||||||
|
author: Maciej Witek 2016
|
||||||
|
Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MWDH
|
||||||
|
#define MWDH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef unsigned char BYTE;
|
||||||
|
typedef unsigned long DWORD;
|
||||||
|
|
||||||
|
class MWDComm
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int MWDTime; //
|
||||||
|
char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6];
|
||||||
|
int bocznik, nastawnik, kierunek;
|
||||||
|
char bnkMask;
|
||||||
|
|
||||||
|
bool ReadData(); // BYTE *pReadDataBuff);
|
||||||
|
bool SendData(); // BYTE *pWriteDataBuff);
|
||||||
|
void CheckData(); // sprawdzanie zmian wejść i kontrola mazaków HASLERA
|
||||||
|
void KeyBoard(int key, bool s);
|
||||||
|
|
||||||
|
bool bRysik1H;
|
||||||
|
bool bRysik1L;
|
||||||
|
bool bRysik2H;
|
||||||
|
bool bRysik2L;
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool Open(); // Otwarcie portu
|
||||||
|
bool Close(); // Zamknięcie portu
|
||||||
|
bool Run(); // Obsługa portu
|
||||||
|
bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
|
||||||
|
|
||||||
|
// zmienne do rysików HASLERA
|
||||||
|
bool bSHPstate;
|
||||||
|
bool bPrzejazdSHP;
|
||||||
|
bool bKabina1;
|
||||||
|
bool bKabina2;
|
||||||
|
bool bHamowanie;
|
||||||
|
bool bCzuwak;
|
||||||
|
|
||||||
|
float fAnalog[4]; // trzymanie danych z wejść analogowych
|
||||||
|
|
||||||
|
BYTE ReadDataBuff[17]; // bufory danych
|
||||||
|
BYTE WriteDataBuff[31];
|
||||||
|
|
||||||
|
MWDComm(); // konstruktor
|
||||||
|
~MWDComm(); // destruktor
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
INFO - zmiany dokonane w innych plikach niezbędne do prawidłowego działania:
|
||||||
|
|
||||||
|
Console.cpp:
|
||||||
|
Console::AnalogCalibrateGet - obsługa kranów hamulców
|
||||||
|
Console::Update - wywoływanie obsługi MWD
|
||||||
|
Console::ValueSet - obsługa manometrów, mierników WN (PWM-y)
|
||||||
|
Console::BitsUpdate - ustawiania lampek
|
||||||
|
Console::Off - zamykanie portu COM
|
||||||
|
Console::On - otwieranie portu COM
|
||||||
|
Console::~Console - usuwanie MWD (jest też w Console OFF)
|
||||||
|
|
||||||
|
MWDComm * Console::MWD = NULL; - luzem, obiekt i wskaźnik(?)
|
||||||
|
dodatkowo zmieniłem int na long int dla BitSet i BitClear oraz iBits
|
||||||
|
|
||||||
|
Train.cpp:
|
||||||
|
if (Global::iFeedbackMode == 5) - pobieranie prędkości, manometrów i mierników WN
|
||||||
|
if (ggBrakeCtrl.SubModel) - możliwość sterowania hamulcem zespolonym
|
||||||
|
if (ggLocalBrake.SubModel) - możliwość sterowania hamulcem lokomotywy
|
||||||
|
|
||||||
|
Globals.h:
|
||||||
|
dodano zmienne dla MWD
|
||||||
|
Globals.cpp:
|
||||||
|
dodano inicjalizaję zmiennych i odczyt z ini ustawień
|
||||||
|
|
||||||
|
Wpisy do pliku eu07.ini
|
||||||
|
|
||||||
|
//maciek001 MWD
|
||||||
|
comportname COM3 // wybór portu COM
|
||||||
|
mwdbaudrate 500000
|
||||||
|
|
||||||
|
mwdbreakenable yes // czy załączyć sterowanie hamulcami? blokuje klawiature
|
||||||
|
mwdbreak 1 255 0 255 // hamulec zespolony
|
||||||
|
mwdbreak 2 255 0 255 // hamulec lokomotywy
|
||||||
|
|
||||||
|
mwdzbiornikglowny 0.82 255
|
||||||
|
mwdprzewodglowny 0.7 255
|
||||||
|
mwdcylinderhamulcowy 0.43 255
|
||||||
|
mwdwoltomierzwn 4000 255
|
||||||
|
mwdamperomierzwn 800 255
|
||||||
|
*/
|
||||||
29
Driver.h
29
Driver.h
@@ -10,10 +10,10 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
//#include <fstream>
|
//#include <fstream>
|
||||||
#include <string>
|
|
||||||
#include "Classes.h"
|
#include "Classes.h"
|
||||||
#include "dumb3d.h"
|
#include "dumb3d.h"
|
||||||
#include "mczapkie/mover.h"
|
#include "mczapkie/mover.h"
|
||||||
|
#include <string>
|
||||||
using namespace Math3D;
|
using namespace Math3D;
|
||||||
using namespace Mtable;
|
using namespace Mtable;
|
||||||
|
|
||||||
@@ -52,10 +52,12 @@ enum TMovementStatus
|
|||||||
moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju)
|
moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju)
|
||||||
moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL
|
moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL
|
||||||
moveDoorOpened = 0x20000, // drzwi zostały otwarte - doliczyć czas na zamknięcie
|
moveDoorOpened = 0x20000, // drzwi zostały otwarte - doliczyć czas na zamknięcie
|
||||||
movePushPull = 0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku
|
movePushPull =
|
||||||
|
0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku
|
||||||
moveSemaphorFound = 0x80000, // na drodze skanowania został znaleziony semafor
|
moveSemaphorFound = 0x80000, // na drodze skanowania został znaleziony semafor
|
||||||
moveSemaphorWasElapsed = 0x100000, // minięty został semafor
|
moveSemaphorWasElapsed = 0x100000, // minięty został semafor
|
||||||
moveTrainInsideStation = 0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem
|
moveTrainInsideStation =
|
||||||
|
0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem
|
||||||
moveSpeedLimitFound = 0x400000 // pociąg w ograniczeniu z podaną jego długością
|
moveSpeedLimitFound = 0x400000 // pociąg w ograniczeniu z podaną jego długością
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -126,9 +128,9 @@ class TSpeedPos
|
|||||||
public:
|
public:
|
||||||
double fDist; // aktualna odległość (ujemna gdy minięte)
|
double fDist; // aktualna odległość (ujemna gdy minięte)
|
||||||
double fVelNext; // prędkość obowiązująca od tego miejsca
|
double fVelNext; // prędkość obowiązująca od tego miejsca
|
||||||
double fSectionVelocityDist; //długość ograniczenia prędkości
|
double fSectionVelocityDist; // długość ograniczenia prędkości
|
||||||
// double fAcc;
|
// double fAcc;
|
||||||
int iFlags; //flagi typu wpisu do tabelki
|
int iFlags; // flagi typu wpisu do tabelki
|
||||||
// 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (może się zmienić),16-stan
|
// 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (może się zmienić),16-stan
|
||||||
// zwrotnicy,32-minięty,64=koniec,128=łuk
|
// zwrotnicy,32-minięty,64=koniec,128=łuk
|
||||||
// 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysłana komenda,0x2000=W5
|
// 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysłana komenda,0x2000=W5
|
||||||
@@ -219,8 +221,8 @@ class TController
|
|||||||
// migacz lub czeka na stan zwrotnicy
|
// migacz lub czeka na stan zwrotnicy
|
||||||
private:
|
private:
|
||||||
TDynamicObject *pVehicle; // pojazd w którym siedzi sterujący
|
TDynamicObject *pVehicle; // pojazd w którym siedzi sterujący
|
||||||
TDynamicObject *
|
TDynamicObject
|
||||||
pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
|
*pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
|
||||||
TMoverParameters *mvControlling; // jakim pojazdem steruje (może silnikowym w EZT)
|
TMoverParameters *mvControlling; // jakim pojazdem steruje (może silnikowym w EZT)
|
||||||
TMoverParameters *mvOccupied; // jakim pojazdem hamuje
|
TMoverParameters *mvOccupied; // jakim pojazdem hamuje
|
||||||
TTrainParameters *TrainParams; // rozkład jazdy zawsze jest, nawet jeśli pusty
|
TTrainParameters *TrainParams; // rozkład jazdy zawsze jest, nawet jeśli pusty
|
||||||
@@ -244,13 +246,14 @@ class TController
|
|||||||
double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości
|
double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości
|
||||||
public:
|
public:
|
||||||
double VelSignalLast; // prędkość zadana na ostatnim semaforze
|
double VelSignalLast; // prędkość zadana na ostatnim semaforze
|
||||||
|
double VelSignalNext; // prędkość zadana na następnym semaforze
|
||||||
double VelLimitLast; // prędkość zadana przez ograniczenie
|
double VelLimitLast; // prędkość zadana przez ograniczenie
|
||||||
double VelRoad; // aktualna prędkość drogowa (ze znaku W27)
|
double VelRoad; // aktualna prędkość drogowa (ze znaku W27)
|
||||||
// (PutValues albo komendą)
|
// (PutValues albo komendą)
|
||||||
public:
|
public:
|
||||||
double VelNext; // prędkość, jaka ma być po przejechaniu długości ProximityDist
|
double VelNext; // prędkość, jaka ma być po przejechaniu długości ProximityDist
|
||||||
private:
|
private:
|
||||||
double fProximityDist; //odleglosc podawana w SetProximityVelocity(); >0:przeliczać do
|
double fProximityDist; // odleglosc podawana w SetProximityVelocity(); >0:przeliczać do
|
||||||
// punktu, <0:podana wartość
|
// punktu, <0:podana wartość
|
||||||
double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora
|
double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora
|
||||||
public:
|
public:
|
||||||
@@ -311,7 +314,7 @@ class TController
|
|||||||
void ControllingSet(); // znajduje człon do sterowania
|
void ControllingSet(); // znajduje człon do sterowania
|
||||||
void AutoRewident(); // ustawia hamulce w składzie
|
void AutoRewident(); // ustawia hamulce w składzie
|
||||||
public:
|
public:
|
||||||
Mtable::TTrainParameters * Timetable()
|
Mtable::TTrainParameters *Timetable()
|
||||||
{
|
{
|
||||||
return TrainParams;
|
return TrainParams;
|
||||||
};
|
};
|
||||||
@@ -357,12 +360,12 @@ class TController
|
|||||||
double Distance(vector3 &p1, vector3 &n, vector3 &p2);
|
double Distance(vector3 &p1, vector3 &n, vector3 &p2);
|
||||||
|
|
||||||
private: // Ra: metody obsługujące skanowanie toru
|
private: // Ra: metody obsługujące skanowanie toru
|
||||||
TEvent * CheckTrackEvent(double fDirection, TTrack *Track);
|
TEvent *CheckTrackEvent(double fDirection, TTrack *Track);
|
||||||
bool TableCheckEvent(TEvent *e);
|
bool TableCheckEvent(TEvent *e);
|
||||||
bool TableAddNew();
|
bool TableAddNew();
|
||||||
bool TableNotFound(TEvent *e);
|
bool TableNotFound(TEvent *e);
|
||||||
void TableClear();
|
void TableClear();
|
||||||
TEvent * TableCheckTrackEvent(double fDirection, TTrack *Track);
|
TEvent *TableCheckTrackEvent(double fDirection, TTrack *Track);
|
||||||
void TableTraceRoute(double fDistance, TDynamicObject *pVehicle = NULL);
|
void TableTraceRoute(double fDistance, TDynamicObject *pVehicle = NULL);
|
||||||
void TableCheck(double fDistance);
|
void TableCheck(double fDistance);
|
||||||
TCommandType TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc);
|
TCommandType TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc);
|
||||||
@@ -370,8 +373,8 @@ class TController
|
|||||||
|
|
||||||
private: // Ra: stare funkcje skanujące, używane do szukania sygnalizatora z tyłu
|
private: // Ra: stare funkcje skanujące, używane do szukania sygnalizatora z tyłu
|
||||||
bool BackwardTrackBusy(TTrack *Track);
|
bool BackwardTrackBusy(TTrack *Track);
|
||||||
TEvent * CheckTrackEventBackward(double fDirection, TTrack *Track);
|
TEvent *CheckTrackEventBackward(double fDirection, TTrack *Track);
|
||||||
TTrack * BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
|
TTrack *BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
|
||||||
TEvent *&Event);
|
TEvent *&Event);
|
||||||
void SetProximityVelocity(double dist, double vel, const vector3 *pos);
|
void SetProximityVelocity(double dist, double vel, const vector3 *pos);
|
||||||
TCommandType BackwardScan();
|
TCommandType BackwardScan();
|
||||||
|
|||||||
70
EU07.cpp
70
EU07.cpp
@@ -70,8 +70,8 @@ int InitGL(GLvoid) // All Setup For OpenGL Goes Here
|
|||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_NORMAL_ARRAY);
|
glEnableClientState(GL_NORMAL_ARRAY);
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
Global::pWorld = &World; // Ra: wskaŸnik potrzebny do usuwania pojazdów
|
Global::pWorld = &World; // Ra: wska<EFBFBD>nik potrzebny do usuwania pojazd<EFBFBD>w
|
||||||
return World.Init(hWnd, hDC); // true jeœli wszystko pójdzie dobrze
|
return World.Init(hWnd, hDC); // true je<EFBFBD>li wszystko p<EFBFBD>jdzie dobrze
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -404,22 +404,22 @@ LRESULT CALLBACK WndProc(HWND hWnd, // handle for this window
|
|||||||
RECT rect;
|
RECT rect;
|
||||||
switch (uMsg) // check for windows messages
|
switch (uMsg) // check for windows messages
|
||||||
{
|
{
|
||||||
case WM_PASTE: //[Ctrl]+[V] potrzebujemy do innych celów
|
case WM_PASTE: //[Ctrl]+[V] potrzebujemy do innych cel<EFBFBD>w
|
||||||
return 0;
|
return 0;
|
||||||
case WM_COPYDATA: // obs³uga danych przes³anych przez program steruj¹cy
|
case WM_COPYDATA: // obs<EFBFBD>uga danych przes<EFBFBD>anych przez program steruj<EFBFBD>cy
|
||||||
pDane = (PCOPYDATASTRUCT)lParam;
|
pDane = (PCOPYDATASTRUCT)lParam;
|
||||||
if (pDane->dwData == 'EU07') // sygnatura danych
|
if (pDane->dwData == 'EU07') // sygnatura danych
|
||||||
World.OnCommandGet((DaneRozkaz *)(pDane->lpData));
|
World.OnCommandGet((DaneRozkaz *)(pDane->lpData));
|
||||||
break;
|
break;
|
||||||
case WM_ACTIVATE: // watch for window activate message
|
case WM_ACTIVATE: // watch for window activate message
|
||||||
// case WM_ACTIVATEAPP:
|
// case WM_ACTIVATEAPP:
|
||||||
{ // Ra: uzale¿nienie aktywnoœci od bycia na wierzchu
|
{ // Ra: uzale<EFBFBD>nienie aktywno<EFBFBD>ci od bycia na wierzchu
|
||||||
Global::bActive = (LOWORD(wParam) != WA_INACTIVE);
|
Global::bActive = (LOWORD(wParam) != WA_INACTIVE);
|
||||||
if (Global::bInactivePause) // jeœli ma byæ pauzowanie okna w tle
|
if (Global::bInactivePause) // je<EFBFBD>li ma by<EFBFBD> pauzowanie okna w tle
|
||||||
if (Global::bActive)
|
if (Global::bActive)
|
||||||
Global::iPause &= ~4; // odpauzowanie, gdy jest na pierwszym planie
|
Global::iPause &= ~4; // odpauzowanie, gdy jest na pierwszym planie
|
||||||
else
|
else
|
||||||
Global::iPause |= 4; // w³¹czenie pauzy, gdy nieaktywy
|
Global::iPause |= 4; // w<EFBFBD><EFBFBD>czenie pauzy, gdy nieaktywy
|
||||||
if (Global::bActive)
|
if (Global::bActive)
|
||||||
SetCursorPos(mx, my);
|
SetCursorPos(mx, my);
|
||||||
ShowCursor(!Global::bActive);
|
ShowCursor(!Global::bActive);
|
||||||
@@ -473,8 +473,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, // handle for this window
|
|||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
if (Global::bActive)
|
if (Global::bActive)
|
||||||
{
|
{
|
||||||
if (wParam != 17) // bo naciœniêcia [Ctrl] nie ma po co przekazywaæ
|
if (wParam != 17) // bo naci<EFBFBD>ni<EFBFBD>cia [Ctrl] nie ma po co przekazywa<EFBFBD>
|
||||||
if (wParam != 145) //[Scroll Lock] te¿ nie
|
if (wParam != 145) //[Scroll Lock] te<EFBFBD> nie
|
||||||
World.OnKeyDown(wParam);
|
World.OnKeyDown(wParam);
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
@@ -482,27 +482,27 @@ LRESULT CALLBACK WndProc(HWND hWnd, // handle for this window
|
|||||||
if (DebugModeFlag)
|
if (DebugModeFlag)
|
||||||
break;
|
break;
|
||||||
case 19: //[Pause]
|
case 19: //[Pause]
|
||||||
if (Global::iPause & 1) // jeœli pauza startowa
|
if (Global::iPause & 1) // je<EFBFBD>li pauza startowa
|
||||||
Global::iPause &= ~1; // odpauzowanie, gdy po wczytaniu mia³o nie startowaæ
|
Global::iPause &= ~1; // odpauzowanie, gdy po wczytaniu mia<EFBFBD>o nie startowa<EFBFBD>
|
||||||
else if (!(Global::iMultiplayer & 2)) // w multiplayerze pauza nie ma sensu
|
else if (!(Global::iMultiplayer & 2)) // w multiplayerze pauza nie ma sensu
|
||||||
if (!Console::Pressed(VK_CONTROL)) // z [Ctrl] to radiostop jest
|
if (!Console::Pressed(VK_CONTROL)) // z [Ctrl] to radiostop jest
|
||||||
// Ra: poni¿sze nie ma sensu, bo brak komunikacji natychmiast zapauzuje
|
// Ra: poni<EFBFBD>sze nie ma sensu, bo brak komunikacji natychmiast zapauzuje
|
||||||
// ponownie
|
// ponownie
|
||||||
// if (Global::iPause&8) //jeœli pauza zwi¹zana z brakiem komunikacji z
|
// if (Global::iPause&8) //je<EFBFBD>li pauza zwi<EFBFBD>zana z brakiem komunikacji z
|
||||||
// PoKeys
|
// PoKeys
|
||||||
// Global::iPause&=~10; //odpauzowanie pauzy PoKeys (chyba nic nie da) i
|
// Global::iPause&=~10; //odpauzowanie pauzy PoKeys (chyba nic nie da) i
|
||||||
// ewentualnie klawiszowej równie¿
|
// ewentualnie klawiszowej r<EFBFBD>wnie<EFBFBD>
|
||||||
// else
|
// else
|
||||||
Global::iPause ^= 2; // zmiana stanu zapauzowania
|
Global::iPause ^= 2; // zmiana stanu zapauzowania
|
||||||
if (Global::iPause) // jak pauza
|
if (Global::iPause) // jak pauza
|
||||||
Global::iTextMode = VK_F1; // to wyœwietliæ zegar i informacjê
|
Global::iTextMode = VK_F1; // to wy<EFBFBD>wietli<EFBFBD> zegar i informacj<EFBFBD>
|
||||||
break;
|
break;
|
||||||
case VK_F7:
|
case VK_F7:
|
||||||
if (DebugModeFlag)
|
if (DebugModeFlag)
|
||||||
{ // siatki wyœwietlane tyko w trybie testowym
|
{ // siatki wy<EFBFBD>wietlane tyko w trybie testowym
|
||||||
Global::bWireFrame = !Global::bWireFrame;
|
Global::bWireFrame = !Global::bWireFrame;
|
||||||
++Global::iReCompile; // odœwie¿yæ siatki
|
++Global::iReCompile; // od<EFBFBD>wie<EFBFBD>y<EFBFBD> siatki
|
||||||
// Ra: jeszcze usun¹æ siatki ze skompilowanych obiektów!
|
// Ra: jeszcze usun<EFBFBD><EFBFBD> siatki ze skompilowanych obiekt<EFBFBD>w!
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -579,9 +579,9 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
|||||||
MSG msg; // windows message structure
|
MSG msg; // windows message structure
|
||||||
BOOL done = FALSE; // bool variable to exit loop
|
BOOL done = FALSE; // bool variable to exit loop
|
||||||
fullscreen = true;
|
fullscreen = true;
|
||||||
DeleteFile("errors.txt"); // usuniêcie starego
|
DeleteFile("errors.txt"); // usuni<EFBFBD>cie starego
|
||||||
Global::LoadIniFile("eu07.ini"); // teraz dopiero mo¿na przejrzeæ plik z ustawieniami
|
Global::LoadIniFile("eu07.ini"); // teraz dopiero mo<EFBFBD>na przejrze<EFBFBD> plik z ustawieniami
|
||||||
Global::InitKeys("keys.ini"); // wczytanie mapowania klawiszy - jest na sta³e
|
Global::InitKeys("keys.ini"); // wczytanie mapowania klawiszy - jest na sta<EFBFBD>e
|
||||||
|
|
||||||
// hunter-271211: ukrywanie konsoli
|
// hunter-271211: ukrywanie konsoli
|
||||||
if (Global::iWriteLogEnabled & 2)
|
if (Global::iWriteLogEnabled & 2)
|
||||||
@@ -591,7 +591,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
|||||||
}
|
}
|
||||||
std::string commandline( lpCmdLine ); // parametry uruchomienia
|
std::string commandline( lpCmdLine ); // parametry uruchomienia
|
||||||
if( false == commandline.empty() )
|
if( false == commandline.empty() )
|
||||||
{ // analizowanie parametrów
|
{ // analizowanie parametr<EFBFBD>w
|
||||||
cParser parser( commandline );
|
cParser parser( commandline );
|
||||||
std::string token;
|
std::string token;
|
||||||
do {
|
do {
|
||||||
@@ -610,15 +610,15 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
|||||||
parser >> Global::asHumanCtrlVehicle;
|
parser >> Global::asHumanCtrlVehicle;
|
||||||
}
|
}
|
||||||
else if( token == "-modifytga" )
|
else if( token == "-modifytga" )
|
||||||
{ // wykonanie modyfikacji wszystkich plików TGA
|
{ // wykonanie modyfikacji wszystkich plik<EFBFBD>w TGA
|
||||||
Global::iModifyTGA = -1; // specjalny tryb wykonania totalnej modyfikacji
|
Global::iModifyTGA = -1; // specjalny tryb wykonania totalnej modyfikacji
|
||||||
}
|
}
|
||||||
else if( token == "-e3d" )
|
else if( token == "-e3d" )
|
||||||
{ // wygenerowanie wszystkich plików E3D
|
{ // wygenerowanie wszystkich plik<EFBFBD>w E3D
|
||||||
if (Global::iConvertModels > 0)
|
if (Global::iConvertModels > 0)
|
||||||
Global::iConvertModels = -Global::iConvertModels; // specjalny tryb
|
Global::iConvertModels = -Global::iConvertModels; // specjalny tryb
|
||||||
else
|
else
|
||||||
Global::iConvertModels = -7; // z optymalizacj¹, bananami i prawid³owym Opacity
|
Global::iConvertModels = -7; // z optymalizacj<EFBFBD>, bananami i prawid<EFBFBD>owym Opacity
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Error(
|
Error(
|
||||||
@@ -645,9 +645,9 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
|||||||
return 0; // quit if window was not created
|
return 0; // quit if window was not created
|
||||||
SetForegroundWindow(hWnd);
|
SetForegroundWindow(hWnd);
|
||||||
// McZapkie: proba przeplukania klawiatury
|
// McZapkie: proba przeplukania klawiatury
|
||||||
Console *pConsole = new Console(); // Ra: nie wiem, czy ma to sens, ale jakoœ zainicjowac trzeba
|
Console *pConsole = new Console(); // Ra: nie wiem, czy ma to sens, ale jako<EFBFBD> zainicjowac trzeba
|
||||||
while (Console::Pressed(VK_F10))
|
while (Console::Pressed(VK_F10))
|
||||||
Error("Keyboard buffer problem - press F10"); // na Windows 98 lubi siê to pojawiaæ
|
Error("Keyboard buffer problem - press F10"); // na Windows 98 lubi si<EFBFBD> to pojawia<EFBFBD>
|
||||||
int iOldSpeed, iOldDelay;
|
int iOldSpeed, iOldDelay;
|
||||||
SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &iOldSpeed, 0);
|
SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &iOldSpeed, 0);
|
||||||
SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &iOldDelay, 0);
|
SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &iOldDelay, 0);
|
||||||
@@ -657,20 +657,20 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
|||||||
WriteLog("No joystick");
|
WriteLog("No joystick");
|
||||||
if (Global::iModifyTGA < 0)
|
if (Global::iModifyTGA < 0)
|
||||||
{ // tylko modyfikacja TGA, bez uruchamiania symulacji
|
{ // tylko modyfikacja TGA, bez uruchamiania symulacji
|
||||||
Global::iMaxTextureSize = 64; //¿eby nie zamulaæ pamiêci
|
Global::iMaxTextureSize = 64; //<EFBFBD>eby nie zamula<EFBFBD> pami<EFBFBD>ci
|
||||||
World.ModifyTGA(); // rekurencyjne przegl¹danie katalogów
|
World.ModifyTGA(); // rekurencyjne przegl<EFBFBD>danie katalog<EFBFBD>w
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Global::iConvertModels < 0)
|
if (Global::iConvertModels < 0)
|
||||||
{
|
{
|
||||||
Global::iConvertModels = -Global::iConvertModels;
|
Global::iConvertModels = -Global::iConvertModels;
|
||||||
World.CreateE3D("models\\"); // rekurencyjne przegl¹danie katalogów
|
World.CreateE3D("models\\"); // rekurencyjne przegl<EFBFBD>danie katalog<EFBFBD>w
|
||||||
World.CreateE3D("dynamic\\", true);
|
World.CreateE3D("dynamic\\", true);
|
||||||
} // po zrobieniu E3D odpalamy normalnie sceneriê, by j¹ zobaczyæ
|
} // po zrobieniu E3D odpalamy normalnie sceneri<EFBFBD>, by j<EFBFBD> zobaczy<EFBFBD>
|
||||||
// else
|
// else
|
||||||
//{//g³ówna pêtla programu
|
//{//g<EFBFBD><EFBFBD>wna p<EFBFBD>tla programu
|
||||||
Console::On(); // w³¹czenie konsoli
|
Console::On(); // w<EFBFBD><EFBFBD>czenie konsoli
|
||||||
while (!done) // loop that runs while done=FALSE
|
while (!done) // loop that runs while done=FALSE
|
||||||
{
|
{
|
||||||
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) // is there a message waiting?
|
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) // is there a message waiting?
|
||||||
@@ -690,14 +690,14 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
|||||||
// draw the scene, watch for quit messages
|
// draw the scene, watch for quit messages
|
||||||
// DrawGLScene()
|
// DrawGLScene()
|
||||||
// if (!pause)
|
// if (!pause)
|
||||||
// if (Global::bInactivePause?Global::bActive:true) //tak nie, bo spada z góry
|
// if (Global::bInactivePause?Global::bActive:true) //tak nie, bo spada z g<EFBFBD>ry
|
||||||
if (World.Update()) // Was There A Quit Received?
|
if (World.Update()) // Was There A Quit Received?
|
||||||
SwapBuffers(hDC); // Swap Buffers (Double Buffering)
|
SwapBuffers(hDC); // Swap Buffers (Double Buffering)
|
||||||
else
|
else
|
||||||
done = true; //[F10] or DrawGLScene signalled a quit
|
done = true; //[F10] or DrawGLScene signalled a quit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console::Off(); // wy³¹czenie konsoli (komunikacji zwrotnej)
|
Console::Off(); // wy<EFBFBD><EFBFBD>czenie konsoli (komunikacji zwrotnej)
|
||||||
}
|
}
|
||||||
SystemParametersInfo(SPI_SETKEYBOARDSPEED, iOldSpeed, NULL, 0);
|
SystemParametersInfo(SPI_SETKEYBOARDSPEED, iOldSpeed, NULL, 0);
|
||||||
SystemParametersInfo(SPI_SETKEYBOARDDELAY, iOldDelay, NULL, 0);
|
SystemParametersInfo(SPI_SETKEYBOARDDELAY, iOldDelay, NULL, 0);
|
||||||
|
|||||||
1140
Globals.cpp
1140
Globals.cpp
File diff suppressed because it is too large
Load Diff
139
Globals.h
139
Globals.h
@@ -110,7 +110,7 @@ const int k_Battery = 72;
|
|||||||
const int k_WalkMode = 73;
|
const int k_WalkMode = 73;
|
||||||
const int MaxKeys = 74;
|
const int MaxKeys = 74;
|
||||||
|
|
||||||
// klasy dla wskaŸników globalnych
|
// klasy dla wska<EFBFBD>nik<EFBFBD>w globalnych
|
||||||
class TGround;
|
class TGround;
|
||||||
class TWorld;
|
class TWorld;
|
||||||
class TCamera;
|
class TCamera;
|
||||||
@@ -121,21 +121,21 @@ class TEvent;
|
|||||||
class TTextSound;
|
class TTextSound;
|
||||||
|
|
||||||
class TTranscript
|
class TTranscript
|
||||||
{ // klasa obs³uguj¹ca linijkê napisu do dŸwiêku
|
{ // klasa obs<EFBFBD>uguj<EFBFBD>ca linijk<EFBFBD> napisu do d<EFBFBD>wi<EFBFBD>ku
|
||||||
public:
|
public:
|
||||||
float fShow; // czas pokazania
|
float fShow; // czas pokazania
|
||||||
float fHide; // czas ukrycia/usuniêcia
|
float fHide; // czas ukrycia/usuni<EFBFBD>cia
|
||||||
std::string asText; // tekst gotowy do wyœwietlenia (usuniête znaczniki czasu)
|
std::string asText; // tekst gotowy do wy<EFBFBD>wietlenia (usuni<EFBFBD>te znaczniki czasu)
|
||||||
bool bItalic; // czy kursywa (dŸwiêk nieistotny dla prowadz¹cego)
|
bool bItalic; // czy kursywa (d<EFBFBD>wi<EFBFBD>k nieistotny dla prowadz<EFBFBD>cego)
|
||||||
int iNext; // nastêpna u¿ywana linijka, ¿eby nie przestawiaæ fizycznie tabeli
|
int iNext; // nast<EFBFBD>pna u<EFBFBD>ywana linijka, <EFBFBD>eby nie przestawia<EFBFBD> fizycznie tabeli
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_TRANSCRIPTS 30
|
#define MAX_TRANSCRIPTS 30
|
||||||
class TTranscripts
|
class TTranscripts
|
||||||
{ // klasa obs³uguj¹ca napisy do dŸwiêków
|
{ // klasa obs<EFBFBD>uguj<EFBFBD>ca napisy do d<EFBFBD>wi<EFBFBD>k<EFBFBD>w
|
||||||
TTranscript aLines[MAX_TRANSCRIPTS]; // pozycje na napisy do wyœwietlenia
|
TTranscript aLines[MAX_TRANSCRIPTS]; // pozycje na napisy do wy<EFBFBD>wietlenia
|
||||||
int iCount; // liczba zajêtych pozycji
|
int iCount; // liczba zaj<EFBFBD>tych pozycji
|
||||||
int iStart; // pierwsza istotna pozycja w tabeli, ¿eby sortowaæ przestawiaj¹c numerki
|
int iStart; // pierwsza istotna pozycja w tabeli, <EFBFBD>eby sortowa<EFBFBD> przestawiaj<EFBFBD>c numerki
|
||||||
float fRefreshTime;
|
float fRefreshTime;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -143,20 +143,20 @@ class TTranscripts
|
|||||||
~TTranscripts();
|
~TTranscripts();
|
||||||
void AddLine(char const *txt, float show, float hide, bool it);
|
void AddLine(char const *txt, float show, float hide, bool it);
|
||||||
void Add(char const *txt, float len,
|
void Add(char const *txt, float len,
|
||||||
bool backgorund = false); // dodanie tekstów, d³ugoœæ dŸwiêku, czy istotne
|
bool backgorund = false); // dodanie tekst<EFBFBD>w, d<EFBFBD>ugo<EFBFBD><EFBFBD> d<EFBFBD>wi<EFBFBD>ku, czy istotne
|
||||||
void Update(); // usuwanie niepotrzebnych (ok. 10 razy na sekundê)
|
void Update(); // usuwanie niepotrzebnych (ok. 10 razy na sekund<EFBFBD>)
|
||||||
};
|
};
|
||||||
|
|
||||||
class Global
|
class Global
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static GLuint iTextureId; // ostatnio u¿yta tekstura 2D
|
static GLuint iTextureId; // ostatnio u<EFBFBD>yta tekstura 2D
|
||||||
public:
|
public:
|
||||||
// double Global::tSinceStart;
|
// double Global::tSinceStart;
|
||||||
static int Keys[MaxKeys];
|
static int Keys[MaxKeys];
|
||||||
static Math3D::vector3 pCameraPosition; // pozycja kamery w œwiecie
|
static Math3D::vector3 pCameraPosition; // pozycja kamery w <EFBFBD>wiecie
|
||||||
static double
|
static double
|
||||||
pCameraRotation; // kierunek bezwzglêdny kamery w œwiecie: 0=pó³noc, 90°=zachód (-azymut)
|
pCameraRotation; // kierunek bezwzgl<EFBFBD>dny kamery w <EFBFBD>wiecie: 0=p<EFBFBD><EFBFBD>noc, 90<EFBFBD>=zach<EFBFBD>d (-azymut)
|
||||||
static double pCameraRotationDeg; // w stopniach, dla animacji billboard
|
static double pCameraRotationDeg; // w stopniach, dla animacji billboard
|
||||||
static Math3D::vector3 pFreeCameraInit[ 10 ]; // pozycje kamery
|
static Math3D::vector3 pFreeCameraInit[ 10 ]; // pozycje kamery
|
||||||
static Math3D::vector3 pFreeCameraInitAngle[ 10 ];
|
static Math3D::vector3 pFreeCameraInitAngle[ 10 ];
|
||||||
@@ -227,81 +227,81 @@ class Global
|
|||||||
static std::string asSky;
|
static std::string asSky;
|
||||||
static bool bnewAirCouplers;
|
static bool bnewAirCouplers;
|
||||||
// Ra: nowe zmienne globalne
|
// Ra: nowe zmienne globalne
|
||||||
static int iDefaultFiltering; // domyœlne rozmywanie tekstur TGA
|
static int iDefaultFiltering; // domy<EFBFBD>lne rozmywanie tekstur TGA
|
||||||
static int iBallastFiltering; // domyœlne rozmywanie tekstury podsypki
|
static int iBallastFiltering; // domy<EFBFBD>lne rozmywanie tekstury podsypki
|
||||||
static int iRailProFiltering; // domyœlne rozmywanie tekstury szyn
|
static int iRailProFiltering; // domy<EFBFBD>lne rozmywanie tekstury szyn
|
||||||
static int iDynamicFiltering; // domyœlne rozmywanie tekstur pojazdów
|
static int iDynamicFiltering; // domy<EFBFBD>lne rozmywanie tekstur pojazd<EFBFBD>w
|
||||||
static int iReCompile; // zwiêkszany, gdy trzeba odœwie¿yæ siatki
|
static int iReCompile; // zwi<EFBFBD>kszany, gdy trzeba od<EFBFBD>wie<EFBFBD>y<EFBFBD> siatki
|
||||||
static bool bUseVBO; // czy jest VBO w karcie graficznej
|
static bool bUseVBO; // czy jest VBO w karcie graficznej
|
||||||
static int iFeedbackMode; // tryb pracy informacji zwrotnej
|
static int iFeedbackMode; // tryb pracy informacji zwrotnej
|
||||||
static int iFeedbackPort; // dodatkowy adres dla informacji zwrotnych
|
static int iFeedbackPort; // dodatkowy adres dla informacji zwrotnych
|
||||||
static double fOpenGL; // wersja OpenGL - przyda siê
|
static double fOpenGL; // wersja OpenGL - przyda si<EFBFBD>
|
||||||
static bool bOpenGL_1_5; // czy s¹ dostêpne funkcje OpenGL 1.5
|
static bool bOpenGL_1_5; // czy s<EFBFBD> dost<EFBFBD>pne funkcje OpenGL 1.5
|
||||||
static double fLuminance; // jasnoœæ œwiat³a do automatycznego zapalania
|
static double fLuminance; // jasno<EFBFBD><EFBFBD> <20>wiat<EFBFBD>a do automatycznego zapalania
|
||||||
static int iMultiplayer; // blokada dzia³ania niektórych eventów na rzecz kominikacji
|
static int iMultiplayer; // blokada dzia<EFBFBD>ania niekt<EFBFBD>rych event<EFBFBD>w na rzecz kominikacji
|
||||||
static HWND hWnd; // uchwyt okna
|
static HWND hWnd; // uchwyt okna
|
||||||
static int iCameraLast;
|
static int iCameraLast;
|
||||||
static std::string asRelease; // numer
|
static std::string asRelease; // numer
|
||||||
static std::string asVersion; // z opisem
|
static std::string asVersion; // z opisem
|
||||||
static int
|
static int
|
||||||
iViewMode; // co aktualnie widaæ: 0-kabina, 1-latanie, 2-sprzêgi, 3-dokumenty, 4-obwody
|
iViewMode; // co aktualnie wida<EFBFBD>: 0-kabina, 1-latanie, 2-sprz<EFBFBD>gi, 3-dokumenty, 4-obwody
|
||||||
static GLint iMaxTextureSize; // maksymalny rozmiar tekstury
|
static GLint iMaxTextureSize; // maksymalny rozmiar tekstury
|
||||||
static int iTextMode; // tryb pracy wyœwietlacza tekstowego
|
static int iTextMode; // tryb pracy wy<EFBFBD>wietlacza tekstowego
|
||||||
static int iScreenMode[12]; // numer ekranu wyœwietlacza tekstowego
|
static int iScreenMode[12]; // numer ekranu wy<EFBFBD>wietlacza tekstowego
|
||||||
static bool bDoubleAmbient; // podwójna jasnoœæ ambient
|
static bool bDoubleAmbient; // podw<EFBFBD>jna jasno<EFBFBD><EFBFBD> ambient
|
||||||
static double fMoveLight; // numer dnia w roku albo -1
|
static double fMoveLight; // numer dnia w roku albo -1
|
||||||
static bool bSmoothTraction; // wyg³adzanie drutów
|
static bool bSmoothTraction; // wyg<EFBFBD>adzanie drut<EFBFBD>w
|
||||||
static double fSunDeclination; // deklinacja S³oñca
|
static double fSunDeclination; // deklinacja S<EFBFBD>o<EFBFBD>ca
|
||||||
static double fTimeSpeed; // przyspieszenie czasu, zmienna do testów
|
static double fTimeSpeed; // przyspieszenie czasu, zmienna do test<EFBFBD>w
|
||||||
static double fTimeAngleDeg; // godzina w postaci k¹ta
|
static double fTimeAngleDeg; // godzina w postaci k<EFBFBD>ta
|
||||||
static float fClockAngleDeg[6]; // k¹ty obrotu cylindrów dla zegara cyfrowego
|
static float fClockAngleDeg[6]; // k<EFBFBD>ty obrotu cylindr<EFBFBD>w dla zegara cyfrowego
|
||||||
static double fLatitudeDeg; // szerokoϾ geograficzna
|
static double fLatitudeDeg; // szeroko<EFBFBD><EFBFBD> geograficzna
|
||||||
static char *szTexturesTGA[4]; // lista tekstur od TGA
|
static char *szTexturesTGA[4]; // lista tekstur od TGA
|
||||||
static char *szTexturesDDS[4]; // lista tekstur od DDS
|
static char *szTexturesDDS[4]; // lista tekstur od DDS
|
||||||
static int iMultisampling; // tryb antyaliasingu: 0=brak,1=2px,2=4px,3=8px,4=16px
|
static int iMultisampling; // tryb antyaliasingu: 0=brak,1=2px,2=4px,3=8px,4=16px
|
||||||
static bool bGlutFont; // tekst generowany przez GLUT
|
static bool bGlutFont; // tekst generowany przez GLUT
|
||||||
static int iKeyLast; // ostatnio naciœniêty klawisz w celu logowania
|
static int iKeyLast; // ostatnio naci<EFBFBD>ni<EFBFBD>ty klawisz w celu logowania
|
||||||
static int iPause; // globalna pauza ruchu: b0=start,b1=klawisz,b2=t³o,b3=lagi,b4=wczytywanie
|
static int iPause; // globalna pauza ruchu: b0=start,b1=klawisz,b2=t<EFBFBD>o,b3=lagi,b4=wczytywanie
|
||||||
static bool bActive; // czy jest aktywnym oknem
|
static bool bActive; // czy jest aktywnym oknem
|
||||||
static void BindTexture(GLuint t);
|
static void BindTexture(GLuint t);
|
||||||
static int iConvertModels; // tworzenie plików binarnych
|
static int iConvertModels; // tworzenie plik<EFBFBD>w binarnych
|
||||||
static int iErorrCounter; // licznik sprawdzañ do œledzenia b³êdów OpenGL
|
static int iErorrCounter; // licznik sprawdza<EFBFBD> do <EFBFBD>ledzenia b<EFBFBD><EFBFBD>d<EFBFBD>w OpenGL
|
||||||
static bool bInactivePause; // automatyczna pauza, gdy okno nieaktywne
|
static bool bInactivePause; // automatyczna pauza, gdy okno nieaktywne
|
||||||
static int iTextures; // licznik u¿ytych tekstur
|
static int iTextures; // licznik u<EFBFBD>ytych tekstur
|
||||||
static int iSlowMotionMask; // maska wy³¹czanych w³aœciwoœci
|
static int iSlowMotionMask; // maska wy<EFBFBD><EFBFBD>czanych w<EFBFBD>a<EFBFBD>ciwo<EFBFBD>ci
|
||||||
static int iModifyTGA; // czy korygowaæ pliki TGA dla szybszego wczytywania
|
static int iModifyTGA; // czy korygowa<EFBFBD> pliki TGA dla szybszego wczytywania
|
||||||
static bool bHideConsole; // hunter-271211: ukrywanie konsoli
|
static bool bHideConsole; // hunter-271211: ukrywanie konsoli
|
||||||
static bool bOldSmudge; // U¿ywanie starej smugi
|
static bool bOldSmudge; // U<EFBFBD>ywanie starej smugi
|
||||||
|
|
||||||
static TWorld *pWorld; // wskaŸnik na œwiat do usuwania pojazdów
|
static TWorld *pWorld; // wska<EFBFBD>nik na <EFBFBD>wiat do usuwania pojazd<EFBFBD>w
|
||||||
static TAnimModel *pTerrainCompact; // obiekt terenu do ewentualnego zapisania w pliku
|
static TAnimModel *pTerrainCompact; // obiekt terenu do ewentualnego zapisania w pliku
|
||||||
static std::string asTerrainModel; // nazwa obiektu terenu do zapisania w pliku
|
static std::string asTerrainModel; // nazwa obiektu terenu do zapisania w pliku
|
||||||
static bool bRollFix; // czy wykonaæ przeliczanie przechy³ki
|
static bool bRollFix; // czy wykona<EFBFBD> przeliczanie przechy<EFBFBD>ki
|
||||||
static cParser *pParser;
|
static cParser *pParser;
|
||||||
static int iSegmentsRendered; // iloœæ segmentów do regulacji wydajnoœci
|
static int iSegmentsRendered; // ilo<EFBFBD><EFBFBD> segment<EFBFBD>w do regulacji wydajno<EFBFBD>ci
|
||||||
static double fFpsAverage; // oczekiwana wartosæ FPS
|
static double fFpsAverage; // oczekiwana wartos<EFBFBD> FPS
|
||||||
static double fFpsDeviation; // odchylenie standardowe FPS
|
static double fFpsDeviation; // odchylenie standardowe FPS
|
||||||
static double fFpsMin; // dolna granica FPS, przy której promieñ scenerii bêdzie zmniejszany
|
static double fFpsMin; // dolna granica FPS, przy kt<EFBFBD>rej promie<EFBFBD> scenerii b<EFBFBD>dzie zmniejszany
|
||||||
static double fFpsMax; // górna granica FPS, przy której promieñ scenerii bêdzie zwiêkszany
|
static double fFpsMax; // g<EFBFBD>rna granica FPS, przy kt<EFBFBD>rej promie<EFBFBD> scenerii b<EFBFBD>dzie zwi<EFBFBD>kszany
|
||||||
static double fFpsRadiusMax; // maksymalny promieñ renderowania
|
static double fFpsRadiusMax; // maksymalny promie<EFBFBD> renderowania
|
||||||
static int iFpsRadiusMax; // maksymalny promieñ renderowania w rozmiarze tabeli sektorów
|
static int iFpsRadiusMax; // maksymalny promie<EFBFBD> renderowania w rozmiarze tabeli sektor<EFBFBD>w
|
||||||
static double fRadiusFactor; // wspó³czynnik zmiany promienia
|
static double fRadiusFactor; // wsp<EFBFBD><EFBFBD>czynnik zmiany promienia
|
||||||
static TCamera *pCamera; // parametry kamery
|
static TCamera *pCamera; // parametry kamery
|
||||||
static TDynamicObject *pUserDynamic; // pojazd u¿ytkownika, renderowany bez trzêsienia
|
static TDynamicObject *pUserDynamic; // pojazd u<EFBFBD>ytkownika, renderowany bez trz<EFBFBD>sienia
|
||||||
static double fCalibrateIn[6][6]; // parametry kalibracyjne wejϾ z pulpitu
|
static double fCalibrateIn[6][6]; // parametry kalibracyjne wej<EFBFBD><EFBFBD> z pulpitu
|
||||||
static double fCalibrateOut[7][6]; // parametry kalibracyjne wyjϾ dla pulpitu
|
static double fCalibrateOut[7][6]; // parametry kalibracyjne wyj<EFBFBD><EFBFBD> dla pulpitu
|
||||||
static double fCalibrateOutMax[7]; // wartoœci maksymalne wyjœæ dla pulpitu
|
static double fCalibrateOutMax[7]; // warto<EFBFBD>ci maksymalne wyj<EFBFBD><EFBFBD> dla pulpitu
|
||||||
static int iCalibrateOutDebugInfo; // numer wyjœcia kalibrowanego dla którego wyœwietlaæ
|
static int iCalibrateOutDebugInfo; // numer wyj<EFBFBD>cia kalibrowanego dla kt<EFBFBD>rego wy<EFBFBD>wietla<EFBFBD>
|
||||||
// informacje podczas kalibracji
|
// informacje podczas kalibracji
|
||||||
static double fBrakeStep; // krok zmiany hamulca dla klawiszy [Num3] i [Num9]
|
static double fBrakeStep; // krok zmiany hamulca dla klawiszy [Num3] i [Num9]
|
||||||
static bool bJoinEvents; // czy grupowaæ eventy o tych samych nazwach
|
static bool bJoinEvents; // czy grupowa<EFBFBD> eventy o tych samych nazwach
|
||||||
static bool bSmudge; // czy wyœwietlaæ smugê, a pojazd u¿ytkownika na koñcu
|
static bool bSmudge; // czy wy<EFBFBD>wietla<EFBFBD> smug<EFBFBD>, a pojazd u<EFBFBD>ytkownika na ko<EFBFBD>cu
|
||||||
static std::string asTranscript[5]; // napisy na ekranie (widoczne)
|
static std::string asTranscript[5]; // napisy na ekranie (widoczne)
|
||||||
static TTranscripts tranTexts; // obiekt obs³uguj¹cy stenogramy dŸwiêków na ekranie
|
static TTranscripts tranTexts; // obiekt obs<EFBFBD>uguj<EFBFBD>cy stenogramy d<EFBFBD>wi<EFBFBD>k<EFBFBD>w na ekranie
|
||||||
static std::string asLang; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47
|
static std::string asLang; // domy<EFBFBD>lny j<EFBFBD>zyk - http://tools.ietf.org/html/bcp47
|
||||||
static int iHiddenEvents; // czy ³¹czyæ eventy z torami poprzez nazwê toru
|
static int iHiddenEvents; // czy <EFBFBD><EFBFBD>czy<EFBFBD> eventy z torami poprzez nazw<EFBFBD> toru
|
||||||
static TTextSound *tsRadioBusy[10]; // zajêtoœæ kana³ów radiowych (wskaŸnik na odgrywany dŸwiêk)
|
static TTextSound *tsRadioBusy[10]; // zaj<EFBFBD>to<EFBFBD><EFBFBD> kana<EFBFBD><EFBFBD>w radiowych (wska<EFBFBD>nik na odgrywany d<EFBFBD>wi<EFBFBD>k)
|
||||||
static int iPoKeysPWM[7]; // numery wejϾ dla PWM
|
static int iPoKeysPWM[7]; // numery wej<EFBFBD><EFBFBD> dla PWM
|
||||||
|
|
||||||
// metody
|
// metody
|
||||||
static void TrainDelete(TDynamicObject *d);
|
static void TrainDelete(TDynamicObject *d);
|
||||||
@@ -314,5 +314,18 @@ class Global
|
|||||||
static std::string Bezogonkow(std::string str, bool _ = false);
|
static std::string Bezogonkow(std::string str, bool _ = false);
|
||||||
static double Min0RSpeed(double vel1, double vel2);
|
static double Min0RSpeed(double vel1, double vel2);
|
||||||
static double CutValueToRange(double min, double value, double max);
|
static double CutValueToRange(double min, double value, double max);
|
||||||
|
|
||||||
|
// maciek001: zmienne dla MWD
|
||||||
|
static bool bMWDdebugEnable;
|
||||||
|
static unsigned int iMWDBaudrate;
|
||||||
|
static std::string sMWDPortId;
|
||||||
|
static bool bMWDBreakEnable;
|
||||||
|
static bool bMWDInputDataEnable;
|
||||||
|
static double fMWDAnalogCalib[4][3];
|
||||||
|
static double fMWDzg[2];
|
||||||
|
static double fMWDpg[2];
|
||||||
|
static double fMWDph[2];
|
||||||
|
static double fMWDvolt[2];
|
||||||
|
static double fMWDamp[2];
|
||||||
};
|
};
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -4110,7 +4110,7 @@ double TMoverParameters::TractionForce(double dt)
|
|||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
if (ActiveDir != 0)
|
if (ActiveDir != 0 && RList[MainCtrlActualPos].R > RVentCutOff)
|
||||||
RventRot += (RVentnmax - RventRot) * RVentSpeed * dt;
|
RventRot += (RVentnmax - RventRot) * RVentSpeed * dt;
|
||||||
else
|
else
|
||||||
RventRot *= (1.0 - RVentSpeed * dt);
|
RventRot *= (1.0 - RVentSpeed * dt);
|
||||||
|
|||||||
@@ -4085,7 +4085,7 @@ begin
|
|||||||
if (EngineType=ElectricSeriesMotor) then
|
if (EngineType=ElectricSeriesMotor) then
|
||||||
begin
|
begin
|
||||||
case RVentType of {wentylatory rozruchowe}
|
case RVentType of {wentylatory rozruchowe}
|
||||||
1: if ActiveDir<>0 then
|
1: if (ActiveDir<>0) and (RList[MainCtrlActualPos].R>RVentCutOff) then
|
||||||
RventRot:=RventRot+(RVentnmax-RventRot)*RVentSpeed*dt
|
RventRot:=RventRot+(RVentnmax-RventRot)*RVentSpeed*dt
|
||||||
else
|
else
|
||||||
RventRot:=RventRot*(1-RVentSpeed*dt);
|
RventRot:=RventRot*(1-RVentSpeed*dt);
|
||||||
|
|||||||
64
Train.h
64
Train.h
@@ -12,18 +12,18 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
|
|
||||||
//#include "Track.h"
|
//#include "Track.h"
|
||||||
//#include "TrkFoll.h"
|
//#include "TrkFoll.h"
|
||||||
#include "Model3d.h"
|
|
||||||
#include "Spring.h"
|
|
||||||
#include "Gauge.h"
|
|
||||||
#include "Button.h"
|
#include "Button.h"
|
||||||
#include "DynObj.h"
|
#include "DynObj.h"
|
||||||
|
#include "Gauge.h"
|
||||||
|
#include "Model3d.h"
|
||||||
|
#include "Spring.h"
|
||||||
#include "mtable.h"
|
#include "mtable.h"
|
||||||
|
|
||||||
#include "Sound.h"
|
|
||||||
#include "AdvSound.h"
|
#include "AdvSound.h"
|
||||||
#include "RealSound.h"
|
|
||||||
#include "FadeSound.h"
|
#include "FadeSound.h"
|
||||||
#include "PyInt.h"
|
#include "PyInt.h"
|
||||||
|
#include "RealSound.h"
|
||||||
|
#include "Sound.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
// typedef enum {st_Off, st_Starting, st_On, st_ShuttingDown} T4State;
|
// typedef enum {st_Off, st_Starting, st_On, st_ShuttingDown} T4State;
|
||||||
@@ -63,8 +63,8 @@ class TCab
|
|||||||
TButton *btList; // Ra 2014-08: lista animacji dwustanowych (lampek) w kabinie
|
TButton *btList; // Ra 2014-08: lista animacji dwustanowych (lampek) w kabinie
|
||||||
int iButtonsMax, iButtons; // ile miejsca w tablicy i ile jest w u篡ciu
|
int iButtonsMax, iButtons; // ile miejsca w tablicy i ile jest w u篡ciu
|
||||||
public:
|
public:
|
||||||
TGauge * Gauge(int n = -1); // pobranie adresu obiektu
|
TGauge *Gauge(int n = -1); // pobranie adresu obiektu
|
||||||
TButton * Button(int n = -1); // pobranie adresu obiektu
|
TButton *Button(int n = -1); // pobranie adresu obiektu
|
||||||
void Update();
|
void Update();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -102,16 +102,15 @@ class TTrain
|
|||||||
bool LoadMMediaFile(std::string const &asFileName);
|
bool LoadMMediaFile(std::string const &asFileName);
|
||||||
PyObject *GetTrainState();
|
PyObject *GetTrainState();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// clears state of all cabin controls
|
// clears state of all cabin controls
|
||||||
void
|
void clear_cab_controls();
|
||||||
clear_cab_controls();
|
// initializes a gauge matching provided label. returns: true if the label was found, false
|
||||||
// initializes a gauge matching provided label. returns: true if the label was found, false otherwise
|
// otherwise
|
||||||
bool
|
bool initialize_gauge(cParser &Parser, std::string const &Label, int const Cabindex);
|
||||||
initialize_gauge( cParser &Parser, std::string const &Label, int const Cabindex );
|
// initializes a button matching provided label. returns: true if the label was found, false
|
||||||
// initializes a button matching provided label. returns: true if the label was found, false otherwise
|
// otherwise
|
||||||
bool
|
bool initialize_button(cParser &Parser, std::string const &Label, int const Cabindex);
|
||||||
initialize_button( cParser &Parser, std::string const &Label, int const Cabindex );
|
|
||||||
|
|
||||||
private: //瞠by go nic z zewn靖rz nie przestawia這
|
private: //瞠by go nic z zewn靖rz nie przestawia這
|
||||||
TDynamicObject *DynamicObject; // przestawia zmiana pojazdu [F5]
|
TDynamicObject *DynamicObject; // przestawia zmiana pojazdu [F5]
|
||||||
@@ -163,7 +162,7 @@ private:
|
|||||||
TGauge ggMainButton; // EZT
|
TGauge ggMainButton; // EZT
|
||||||
TGauge ggSecurityResetButton;
|
TGauge ggSecurityResetButton;
|
||||||
TGauge ggReleaserButton;
|
TGauge ggReleaserButton;
|
||||||
TGauge ggSandButton; //guzik piasecznicy
|
TGauge ggSandButton; // guzik piasecznicy
|
||||||
TGauge ggAntiSlipButton;
|
TGauge ggAntiSlipButton;
|
||||||
TGauge ggFuseButton;
|
TGauge ggFuseButton;
|
||||||
TGauge ggConverterFuseButton; // hunter-261211: przycisk odblokowania
|
TGauge ggConverterFuseButton; // hunter-261211: przycisk odblokowania
|
||||||
@@ -175,7 +174,7 @@ private:
|
|||||||
TGauge ggRightLightButton;
|
TGauge ggRightLightButton;
|
||||||
TGauge ggLeftEndLightButton;
|
TGauge ggLeftEndLightButton;
|
||||||
TGauge ggRightEndLightButton;
|
TGauge ggRightEndLightButton;
|
||||||
TGauge ggLightsButton; //przelacznik reflektorow (wszystkich)
|
TGauge ggLightsButton; // przelacznik reflektorow (wszystkich)
|
||||||
|
|
||||||
// hunter-230112: przelacznik swiatel tylnich
|
// hunter-230112: przelacznik swiatel tylnich
|
||||||
TGauge ggRearUpperLightButton;
|
TGauge ggRearUpperLightButton;
|
||||||
@@ -201,6 +200,7 @@ private:
|
|||||||
|
|
||||||
TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny
|
TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny
|
||||||
TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia
|
TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia
|
||||||
|
TGauge ggBatteryButton; // Stele 161228 hebelek baterii
|
||||||
// oswietlenia kabiny
|
// oswietlenia kabiny
|
||||||
|
|
||||||
// NBMX wrzesien 2003 - obsluga drzwi
|
// NBMX wrzesien 2003 - obsluga drzwi
|
||||||
@@ -267,6 +267,7 @@ private:
|
|||||||
TButton btLampkaBocznik4;
|
TButton btLampkaBocznik4;
|
||||||
TButton btLampkaRadiotelefon;
|
TButton btLampkaRadiotelefon;
|
||||||
TButton btLampkaHamienie;
|
TButton btLampkaHamienie;
|
||||||
|
TButton btLampkaED; // Stele 161228 hamowanie elektrodynamiczne
|
||||||
TButton btLampkaJazda; // Ra: nie u篡wane
|
TButton btLampkaJazda; // Ra: nie u篡wane
|
||||||
// KURS90
|
// KURS90
|
||||||
TButton btLampkaBoczniki;
|
TButton btLampkaBoczniki;
|
||||||
@@ -394,20 +395,21 @@ private:
|
|||||||
float fHVoltage; // napi?cie dla dynamicznych ga?ek
|
float fHVoltage; // napi?cie dla dynamicznych ga?ek
|
||||||
float fHCurrent[4]; // pr?dy: suma i amperomierze 1,2,3
|
float fHCurrent[4]; // pr?dy: suma i amperomierze 1,2,3
|
||||||
float fEngine[4]; // obroty te? trzeba pobra?
|
float fEngine[4]; // obroty te? trzeba pobra?
|
||||||
int iCarNo, iPowerNo, iUnitNo; //liczba pojazdow, czlonow napednych i jednostek spi皻ych ze sob<6F>
|
int iCarNo, iPowerNo, iUnitNo; // liczba pojazdow, czlonow napednych i jednostek spi皻ych ze
|
||||||
|
// sob<6F>
|
||||||
bool bDoors[20][3]; // drzwi dla wszystkich czlonow
|
bool bDoors[20][3]; // drzwi dla wszystkich czlonow
|
||||||
int iUnits[20]; // numer jednostki
|
int iUnits[20]; // numer jednostki
|
||||||
int iDoorNo[20]; // liczba drzwi
|
int iDoorNo[20]; // liczba drzwi
|
||||||
char cCode[20]; //kod pojazdu
|
char cCode[20]; // kod pojazdu
|
||||||
std::string asCarName[20]; //nazwa czlonu
|
std::string asCarName[20]; // nazwa czlonu
|
||||||
bool bMains[8]; //WSy
|
bool bMains[8]; // WSy
|
||||||
float fCntVol[8]; //napiecie NN
|
float fCntVol[8]; // napiecie NN
|
||||||
bool bPants[8][2]; //podniesienie pantografow
|
bool bPants[8][2]; // podniesienie pantografow
|
||||||
bool bFuse[8]; //nadmiarowe
|
bool bFuse[8]; // nadmiarowe
|
||||||
bool bBatt[8]; //baterie
|
bool bBatt[8]; // baterie
|
||||||
bool bConv[8]; //przetwornice
|
bool bConv[8]; // przetwornice
|
||||||
bool bComp[8][2]; //sprezarki
|
bool bComp[8][2]; // sprezarki
|
||||||
bool bHeat[8]; //grzanie
|
bool bHeat[8]; // grzanie
|
||||||
// McZapkie: do syczenia
|
// McZapkie: do syczenia
|
||||||
float fPPress, fNPress;
|
float fPPress, fNPress;
|
||||||
float fSPPress, fSNPress;
|
float fSPPress, fSNPress;
|
||||||
@@ -422,11 +424,11 @@ private:
|
|||||||
{
|
{
|
||||||
return iRadioChannel;
|
return iRadioChannel;
|
||||||
};
|
};
|
||||||
inline TDynamicObject * Dynamic()
|
inline TDynamicObject *Dynamic()
|
||||||
{
|
{
|
||||||
return DynamicObject;
|
return DynamicObject;
|
||||||
};
|
};
|
||||||
inline TMoverParameters * Controlled()
|
inline TMoverParameters *Controlled()
|
||||||
{
|
{
|
||||||
return mvControlled;
|
return mvControlled;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user