#include "app_task.h"
#include "J1939.H"
#include "app_eeprom.h"
#include "ble_core.h"
#include "cli.h"
#include "dev_at24cxx.h"
#include "dev_can.h"
#include "hal_systick.h"
#include "stm32f4xx_tim.h"
#include <stdint.h>
#include <stdio.h>

uint8_t beep_status = 1;

static uint32_t systick_ms_clock = 0;

/*----------------------------------------
* @函数名: app_task_5ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_5ms(void)
{
    dev_key_button_task();
    can_process();
    cli_loop();
}

/*----------------------------------------
* @函数名: app_task_10ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_10ms(void)
{
    app_eeprom_read_task();
    app_eeprom_write_task();
    J1939_Poll();
}

/*----------------------------------------
* @函数名: app_task_50ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_50ms(void)
{
    uint8_t buf[200] = {0};
    if (dev_key.dev_key_state.bits.key_up_state_flag == 1)
    {
        buf[0] = 10;
        ble_send();
        // dev_at24cxx_write_bytes(0, &buf[99], 1);
        app_eeprom_write_50_zhuzu();
        dev_key.dev_key_state.bits.key_up_state_flag = 0;
    }
    if (dev_key.dev_key_state.bits.key0_state_flag == 1)
    {
        app_eeprom_read_50_zhuzu();
        // printf("%d\r\n", read_buf[33]);
        dev_key.dev_key_state.bits.key0_state_flag = 0;
    }
    if (dev_key.dev_key_state.bits.key1_state_flag == 1)
    {
        dev_at24cxx_read_bytes(0, buf, 1);
        printf("%d\r\n,%d\r\n", buf[0], buf[0]);
        dev_key.dev_key_state.bits.key1_state_flag = 0;
    }
    if (dev_key.dev_key_state.bits.key2_state_flag == 1)
    {
        printf("33333333\r\n");
        HAL_GPIO_BEEP(beep_status);
        beep_status = !beep_status;

        dev_key.dev_key_state.bits.key2_state_flag = 0;
    }
}

/*----------------------------------------
* @函数名: app_task_100ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_100ms(void)
{
}

/*----------------------------------------
* @函数名: app_task_200ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_200ms(void)
{
}

/*----------------------------------------
* @函数名: app_task_500ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_500ms(void)
{
}

/*----------------------------------------
* @函数名: app_task_1000ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_1000ms(void)
{
    // static volatile uint8_t state = 0;
    // dev_led_on_off(1, state);
    // state = !state;
    // dev_led_on_off(0, state);
    systick_ms_clock++;
    // printf("debug\r\n");
    // dev_led_on_off(1, !state);
}
/*----------------------------------------
* @函数名: app_task_2000ms
* @描述:
* @入参:
* @出参: *pArr
* @返回值: NONE
* @调用:
* @被调用:
----------------------------------------
* 作者     创建时间          操作
 樊春春   2023/11/13    Create/Modify
----------------------------------------*/
static void app_task_2000ms(void)
{
}

void SysTick_Handler(void)
{
    dev_task_clock();
    dev_systick_decrement();
    dev_systick_increase();
    systick_handler();
    jump_boot_time_ctrl();
}

void app_task_schdule(void)
{
    if (dev_task_flag.bits.task0_flag)
    {
        app_task_5ms();
        dev_task_flag.bits.task0_flag = 0;
    }
    if (dev_task_flag.bits.task1_flag)
    {
        app_task_10ms();
        dev_task_flag.bits.task1_flag = 0;
    }
    if (dev_task_flag.bits.task2_flag)
    {
        app_task_50ms();
        dev_task_flag.bits.task2_flag = 0;
    }
    if (dev_task_flag.bits.task3_flag)
    {
        app_task_100ms();
        dev_task_flag.bits.task3_flag = 0;
    }
    if (dev_task_flag.bits.task4_flag)
    {
        app_task_200ms();
        dev_task_flag.bits.task4_flag = 0;
    }
    if (dev_task_flag.bits.task5_flag)
    {
        app_task_500ms();
        dev_task_flag.bits.task5_flag = 0;
    }
    if (dev_task_flag.bits.task6_flag)
    {
        app_task_1000ms();
        dev_task_flag.bits.task6_flag = 0;
    }
    if (dev_task_flag.bits.task7_flag)
    {
        app_task_2000ms();
        dev_task_flag.bits.task7_flag = 0;
    }
}