/***************************************************************************
 *   Copyright (C) 2020 by Santiago González                               *
 *                                                                         *
 ***( see copyright.txt file at root folder )*******************************/

#pragma once

#include "mcuuart.h"
#include "mcutypes.h"

class McuTimer;

class I51Usart : public McuUsart
{
    public:
        I51Usart( eMcu* mcu, QString name, int number );
        ~I51Usart();

        virtual void setup() override;
        virtual void reset() override;

        virtual void configureA( uint8_t newSCON ) override;
        virtual void configureB( uint8_t newPCON ) override;

        virtual void sendByte( uint8_t data ) override;
        virtual void readByte( uint8_t data ) override;
        virtual void setRxFlags( uint16_t frame ) override;

        virtual void callBack() override; // Called by Timer 1 interrupt

    private:
        McuTimer* m_timer1;

        // SCON
        uint8_t*  m_scon;
        regBits_t m_SM;
        regBits_t m_SM2;

        //PCON
        regBits_t m_SMOD;

        int m_counter;

        uint8_t m_smodVal;
        bool m_smodDiv;

        bool m_stopBitError;
};
