#include <stdio.h>
#include "OB6626.h"
#include "qei.h"

void QEI_IRQHandler(void)
{

}

void QEI_Open(OB_QEI_Type *pQEI, uint32_t Mode)
{

    pQEI->CON_b.RESN   = 1;
    pQEI->CONF   = Mode;


}

void QEI_SetMaxPos(OB_QEI_Type *pQEI, uint32_t Number)
{
    pQEI->MAXPOS   = Number;


}

uint32_t QEI_GetPos(OB_QEI_Type *pQEI)
{
    return pQEI->POS;
}


void QEI_EnableINT(OB_QEI_Type *pQEI, uint32_t nINTSel)
{
    NVIC_EnableIRQ(QEI_IRQn);

    if ( (nINTSel & QEI_INT_INX) == QEI_INT_INX)
        pQEI->IEENS_b.INX   = 1;

    if ( (nINTSel & QEI_INT_TIM) == QEI_INT_TIM)
        pQEI->IEENS_b.TIM   = 1;

    if ( (nINTSel & QEI_INT_VELC) == QEI_INT_VELC)
        pQEI->IEENS_b.VELC   = 1;

    if ( (nINTSel & QEI_INT_DIR) == QEI_INT_DIR)
        pQEI->IEENS_b.DIR = 1;

    if ( (nINTSel & QEI_INT_ERR) == QEI_INT_ERR)
        pQEI->IEENS_b.ERR = 1;

    if ( (nINTSel & QEI_INT_ENCLK) == QEI_INT_ENCLK)
        pQEI->IEENS_b.ENCLK = 1;

    if ( (nINTSel & QEI_INT_POS0) == QEI_INT_POS0)
        pQEI->IEENS_b.POS0 = 1;

    if ( (nINTSel & QEI_INT_POS1) == QEI_INT_POS1)
        pQEI->IEENS_b.POS1 = 1;

    if ( (nINTSel & QEI_INT_POS2) == QEI_INT_POS2)
        pQEI->IEENS_b.POS2 = 1;

    if ( (nINTSel & QEI_INT_POS0REV) == QEI_INT_POS0REV)
        pQEI->IEENS_b.POS0REV = 1;

    if ( (nINTSel & QEI_INT_POS1REV) == QEI_INT_POS1REV)
        pQEI->IEENS_b.POS1REV = 1;

    if ( (nINTSel & QEI_INT_POS2REV) == QEI_INT_POS2REV)
        pQEI->IEENS_b.POS2REV = 1;

}

void QEI_DisableINT(OB_QEI_Type *pQEI, uint32_t nINTSel)
{

    if ( (nINTSel & QEI_INT_INX) == QEI_INT_INX)
        pQEI->IEENC_b.INX   = 1;

    if ( (nINTSel & QEI_INT_TIM) == QEI_INT_TIM)
        pQEI->IEENC_b.TIM   = 1;

    if ( (nINTSel & QEI_INT_VELC) == QEI_INT_VELC)
        pQEI->IEENC_b.VELC   = 1;

    if ( (nINTSel & QEI_INT_DIR) == QEI_INT_DIR)
        pQEI->IEENC_b.DIR = 1;

    if ( (nINTSel & QEI_INT_ERR) == QEI_INT_ERR)
        pQEI->IEENC_b.ERR = 1;

    if ( (nINTSel & QEI_INT_ENCLK) == QEI_INT_ENCLK)
        pQEI->IEENC_b.ENCLK = 1;

    if ( (nINTSel & QEI_INT_POS0) == QEI_INT_POS0)
        pQEI->IEENC_b.POS0 = 1;

    if ( (nINTSel & QEI_INT_POS1) == QEI_INT_POS1)
        pQEI->IEENC_b.POS1 = 1;

    if ( (nINTSel & QEI_INT_POS2) == QEI_INT_POS2)
        pQEI->IEENC_b.POS2 = 1;

    if ( (nINTSel & QEI_INT_POS0REV) == QEI_INT_POS0REV)
        pQEI->IEENC_b.POS0REV = 1;

    if ( (nINTSel & QEI_INT_POS1REV) == QEI_INT_POS1REV)
        pQEI->IEENC_b.POS1REV = 1;

    if ( (nINTSel & QEI_INT_POS2REV) == QEI_INT_POS2REV)
        pQEI->IEENC_b.POS2REV = 1;
}
