/********************************************************************
  Copyright (c) 2021 Xiangyu Medical Co.，Ltd. All rights reserved.
  FileName : IoControl.c
  Author   : zhangdawei
  Version  : V1.0
  Date     :
  Note     :
  History  :
********************************************************************/
/* Includes ------------------------------------------------------*/
#include "IoControl.h"
#include "drv_uart.h"
#include "nrf_drv_gpiote.h"
/* Private define ------------------------------------------------*/
/* Private typedef -----------------------------------------------*/
/* Private constants ---------------------------------------------*/
/* Private variables ---------------------------------------------*/
uint8_t LastState = Null;   //保存上一次的状态
/* Private function prototypes -----------------------------------*/
/* Public constants ----------------------------------------------*/
/* Public variables ----------------------------------------------*/
DeviceStateInfo_e DeviceState = POWER_CLOSE;   //设备开关机状态
ChargingStateInfo_e ChargeState = Uncharged;
ChargingStateInfo_e ChargeLastState = Uncharged;
KeyStateInfo_t KeyStateInfo;
/********************************************************************
* name         : void GpioInit(void)
* description  : GPIO引脚初始化
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void GpioInit(void)
{
    NRF_UICR->NFCPINS = 0;
    
    nrf_gpio_cfg_output(KEY_POWER);                      
	nrf_gpio_cfg_output(LED_YELLOW);                      
//    nrf_gpio_cfg_output(CHARGE_LED);
    
    nrf_gpio_cfg_output(STIM_RMS_RELAY_PIN);
    nrf_gpio_cfg_output(STIM_RELAY_PIN);
    nrf_gpio_cfg_output(SAMPLE_POWER_PIN);


//    nrf_gpio_pin_clear(KEY_POWER);
    nrf_gpio_pin_clear(LED_YELLOW);

//    nrf_gpio_pin_clear(CHARGE_LED);

    nrf_gpio_pin_clear(STIM_RMS_RELAY_PIN);
    nrf_gpio_pin_clear(STIM_RELAY_PIN);
    nrf_gpio_pin_clear(SAMPLE_POWER_PIN);

    /////////
    nrf_gpio_cfg_input(CHG_MANAGER_CHG, NRF_GPIO_PIN_NOPULL);//检测充电状态

}
/* 电刺激输出使能脚 */
void StimOutCtlOpen(void)
{

}
void StimOutCtlClose(void)
{

}
/* 能量释放控制 */
void StimReleaseOpen(void)
{

}

void StimReleaseClose(void)
{

}

// OK按键处理函数
void KEY_PWR_SWITICH_Handler(void)
{

}

//GPIOTE事件处理函回调函数，事件回调函数里面可以获取pin编号和引脚状态变化
void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    if(pin == KEY_PWR_SWITICH)
    {

        KeyStateInfo.shineng = true;
        KeyStateInfo.KeyPinNumber = KEY_PWR_SWITICH;
    }
}
void EXIT_KEY_Init(void)
{
    ret_code_t err_code;	 

    nrf_gpio_cfg_input(KEY_PWR_SWITICH, NRF_GPIO_PIN_PULLUP);//检测开关机信号
    
}

/********************************************************************
* name         : void open_acquisition_relay(void)
* description  : 打开采样继电器
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void open_acquisition_relay(void)
{
    nrf_gpio_pin_set(STIM_RMS_RELAY_PIN);  //闭合继电器
    nrf_gpio_pin_clear(STIM_RELAY_PIN);   //打开刺激继电器
}
/********************************************************************
* name         : void close_acquisition_relay(void)
* description  : 关闭采样继电器
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void close_acquisition_relay(void)
{
    nrf_gpio_pin_clear(STIM_RMS_RELAY_PIN); 
    nrf_gpio_pin_clear(STIM_RELAY_PIN); 
}


/********************************************************************
* name         : void open_stimulate_relay(void)
* description  : 打开刺激继电器
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void open_stimulate_relay(void)
{
    nrf_gpio_pin_clear(STIM_RMS_RELAY_PIN);
    nrf_gpio_pin_set(STIM_RELAY_PIN);
}
/********************************************************************
* name         : void close_stimulate_relay(void)
* description  : 关闭刺激继电器
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void close_stimulate_relay(void)
{
    nrf_gpio_pin_clear(STIM_RMS_RELAY_PIN); 
    nrf_gpio_pin_clear(STIM_RELAY_PIN); 
}


/********************************************************************
* name         : void StimStateInfoStructInit(SchemeData_t SchemeDataIn)
* description  : 初始化通道信息描述结构体
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void StimStateInfoStructInit(SchemeData_t SchemeDataIn)
{

}
// 设备预存信息初始化ID :101 腹直肌分离
void PreStorageSchemeDataInit(void)
{

}

void KeyPinHandler(void)
{
    if(KeyStateInfo.shineng == true)
    {
        switch(KeyStateInfo.KeyPinNumber)
        {
            case KEY_PWR_SWITICH:
            {
                KEY_PWR_SWITICH_Handler();  
                break;
            }

        }
        KeyStateInfo.shineng = false;
    }
}

/********************************************************************
* name         : void VariableInit(void)
* description  : 初始化变量
* Input        : void
* Output       : void
* Return       : 
********************************************************************/
void VariableInit(void)
{

}
/*************************** END OF FILE ***************************/

