// PA器件驱动(GPIO模拟)
// 杭州秒寻科技有限公司
// 周涛
// 2023-10-01

#include "includes.h"

// 模块初始化
void driver_pagpio_init()
{
    GPIO_InitTypeDef stGpio = {0};

    // 组织公共数据
    stGpio.GPIO_Mode = GPIO_Mode_OUT;
    stGpio.GPIO_OType = GPIO_OType_PP;
    stGpio.GPIO_Speed = GPIO_Speed_50MHz;
    stGpio.GPIO_PuPd = GPIO_PuPd_NOPULL;

    // 片选脚
    RCC_AHB1PeriphClockCmd(DRIVER_PAGPIO_SD_CLK, ENABLE);
    stGpio.GPIO_Pin = DRIVER_PAGPIO_SD_PIN;
    GPIO_Init(DRIVER_PAGPIO_SD_PORT, &stGpio);

    // GAIN0
    RCC_AHB1PeriphClockCmd(DRIVER_PAGPIO_GAIN0_CLK, ENABLE);
    stGpio.GPIO_Pin = DRIVER_PAGPIO_GAIN0_PIN;
    GPIO_Init(DRIVER_PAGPIO_GAIN0_PORT, &stGpio);

    // GAIN1
    RCC_AHB1PeriphClockCmd(DRIVER_PAGPIO_GAIN1_CLK, ENABLE);
    stGpio.GPIO_Pin = DRIVER_PAGPIO_GAIN1_PIN;
    GPIO_Init(DRIVER_PAGPIO_GAIN1_PORT, &stGpio);

    // fault监测
    RCC_AHB1PeriphClockCmd(DRIVER_PAGPIO_FAULT_CLK, ENABLE);
    stGpio.GPIO_Pin = DRIVER_PAGPIO_FAULT_PIN;
    GPIO_Init(DRIVER_PAGPIO_FAULT_PORT, &stGpio);
    GPIO_WriteBit(DRIVER_PAGPIO_FAULT_PORT, DRIVER_PAGPIO_FAULT_PIN, Bit_SET);

    driver_pagpio_switch(0); // 关闭pa输出

    return;
}

// 打开关闭PA1
// byBitValue:0：关闭，1：打开
void driver_pagpio_switch(uint8 byBitValue)
{
    GPIO_WriteBit(DRIVER_PAGPIO_SD_PORT, DRIVER_PAGPIO_SD_PIN, (BitAction)byBitValue);

    return;
}

// 配置PA增益
// byGain:4个规格，20、26、32和36db
void driver_pagpio_set_gain(uint8 byGain)
{
    uint8 byGain0 = 0;
    uint8 byGain1 = 0;

    if (byGain == 20) // 低
    {
        byGain0 = 0;
        byGain1 = 0;
    }
    else if (byGain == 26) // 中
    {
        byGain0 = 1;
        byGain1 = 0;
    }
    else if (byGain == 32) // 高
    {
        byGain0 = 0;
        byGain1 = 1;
    }
    else if (byGain == 36) // 最高
    {
        byGain0 = 1;
        byGain1 = 1;
    }
    else
    {
        byGain0 = 0;
        byGain1 = 0;
    }

    GPIO_WriteBit(DRIVER_PAGPIO_GAIN0_PORT, DRIVER_PAGPIO_GAIN0_PIN, (BitAction)byGain0);
    GPIO_WriteBit(DRIVER_PAGPIO_GAIN1_PORT, DRIVER_PAGPIO_GAIN1_PIN, (BitAction)byGain1);
}
