/*
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
//---------------------------------------------------------------------------

#define BYTETOWRITE 31  		// ilość bajtów przesyłanych z MaSzyny
#define BYTETOREAD  16  		// ilość bajtów przesyłanych do MaSzyny

typedef unsigned char BYTE;
typedef unsigned long DWORD;

class TMWDComm
{
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);

	//void CheckData2();

	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;
	
	unsigned int uiAnalog[4]; 		// trzymanie danych z wejść analogowych

	BYTE ReadDataBuff[BYTETOREAD]; //17]; // bufory danych
	BYTE WriteDataBuff[BYTETOWRITE]; //31];

    TMWDComm(); // konstruktor
    ~TMWDComm(); // 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
*/
