#include "key.h"
#include "delay.h"
#include "bsp.h"

key_status_t key_status[KEY_MAX];
// timeout_t tt_key;
key_para_t key_para[KEY_MAX];
void key_init(void)
{
    SYS_EnableAPBClock(APB_MASK_GPIO1);
    // SYS_DisableJTDO();
    GPIO_SetInput(GPIO1,0x70);
    key_status_init();
    // timeout_setValue(&tt_key,10,0xff);
}

//获取按键电平
uint8_t get_key_bit(uint8_t key)
{
    uint8_t status;
    switch (key)
    {
        case KEY1:
        status = GET_KEY1();
        break;
        case KEY2:
        status = GET_KEY2();
        break;
        case KEY3:
        status = GET_KEY3();
        break;
        default:
        status = 0;
        break;
    }
    return status;
}

/*! 
*  \brief     上电读取按键电平
*  \param  无
*/
void key_status_init(void)
{
	int i;
	for(i = 0; i < KEY_MAX; i++)
	{
		key_status[i].last_level = get_key_bit(i);
	}
}

/*! 
*  \brief     实时读取按键电平
*  \param  无
*/
void get_key_bit_realtime(void)
{
	int i;
	uint8_t status;
	// if(!timeout_isOut(&tt_key))
	// 	return;
    delay_ms(10);
	for(i = 0; i < KEY_MAX; i++)
	{
		status = get_key_bit(i);
		if(status != key_status[i].last_level)
		{
			key_status[i].flag = 1;
			if(status)//高电平 抬起
			{
				key_status[i].status = KEY_STATUS_UP;
			}
			else
			{
				key_status[i].status = KEY_STATUS_DN;
			}
			key_status[i].last_level = status;
		}
	}
}


/*! 
*  \brief     按键处理函数
*  \param  无
*/
void key_handle(void)
{
    uint8_t i;
    get_key_bit_realtime();//实时读取按键电平
    for(i = 0; i < KEY_MAX; i++)
    {
        if(key_status[i].flag)
        {
            key_status[i].flag = 0;
            if(key_status[i].status == KEY_STATUS_UP)//抬起
            {
                // switch(i)
                // {
                //     case KEY1:
				// 		// printf("key1 up\n");
                //     break;
                //     case KEY2:
                //         // printf("key2 up\n");
                //         // GPIO_SetHigh(ITSF_PWR_N_PORT,ITSF_PWR_N_BIT);

                //         // YTSF_GPIO_REV4_EN();
                //         // YTSF_GPIO_REV1_RST();
                //         // delay_ms(500);
                //         // YTSF_GPIO_REV1_SET();
                //     break;
                //     case KEY3:
				// 		// printf("key3 up\n");
                //         // GPIO_SetHigh(ITSF_PWR_P_PORT,ITSF_PWR_N_BIT);
                //     break;
                //     default:
                //     break;
                // }
            }
            else if(key_status[i].status == KEY_STATUS_DN)//按下
            {
                // if(key_para[i].flag==0)
                // {
                //     key_para[i].flag = 1;
                //     key_para[i].num = 0;
                //     timeout_setValue(&key_para[i].tt_key,KEY_TIMEOUT,1);
                // }
                // key_para[i].num++;
                // printf("key%d,key num:%d\n",i+1,key_para[i].num);
                switch(i)
                {
                    case KEY1:
                        // ytsf_test();
                        // lora_test();
                        printf("key1 down\n");
                        
                    break;
                    case KEY2:
                        // tax_test();
                        // SPI_FLASH_Test();
                        // I2C_Test();
                        printf("key2 down\n");
                        // GPIO_SetLow(ITSF_PWR_N_PORT,ITSF_PWR_N_BIT);
                        // YTSF_GPIO_REV4_DN();
                        // SYS_SoftwareReset();

                        // update_test();//升级测试
                        // FLASH_Unlock();
                        // FLASH_EraseSector(0x80020000);
                        // FLASH_Lock();
                        
                        // printf("1\n");
                    break;
                    case KEY3:
						printf("key3 down\n");
                        // GPIO_SetLow(ITSF_PWR_P_PORT,ITSF_PWR_N_BIT);
                    break;
                    default:
                    break;
                }
            }
        }
    }

    // key_timeout_handle();
}

// //按键功能
// void key_func(uint8_t key, uint8_t num)
// {
//     printf("key%d,time%d,num%d\n",key+1,KEY_TIMEOUT,num);
//     switch(key)
//     {
//         case KEY1:
//             switch(num)
//             {
//                 case 1:
//                     // SPI_FLASH_Test();
//                     // lora_send_query_firm(device_info.device_sn);//发送
//                 break;
//                 case 2:
//                     // SX126xReset();
//                     // lora_init();
//                     // printf("lora reset\n");
//                 break;
//                 case 3://离线升级
//                     // printf("lora index = %d\n",lora_para_choice);
//                     device_fixed_info.master_updata_start = 1;
// 			        ota_state.offline_mode = KEY_TRIGGER;
//                 break;
//                 case 4:
//                     // lora_power_init();
//                     // lora_init();
//                 break;
//                 default:
//                 break;
//             }
//         break;
//         case KEY2:
//             switch(num)
//             {
//                 case 1:
                    
//                 break;
//                 case 2:
//                 break;
//                 case 3:
//                     device_fixed_info.master_updata_start = 1;
// 			        ota_state.offline_mode = KEY_TRIGGER;
//                 break;
//                 default:
//                 break;
//             }
//         break;
//         case KEY3:
//             switch(num)
//             {
//                 case 1:
                    
//                 break;
//                 case 2:
//                 break;
//                 case 3:
//                 break;
//                 default:
//                 break;
//             }
//         break;
//         default:
//         break;
//     }
// }

// //按键超时处理
// void key_timeout_handle(void)
// {
//     uint8_t i;
//     for(i = 0; i < KEY_MAX; i++)
//     {
//         if(timeout_isOut(&key_para[i].tt_key))
//         {
//             key_func(i,key_para[i].num);
//             key_para[i].flag = 0;
//             key_para[i].num = 0;
//         }
//     }
// }
