#ifndef __LIGHT_H__
#define __LIGHT_H__
#include "types.h"
// 灯光事件
#define LIGHT_EVT_DEFAULT_MODE 0x0008 // 恢复为默认模式事件

// 暖光 pwm脚
#define GPIO_WARM P18
#define GPIO_WARM2 P15
#define WARM_CH 0
// 冷光 pwm脚
#define GPIO_COLD P20
#define GPIO_COLD2 P31
#define COLD_CH 1

// 风扇 pwm
#define GPIO_FAN P23

// 亮度分级 0~100 翻 100倍
#define TOTAl_LEVEL 100
// 亮度更改步长
#define LIGHT_STEP 5
#define TEMP_MIN 2700
#define TEMP_MAX 6500
// 色温更改步长
#define TEMP_STEP 50


// adc 电源监测脚
#define GPIO_POWER P28

// 工作模式
// 默认工作模式
#define LIGHT_MODE_DEFAULT 0

// 全亮模式(色温无效)
#define LIGHT_MODE_FULL 1
// 全亮模式下自动关闭时间 秒
#define FULL_MODE_WAIT_TIME 60

// 灯光控制命令起始码
typedef enum {
    // 下发命令
    START_CODE_CMD = 0x6c,
    // 响应命令
    START_CODE_RES = 0xc6,
    // 通知命令
    START_CODE_NOTIFY = 0x66
}light_cmd_start_code;

// 灯光控制命令码
typedef enum{
    CMD_OPEN = 0x01,
    CMD_CLOSE = 0x02,
    CMD_QUERY = 0x03,
    CMD_LIGTH = 0x04,
    CMD_TEMP = 0x05,
    CMD_FUN = 0x06,
    CMD_MODE = 0x07,
    CMD_CH = 0x08,
    CMD_HZ = 0x09,
}light_cmd_code;

// 灯光数据 色温, 亮度, 工作模式, 风扇
typedef struct {
    bool open;
    int temp;
    int light;
    int mode;
    int fan;
} light_data_t;

typedef struct {
    light_cmd_start_code startCode;
    uint8_t len;
    light_cmd_code cmd;
    uint8_t sn;
    uint8_t *data;
} light_cmd_t;

extern light_data_t light_data;

// 通知回调函数
typedef void (*CallbackFunc)(uint8 *res, uint16 len);


extern int light_init(int taskId);

extern int light_ch_set(uint8_t ch, uint16_t val);

// 计算冷暖光的亮度值,并且设置
int comLightVal();

extern uint16 light_set(uint8_t val, uint8_t sn, uint8 *res);
extern uint16 temp_set(int temp, uint8_t sn, uint8 *res);
extern uint16 open_light(uint8_t sn, uint8 *res);
extern uint16 close_light(uint8_t sn, uint8 *res);
extern uint16 change_light_mode (light_cmd_start_code mode, uint8_t sn, uint8 *res);
extern uint16 parse_light_code(uint8* data, uint16 len, uint8 *res);

extern void light_register_notify_callback(CallbackFunc callback);







#endif