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

#pragma once

#include "mcutwi.h"

class eMcu;
//class McuPin;

class PicTwi : public McuTwi
{
    public:
        PicTwi( eMcu* mcu, QString name );
        ~PicTwi();

        virtual void setup() override;
        virtual void initialize() override;

        virtual void configureA( uint8_t newSSPCON ) override;
        virtual void configureB( uint8_t newSSPCON2 ) override;

        virtual void writeAddrReg( uint8_t newSSPADD ) override;
        virtual void writeStatus( uint8_t newSSPSTAT ) override;
        virtual void writeTwiReg( uint8_t newSSPBUF ) override;
        virtual void readTwiReg( uint8_t val ) override;

        virtual void setMode( twiMode_t mode ) override;
        virtual void writeByte() override;
        virtual void bufferEmpty() override;
        virtual void readByte() override;

        virtual void sleep( int mode ) override;

    protected:
        virtual void setTwiState( twiState_t state ) override;
        uint8_t getStaus() { return *m_statReg &= 0b11111000; }

        uint8_t m_bitRate;

        // SSPCON
        regBits_t m_WCOL;

        // SSPCON2
        regBits_t m_CGEN;
        regBits_t m_ACKSTAT;
        regBits_t m_ACKDT;
        regBits_t m_ACKEN;
        regBits_t m_RCEN;
        regBits_t m_PEN;
        regBits_t m_RSEN;
        regBits_t m_SEN;

        //SSPSTAT
        regBits_t m_P;
        regBits_t m_S;
        regBits_t m_RW;
        regBits_t m_BF;
};
