public override void GetLifetime(out DateTime firstDate, out DateTime lastDate,
                                         out int firstShift, out int lastShift)
        {
            int firstShiftInt = 0;
            int lastShiftInt  = 9999;

            ExecuteDriverCommand(false, protocol =>
            {
                protocol.ExecuteCommand("A5", "2");
                firstShiftInt = _spProtocol.GetFieldAsInt(1);

                protocol.ExecuteCommand("A5", "1");
                lastShiftInt = _spProtocol.GetFieldAsInt(1);
            });

            firstShift = firstShiftInt;
            lastShift  = lastShiftInt;

            firstDate = new DateTime(1900, 1, 1);
            lastDate  = DateTime.Now;
        }
        protected override void OnAfterActivate()
        {
            Port.ReadTimeout  = READ_TIMEOUT;
            Port.WriteTimeout = WRITE_TIMEOUT;

            _spProtocol = new SPProtocol(Port, PASSWORD);

            try
            {
                // короткий запрос состояния
                _spProtocol.ShortStatusInquiry();

                // проверяем статус
                _spProtocol.ExecuteCommand("A0");
                byte currStatus = (byte)_spProtocol.GetFieldAsInt(2);

                // если команда инициализации еще не выполнялась
                if ((currStatus & 0x01) == 0x01)
                {
                    // инициализация ККМ
                    var currTime = DateTime.Now;
                    _spProtocol.ExecuteCommand("00", currTime.ToString("ddMMyy"), currTime.ToString("HHmmss"));
                }
                // если смена закрыта
                if ((currStatus & 0x04) == 0x00)
                {
                    // установка клише
                    for (int i = 0; i < DocumentHeader.Length && i < 4; i++)
                    {
                        _spProtocol.ExecuteCommand("A2", "20", i.ToString(), DocumentHeader[i]);
                    }

                    // установка подвала
                    for (int i = 0; i < DocumentFooter.Length && i < 2; i++)
                    {
                        _spProtocol.ExecuteCommand("A2", "21", i.ToString(), DocumentFooter[i]);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }