#ifndef _IOT_LIGHT_CTRL_DRV_V_H_ #define _IOT_LIGHT_CTRL_DRV_V_H_ #define iot_light_get_cmd(frm) (((uint32_t)(*((uint8_t *)(frm)))) & 0xFF) /* Channel code. Channel all supported only. */ #define IOT_LIGHT_CHAN_A 0x13 #define IOT_LIGHT_CHAN_B 0x14 #define IOT_LIGHT_CHAN_ALL 0x11 /* Device type for LED controller */ #define DEV_TYPE_LED_040W 0x02 #define DEV_TYPE_LED_060W 0x06 #define DEV_TYPE_LED_075W 0x0A #define DEV_TYPE_LED_080W 0x12 #define DEV_TYPE_LED_090W 0x15 #define DEV_TYPE_LED_100W 0x19 #define DEV_TYPE_LED_120W 0x1D #define DEV_TYPE_LED_150W 0x27 #define DEV_TYPE_LED_185W 0x38 #define DEV_TYPE_LED_240W 0x45 #define DEV_TYPE_LED_260W 0x48 /** * @brief Command list for led light controller. Command from PLC to STAs to * control led light controller. */ enum _iot_light_command_list_e { /* * Get params like light level, ADC data, power status. */ CMD_GET_PARAM = 0x01, /* * Control the A & B led. * 0x00 ~ 0xC8 stand for light level from 0 to 100%. */ CMD_SET_LIGHT_LEVEL_AB = 0x11, /* * Control the A or B or A & B led in given group. * 0x00 ~ 0xC8 stand for light level from 0 to 100%. */ CMD_SET_LIGHT_LEVEL_GRP = 0x12, /* * Control the A led. * 0x00 ~ 0xC8 stand for light level from 0 to 100%. */ CMD_SET_LIGHT_LEVEL_A = 0x13, /* * Control the B led. * 0x00 ~ 0xC8 stand for light level from 0 to 100%. */ CMD_SET_LIGHT_LEVEL_B = 0x14, /* * Set the group number current controller belongs to. */ CMD_SET_GROUP = 0x15, /* * Commands for private used. */ CMD_PRIVATE_COMMAND = 0x51, /* * ack for REPORT_POWER_STATE from cco. */ CMD_REPORT_POWER_STATE_ACK = 0x82, /* set correction slope and intercept */ CMD_SET_CORRECTION_DATA = 0xA1, /* get correction parameter */ CMD_GET_CORRECTION_PARAM = 0xA2, /* set correction parameter */ CMD_SET_CORRECTION_PARAM = 0xA3, }; /** * @brief Response list for commands in enum _iot_light_command_list_e. */ enum _iot_light_response_list_e { /* response code for CMD_GET_PARAM */ RESP_GET_PARAM = 0x81, /* response code for CMD_SET_LIGHT_LEVEL_AB */ RESP_SET_LIGHT_LEVEL_AB = 0x91, /* response code for CMD_SET_LIGHT_LEVEL_A */ RESP_SET_LIGHT_LEVEL_A = 0x83, /* response code for CMD_SET_LIGHT_LEVEL_B */ RESP_SET_LIGHT_LEVEL_B = 0x84, /* response code for CMD_SET_GROUP */ RESP_SET_GROUP = 0x95, /* response code for CMD_PRIVATE_COMMAND */ RESP_PRIVATE_COMMAND = 0xD1, /* report power state to cco */ REPORT_POWER_STATE = 0x2, /* set correction data response for CMD_SET_CORRECTION_DATA */ RESP_SET_CORRECTION_DATA = 0x8A, /* get correction parameter response for CMD_GET_CORRECTION_PARAM */ RESP_GET_CORRECTION_PARAM = 0x8B, /* set correction parameter response for CMD_SET_CORRECTION_PARAM */ RESP_SET_CORRECTION_PARAM = 0x8C, }; /* reserved bytes on the head and tail when sub-command alloc response packet. */ #define CMD_PRIVATE_RESPONSE_RESV_BY_HEAD 2 /* OPCODE && SUBOPCODE */ #define CMD_PRIVATE_RESPONSE_RESV_BY_TAIL 1 /* CHECKSUM */ /** * @brief Subfn for CMD_PRIVATE_COMMAND/RESP_PRIVATE_COMMAND. */ enum _iot_light_sub_command_private_command_e { /* Get current of leakage. */ SUBCMD_GET_LEAKAGE_CURRENT = 0x00, /* Get device infor. */ SUBCMD_GET_DEV_INFO = 0x01, }; /* set correction data use subfn */ enum _iot_light_sub_command_set_correction_data_e { SUBCMD_SET_COR_DATA_IN_POWER = 0x01, SUBCMD_SET_COR_DATA_IN_VOLTAGE = 0x02, SUBCMD_SET_COR_DATA_IN_CURRENT = 0x03, SUBCMD_SET_COR_DATA_OUTPUT_CURRENT = 0x04 }; /* get correction param use subfn */ enum _iot_light_sub_command_get_correction_param_e { SUBCMD_GET_COR_PARAM_METER = 0x01 }; /* set correction param use subfn */ enum _iot_light_sub_command_set_correction_param_e { SUBCMD_SET_COR_PARAM_LIGHT_LEVEL = 0x01 }; /* remote platform send percent of brightness is 0.5% for one step. 200/2 = 100 */ #define IOT_LIGHT_BRIGHTNESS_RAW_LEVEL_MAX 200 #define IOT_LIGHT_BRIGHTNESS_SHUTDOWN_THRESHOLD 50 /* less than 30% */ #define IOT_LIGHT_BRIGHTNESS_OPENLOOP_THRESHOLD \ IOT_LIGHT_BRIGHTNESS_SHUTDOWN_THRESHOLD #define IOT_LIGHT_BRIGHTNESS_MAX_LEVEL_THRESHOLD 100 /* 100% */ #define IOT_LIGHT_BRIGHTNESS_DEFAULT \ IOT_LIGHT_BRIGHTNESS_MAX_LEVEL_THRESHOLD /* max level as default */ #define IOT_LIGHT_CORRECTION_PARAM_SIZE (10) /* table size */ /* Command & response frames defination. */ #pragma pack(push) #pragma pack(1) /* Command frames for enum _iot_light_driver_command_e. */ /* frame format for command CMD_GET_PARAM */ typedef struct _iot_light_cmd_frame_get_param_t { uint8_t opcode; uint8_t data; uint8_t check_sum; } iot_cmd_frm_get_param_t; /* frame format for command CMD_SET_LIGHT_LEVEL_AB */ typedef struct _iot_light_cmd_frame_set_light_level_ab_t { uint8_t opcode; uint8_t level; uint8_t check_sum; } iot_cmd_frm_set_light_level_ab_t; /* frame format for command CMD_SET_LIGHT_LEVEL_GRP */ typedef struct _iot_light_cmd_frame_set_light_level_group_t { uint8_t opcode; uint8_t group; uint8_t channel; uint8_t level; uint8_t check_sum; } iot_cmd_frm_set_light_level_grp_t; /* frame format for command CMD_SET_LIGHT_LEVEL_A */ typedef struct _iot_light_cmd_frame_set_light_level_a_t { uint8_t opcode; uint8_t level; uint8_t check_sum; } iot_cmd_frm_set_light_level_a_t; /* frame format for command CMD_SET_LIGHT_LEVEL_B */ typedef struct _iot_light_cmd_frame_set_light_level_b_t { uint8_t opcode; uint8_t level; uint8_t check_sum; } iot_cmd_frm_set_light_level_b_t; /* frame format for command CMD_SET_GROUP */ typedef struct _iot_light_cmd_frame_set_group_t { uint8_t opcode; uint8_t group; uint8_t check_sum; } iot_cmd_frm_set_group_t; /* frame format for command CMD_PRIVATE_COMMAND */ typedef struct _iot_light_cmd_private_command_t { uint8_t opcode; uint8_t sub_opcode; uint8_t data[0]; } iot_cmd_frm_private_command_t; #define IOT_LIGHT_MIN_FRAME_LEN 3 /* Response frames for enum _iot_light_driver_response_e */ /* frame format for response RESP_GET_PARAM */ typedef struct _iot_light_resp_frame_get_param_t { uint8_t opcode; uint8_t device_type; int8_t temperature; uint8_t voltage_in_h; uint8_t voltage_in_l; uint8_t current_in_h; uint8_t current_in_l; uint8_t voltage_out_h; uint8_t voltage_out_l; uint8_t current_out_h; uint8_t current_out_l; uint8_t power_in_h; uint8_t power_in_l; uint8_t factor; uint8_t reserved0; uint8_t level; uint8_t reserved1; uint8_t power_state_h; uint8_t power_state_l; uint8_t check_sum; } iot_resp_frm_get_param_t; /* report power state frames */ /* frame format for response REPORT_POWER_STATE */ typedef struct _iot_light_report_power_state_t { uint8_t opcode; uint8_t power_state_h; uint8_t power_state_l; uint8_t check_sum; } iot_light_report_power_state_t; /* frame format for command CMD_REPORT_POWER_STATE_ACK */ typedef struct _iot_light_cmd_frame_report_ack_t { uint8_t opcode; uint8_t result; uint8_t check_sum; } iot_light_cmd_frame_report_ack_t; /* frame format for response RESP_SET_LIGHT_LEVEL_AB */ typedef struct _iot_light_resp_frame_set_light_level_ab_t { uint8_t opcode; uint8_t level; uint8_t check_sum; } iot_resp_frm_set_light_level_ab_t; /* frame format for response RESP_SET_LIGHT_LEVEL_A */ typedef struct _iot_light_resp_frame_set_light_level_a_t { uint8_t opcode; uint8_t level; uint8_t check_sum; } iot_resp_frm_set_light_level_a_t; /* frame format for response RESP_SET_LIGHT_LEVEL_B */ typedef struct _iot_light_resp_frame_set_light_level_b_t { uint8_t opcode; uint8_t level; uint8_t check_sum; } iot_resp_frm_set_light_level_b_t; /* frame format for response RESP_SET_GROUP */ typedef struct _iot_light_resp_frame_set_group_t { uint8_t opcode; uint8_t group; uint8_t check_sum; } iot_resp_frm_set_group_t; /* frame format for response RESP_PRIVATE_COMMAND */ typedef struct _iot_light_resp_private_command_t { uint8_t opcode; uint8_t sub_opcode; } iot_resp_frm_private_command_t; /* frame format for response SUBCMD_GET_LEAKAGE_CURRENT */ typedef struct _iot_light_resp_frame_private_sub_get_leakage_current_t { uint8_t current_h; /* Current in mA, upper 8 bits. */ uint8_t current_l; /* Current in mA, lower 8 bits. */ } iot_resp_frm_prv_sub_get_leakage_current_t; /* frame format for response SUBCMD_GET_FW_VERSION */ typedef struct _iot_light_resp_frame_private_sub_get_dev_info_t { uint32_t fw_ver; /* version of firmware */ uint8_t local_mac[IOT_MAC_ADDR_LEN]; /* mac address of this device. */ } iot_resp_frm_prv_sub_get_dev_info_t; typedef struct _iot_light_correction_header_t { uint8_t cmd_type; uint8_t subfn; } iot_light_correction_header_t; /* frame format for command SUBCMD_SET_COR_DATA_IN_POWER */ typedef struct _iot_light_correction_input_power_t { iot_light_correction_header_t header; uint32_t input_power_slope; uint32_t input_power_intercept; uint8_t check_sum; } iot_light_correction_input_power_t; /* frame format for correction command SUBCMD_SET_COR_DATA_IN_VOLTAGE */ typedef struct _iot_light_correction_input_voltage_t { iot_light_correction_header_t header; uint32_t input_voltage_slope; uint32_t input_voltage_intercept; uint8_t check_sum; } iot_light_correction_input_voltage_t; /* frame format for correction command SUBCMD_SET_COR_DATA_IN_CURRENT */ typedef struct _iot_light_correction_input_current_t { iot_light_correction_header_t header; uint32_t input_current_slope; uint32_t input_current_intercept; uint8_t check_sum; } iot_light_correction_input_current_t; /* frame format for correction command SUBCMD_SET_COR_DATA_OUTPUT_CURRENT */ typedef struct _iot_light_correction_output_current_t { iot_light_correction_header_t header; uint8_t set_cur; uint8_t real_cur; uint8_t check_sum; } iot_light_correction_output_current_t; /* frame format for command RESP_SET_CORRECTION_DATA */ typedef struct _iot_light_resp_set_correction_t { iot_light_correction_header_t header; uint8_t result; uint8_t check_sum; } iot_light_resp_set_correction_t; /* frame format for command CMD_GET_CORRECTION_PARAM */ typedef struct _iot_light_get_correction_param_t { iot_light_correction_header_t header; uint8_t check_sum; } iot_light_get_correction_param_t; /* frame format for command RESP_GET_CORRECTION_PARAM */ typedef struct _iot_light_resp_get_cor_param_t { iot_light_correction_header_t header; uint8_t result; uint16_t power; uint16_t voltage; uint16_t current; uint8_t check_sum; } iot_light_resp_get_cor_param_t; /* frame format for command CMD_SET_CORRECTION_PARAM */ typedef struct _iot_light_set_correction_param_t { iot_light_correction_header_t header; uint8_t level; uint8_t check_sum; } iot_light_set_correction_param_t; /* frame format for command RESP_SET_CORRECTION_PARAM */ typedef struct _iot_light_resp_set_cor_param_t { iot_light_correction_header_t header; uint8_t result; uint8_t check_sum; } iot_light_resp_set_cor_param_t; /* the led information need save flash */ typedef struct _iot_led_pib_info_t { /* cco mac */ uint8_t cco_mac[IOT_MAC_ADDR_LEN]; /* the group be setted */ uint8_t group; /* the channel a level */ uint8_t level_a; /* the channel b level */ uint8_t level_b; /* the correction input power setted flag. */ uint8_t input_power : 1, /* the correction input voltage setted flag. */ input_voltage : 1, /* the correction input current setted flag. */ input_current : 1, /* the correction output current table setted flag. */ output_current : 1, /* reserved for future */ resv : 5; /* the correction input power slope and intercept. */ float input_power_slope; float input_power_intercept; /* the correction input voltage slope and intercept. */ float input_vol_slope; float input_vol_intercept; /* the correction input current slope and intercept. */ float input_cur_slope; float input_cur_intercept; /* the correction output current table. */ uint8_t cor_param[IOT_LIGHT_CORRECTION_PARAM_SIZE]; } iot_led_pib_info_t; #pragma pack(pop) /** * @brief iot_led_crtl_msg_post_to_led_task() - message post to led task. * @data : pkt data of this message. */ uint32_t iot_led_crtl_msg_post_to_led(iot_pkt_t *p_pkt_frame); /** * @brief iot_led_ctrl_register_get_data_fn() - register a function to led task * to send data to ge. * @fn : pointer of function. */ void iot_led_ctrl_register_get_data_fn(void *fn); /** * @brief iot_led_crtl_set_mac() - set cco mac to led task, then led task * runs data to ge. * @cco : cco mac address. */ void iot_led_crtl_set_mac(uint8_t *cco); /** * @brief iot_led_ctrl_task_init() - initialize this module. * @return ERR_FAIL - Operation failed, ERR_OK - Operation Successful. */ uint32_t iot_led_ctrl_task_init(void); #endif