426 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			426 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #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
 |