/*
 * PE43711.c
 *
 *  Created on: 2019. 6. 28.
 *      Author: parkyj
 */
 #include "PE43711.h"
#if 1 // PYJ.2019.07.26_BEGIN -- 
#define ATTEN_3_5G_Initial_Val 0
void PE43711_ALL_atten_ctrl(ALL_PE43711_st ATT);

void PE43711_atten_ctrl(PE43711_st ATT ,uint8_t data);
ALL_PE43711_st ALL_ATT_3_5G;

PE43711_st ATT_3_5G_DL ={
    ATT_CLK_3_5G_GPIO_Port,
    ATT_CLK_3_5G_Pin,
    ATT_DATA_3_5G_DL_GPIO_Port,
    ATT_DATA_3_5G_DL_Pin,
    ATT_EN_3_5G_GPIO_Port,
    ATT_EN_3_5G_Pin,
}; 
PE43711_st ATT_3_5G_UL ={
    ATT_CLK_3_5G_GPIO_Port,
    ATT_CLK_3_5G_Pin,
    ATT_DATA_3_5G_UL_GPIO_Port,
    ATT_DATA_3_5G_UL_Pin,
    ATT_EN_3_5G_GPIO_Port,
    ATT_EN_3_5G_Pin,
}; 
PE43711_st ATT_3_5G_COM1={
    ATT_CLK_3_5G_GPIO_Port,
    ATT_CLK_3_5G_Pin,
    ATT_DATA_3_5G_COM1_GPIO_Port,
    ATT_DATA_3_5G_COM1_Pin,
    ATT_EN_3_5G_GPIO_Port,
    ATT_EN_3_5G_Pin,
}; 
PE43711_st ATT_3_5G_COM2={
    ATT_CLK_3_5G_GPIO_Port,
    ATT_CLK_3_5G_Pin,
    ATT_DATA_3_5G_COM2_GPIO_Port,
    ATT_DATA_3_5G_COM2_Pin,
    ATT_EN_3_5G_GPIO_Port,
    ATT_EN_3_5G_Pin,
}; 
PE43711_st ATT_3_5G_COM3={
    ATT_CLK_3_5G_GPIO_Port,
    ATT_CLK_3_5G_Pin,
    ATT_DATA_3_5G_COM3_GPIO_Port,
    ATT_DATA_3_5G_COM3_Pin,
    ATT_EN_3_5G_GPIO_Port,
    ATT_EN_3_5G_Pin,
}; 
void PE43711_PinInit(void){
    ALL_ATT_3_5G.ATT0 = ATT_3_5G_DL;
    ALL_ATT_3_5G.ATT1 = ATT_3_5G_UL;
    ALL_ATT_3_5G.ATT2 = ATT_3_5G_COM1;
    ALL_ATT_3_5G.ATT3 = ATT_3_5G_COM2;
    ALL_ATT_3_5G.ATT4 = ATT_3_5G_COM3;
    ALL_ATT_3_5G.data0 = ATTEN_3_5G_Initial_Val;    
    ALL_ATT_3_5G.data1 = ATTEN_3_5G_Initial_Val;
    ALL_ATT_3_5G.data2 = ATTEN_3_5G_Initial_Val;
    ALL_ATT_3_5G.data3 = ATTEN_3_5G_Initial_Val;
    ALL_ATT_3_5G.data4 = ATTEN_3_5G_Initial_Val;    
    PE43711_ALL_atten_ctrl(ALL_ATT_3_5G);
}
#endif // PYJ.2019.07.26_END -- 
void Bit_Compare(PE43711_st ATT,uint8_t data,uint8_t Shift_Index){
    if(data & (0x01 << Shift_Index)){
        HAL_GPIO_WritePin(ATT.DATA_PORT,ATT.DATA_PIN,GPIO_PIN_SET);//DATA
    }
    else{
        HAL_GPIO_WritePin(ATT.DATA_PORT,ATT.DATA_PIN,GPIO_PIN_RESET);//DATA
    }
}
void PE43711_ALL_atten_ctrl(ALL_PE43711_st ATT){
    HAL_GPIO_WritePin(ATT.ATT0.LE_PORT,ATT.ATT0.LE_PIN,GPIO_PIN_RESET);
    Pol_Delay_us(10);
//    printf("why not? \r\n");
    for(uint8_t i = 0; i < 8; i++){
        Bit_Compare(ATT.ATT0,ATT.data0,i);
        Bit_Compare(ATT.ATT1,ATT.data1,i);
        Bit_Compare(ATT.ATT2,ATT.data2,i);
        Bit_Compare(ATT.ATT3,ATT.data3,i);
        Bit_Compare(ATT.ATT4,ATT.data4,i);
		HAL_GPIO_WritePin(ATT.ATT0.CLK_PORT,ATT.ATT0.CLK_PIN,GPIO_PIN_SET);//CLOCK
		Pol_Delay_us(10);
		HAL_GPIO_WritePin(ATT.ATT0.CLK_PORT,ATT.ATT0.CLK_PIN,GPIO_PIN_RESET);//CLOCK
    }
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);//DATA
    HAL_GPIO_WritePin(ATT.ATT0.LE_PORT,ATT.ATT0.LE_PIN,GPIO_PIN_SET);//LE
    Pol_Delay_us(10);
    HAL_GPIO_WritePin(ATT.ATT0.LE_PORT,ATT.ATT0.LE_PIN,GPIO_PIN_RESET);
}

void PE43711_atten_ctrl(PE43711_st ATT ,uint8_t data){
    uint8_t i = 0;
    uint8_t temp = 0;
    data = 4 * data;
    temp = (uint8_t)data;
    
    HAL_GPIO_WritePin(ATT.LE_PORT,ATT.LE_PIN,GPIO_PIN_RESET);
    Pol_Delay_us(10);
    for(i = 0; i < 8; i++){
        if((uint8_t)temp & 0x01){
           HAL_GPIO_WritePin(ATT.DATA_PORT,ATT.DATA_PIN,GPIO_PIN_SET);//DATA
        }
           else{
           HAL_GPIO_WritePin(ATT.DATA_PORT,ATT.DATA_PIN,GPIO_PIN_RESET);//DATA
           }

		HAL_GPIO_WritePin(ATT.CLK_PORT,ATT.CLK_PIN,GPIO_PIN_SET);//CLOCK
		Pol_Delay_us(10);
		HAL_GPIO_WritePin(ATT.CLK_PORT,ATT.CLK_PIN,GPIO_PIN_RESET);//CLOCK
		Pol_Delay_us(10);
		temp >>= 1;
    }
    
	HAL_GPIO_WritePin(ATT.CLK_PORT,ATT.CLK_PIN,GPIO_PIN_RESET);//CLOCK
    HAL_GPIO_WritePin(ATT.DATA_PORT,ATT.DATA_PIN,GPIO_PIN_RESET);//DATA
    HAL_Delay(5);
    HAL_GPIO_WritePin(ATT.LE_PORT,ATT.LE_PIN,GPIO_PIN_SET);//LE
    Pol_Delay_us(10);
    HAL_GPIO_WritePin(ATT.LE_PORT,ATT.LE_PIN,GPIO_PIN_RESET);
}
