示例#1
0
/******************************************************************************
 * FunctionName : user_light_init
 * Description  : light demo init, mainy init pwm
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_light_init(void)
{
    spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
                               (uint32 *)&light_param, sizeof(struct light_saved_param));
    if(light_param.pwm_period>10000 || light_param.pwm_period <1000){
            light_param.pwm_period = 1000;
    }

	uint32 io_info[][3] = {   {PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM},
		                      {PWM_1_OUT_IO_MUX,PWM_1_OUT_IO_FUNC,PWM_1_OUT_IO_NUM},
		                      {PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM},
		                      {PWM_3_OUT_IO_MUX,PWM_3_OUT_IO_FUNC,PWM_3_OUT_IO_NUM},
		                      {PWM_4_OUT_IO_MUX,PWM_4_OUT_IO_FUNC,PWM_4_OUT_IO_NUM},
		                      };
	
    uint32 pwm_duty_init[PWM_CHANNEL] = {0};
	
    /*PIN FUNCTION INIT FOR PWM OUTPUT*/
    pwm_init(light_param.pwm_period,  pwm_duty_init ,PWM_CHANNEL,io_info);
    
    os_printf("LIGHT PARAM: R: %d \r\n",light_param.pwm_duty[LIGHT_RED]);
    os_printf("LIGHT PARAM: G: %d \r\n",light_param.pwm_duty[LIGHT_GREEN]);
    os_printf("LIGHT PARAM: B: %d \r\n",light_param.pwm_duty[LIGHT_BLUE]);
    if(PWM_CHANNEL>LIGHT_COLD_WHITE){
        os_printf("LIGHT PARAM: CW: %d \r\n",light_param.pwm_duty[LIGHT_COLD_WHITE]);
        os_printf("LIGHT PARAM: WW: %d \r\n",light_param.pwm_duty[LIGHT_WARM_WHITE]);
    }
    os_printf("LIGHT PARAM: P: %d \r\n",light_param.pwm_period);

    uint32 light_init_target[8]={0};
    os_memcpy(light_init_target,light_param.pwm_duty,sizeof(light_param.pwm_duty));
#if SAVE_LIGHT_PARAM

    light_set_aim(  light_init_target[LIGHT_RED],
	                light_init_target[LIGHT_GREEN],
	                light_init_target[LIGHT_BLUE], 
	                light_init_target[LIGHT_COLD_WHITE],
	                light_init_target[LIGHT_WARM_WHITE],
	                light_param.pwm_period,0);
#else
    light_set_aim(  0,
	                0,
	                0, 
	                22222,
	                22222,
	                light_param.pwm_period,0);

#endif
    set_pwm_debug_en(0);//disable debug print in pwm driver
    os_printf("PWM version : %08x \r\n",get_pwm_version());
}
void ICACHE_FLASH_ATTR
	light_set_color(uint32 r,uint32 g,uint32 b,uint32 cw,uint32 ww,uint32 period)
{
	os_timer_disarm(&light_hint_t);
	uint32 d_color[] = {r,g,b,cw,ww};
	light_MeshStoreSetParam(&light_param_target,period,d_color);
    light_set_aim(r,g,b,cw,ww,period,0);
}
void ICACHE_FLASH_ATTR
conect_ap_cb(void*p)
{
	light_set_aim(      
		         		0,
    	                0,
    	                0, 
    	                20000,
    	                20000,
    	                1000);
}
LOCAL void ICACHE_FLASH_ATTR
light_shade(int color)
{
    static bool color_flg = true;
    #if 1
    static uint32 cnt=0;
    if(shade_cnt != 0){	
        if(cnt >= (2*shade_cnt)){
            cnt = 0;
            color_flg = true;
            os_timer_disarm(&light_hint_t);
            LIGHT_INFO("RECOVER LIGHT PARAM; light_shade: \r\n");
			#if ESP_DEBUG_MODE
			if(light_error_flag){
                light_set_aim(light_param_error.pwm_duty[0],light_param_error.pwm_duty[1],light_param_error.pwm_duty[2],
                              light_param_error.pwm_duty[3],light_param_error.pwm_duty[4],light_param_error.pwm_period,0);
			}else{
                light_set_aim(light_param_target.pwm_duty[0],light_param_target.pwm_duty[1],light_param_target.pwm_duty[2],
                              light_param_target.pwm_duty[3],light_param_target.pwm_duty[4],light_param_target.pwm_period,0);
			}
			#else
			light_set_aim(light_param_target.pwm_duty[0],light_param_target.pwm_duty[1],light_param_target.pwm_duty[2],
						  light_param_target.pwm_duty[3],light_param_target.pwm_duty[4],light_param_target.pwm_period,0);
			#endif
            return;
        }else if(cnt==0){
            color_flg = true;
        }
        cnt++;
    }
    #endif
    
    if(color_flg){
		light_show_hint_color(color);      
        color_flg = false;
    }
    else{
        light_set_aim(0,0,0,1000,1000,1000,0);
        color_flg = true;
    }
}
void ICACHE_FLASH_ATTR
user_light_cancel(void)
{
	os_printf("user_light_cancel\n");
	light_set_aim(      
		         		20000,
    	                0,
    	                0, 
    	                0,
    	                0,
    	                1000);
}
void ICACHE_FLASH_ATTR
	light_ColorRecover()
{

	#if ESP_DEBUG_MODE
    if(light_error_flag){
        light_error_flag = false;
		light_set_aim(light_param_error.pwm_duty[0],light_param_error.pwm_duty[1],light_param_error.pwm_duty[2],
					  light_param_error.pwm_duty[3],light_param_error.pwm_duty[4],light_param_error.pwm_period,0);
		LIGHT_INFO("RECOVER LIGHT PARAM ;light_ColorRecover: \r\n");
		LIGHT_INFO("r: %d ; g: %d ; b: %d ;ww: %d ; cw: %d \r\n",light_param_error.pwm_duty[0],light_param_error.pwm_duty[1],light_param_error.pwm_duty[2],
																light_param_error.pwm_duty[3],light_param_error.pwm_duty[4]);
		return;
    }
	#endif
	
    light_set_aim(light_param_target.pwm_duty[0],light_param_target.pwm_duty[1],light_param_target.pwm_duty[2],
                  light_param_target.pwm_duty[3],light_param_target.pwm_duty[4],light_param_target.pwm_period,0);
    LIGHT_INFO("RECOVER LIGHT PARAM ;light_ColorRecover: \r\n");
    LIGHT_INFO("r: %d ; g: %d ; b: %d ;ww: %d ; cw: %d \r\n",light_param_target.pwm_duty[0],light_param_target.pwm_duty[1],light_param_target.pwm_duty[2],
                                                            light_param_target.pwm_duty[3],light_param_target.pwm_duty[4]);
}
void ICACHE_FLASH_ATTR 
light_show_hint_color(uint32 color)
{
    switch(color){
    	case HINT_GREEN:
    		light_set_aim(0,20000,0,2000,2000,1000,0);
    		break;
    	case HINT_RED:
    		light_set_aim(20000,0,0,2000,2000,1000,0);
    		break;
    	case HINT_BLUE:
    		light_set_aim(0,0,20000,2000,2000,1000,0);
    		break;
    	case HINT_WHITE:
    		light_set_aim(0,0,0,20000,20000,1000,0);
    		break;
    	case HINT_PURE_RED:
    		light_set_aim(22222,0,0,0,0,1000,0);
    		break;
    	case HINT_PURE_GREEN:
    		light_set_aim(0,22222,0,0,0,1000,0);
    		break;
    	case HINT_PURE_BLUE:
    		light_set_aim(0,0,22222,0,0,1000,0);
    		break;
		case HINT_TARGET:
            light_set_aim(light_param_target.pwm_duty[0],light_param_target.pwm_duty[1],light_param_target.pwm_duty[2],
            light_param_target.pwm_duty[3],light_param_target.pwm_duty[4],light_param_target.pwm_period,0);
			break;
		case HINT_YELLOW:
			light_set_aim(22222,22222,0,0,0,1000,0);
			break;
		case HINT_PURPLE:
			light_set_aim(0,22222,22222,0,0,1000,0);
			break;
    }
}
void ICACHE_FLASH_ATTR
user_light_connect_ap(void)
{
	light_set_aim(      
		         		0,
    	                0,
    	                20000, 
    	                0,
    	                0,
    	                1000);
	os_timer_disarm(&conect_timer);
	os_timer_setfn(&conect_timer, conect_ap_cb, NULL);
	os_timer_arm(&conect_timer,2000,0);
	os_printf("user_light_connect_ap\n");
}
/******************************************************************************
 * FunctionName : user_light_init
 * Description  : light demo init, mainy init pwm
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_light_init(void)
{

	uint32 io_info[][3] = {   {PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM},
		                      {PWM_1_OUT_IO_MUX,PWM_1_OUT_IO_FUNC,PWM_1_OUT_IO_NUM},
		                      {PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM},
		                      {PWM_3_OUT_IO_MUX,PWM_3_OUT_IO_FUNC,PWM_3_OUT_IO_NUM},
		                      {PWM_4_OUT_IO_MUX,PWM_4_OUT_IO_FUNC,PWM_4_OUT_IO_NUM},
		                      };
	
    uint32 pwm_duty_init[PWM_CHANNEL] = {0};
	os_memcpy(light_param.pwm_duty,pwm_duty_init,sizeof(pwm_duty_init));
	
	light_param.pwm_period = 1000;
	
    /*PIN FUNCTION INIT FOR PWM OUTPUT*/
    pwm_init(light_param.pwm_period,  pwm_duty_init ,PWM_CHANNEL,io_info);
    
    os_printf("LIGHT PARAM: R: %d \r\n",light_param.pwm_duty[LIGHT_RED]);
    os_printf("LIGHT PARAM: G: %d \r\n",light_param.pwm_duty[LIGHT_GREEN]);
    os_printf("LIGHT PARAM: B: %d \r\n",light_param.pwm_duty[LIGHT_BLUE]);
    if(PWM_CHANNEL>LIGHT_COLD_WHITE){
        os_printf("LIGHT PARAM: CW: %d \r\n",light_param.pwm_duty[LIGHT_COLD_WHITE]);
        os_printf("LIGHT PARAM: WW: %d \r\n",light_param.pwm_duty[LIGHT_WARM_WHITE]);
    }
    os_printf("LIGHT PARAM: P: %d \r\n",light_param.pwm_period);

    //uint32 light_init_target[8]={0};
    //os_memcpy(light_init_target,light_param.pwm_duty,sizeof(light_param.pwm_duty));

    light_set_aim(      
		         pwm_duty_init[LIGHT_RED],
    	                pwm_duty_init[LIGHT_GREEN],
    	                pwm_duty_init[LIGHT_BLUE], 
    	                20000,
    	                20000,
    	                light_param.pwm_period);
	
    set_pwm_debug_en(0);//disable debug print in pwm driver
    os_printf("PWM version : %08x \r\n",get_pwm_version());
}
示例#10
0
void ICACHE_FLASH_ATTR
user_light_init(void)
{
    spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
                               (uint32 *)&light_param, sizeof(struct light_saved_param));
    light_param.pwm_period = 1000;

	uint32 io_info[][3] = {{PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM},
		                      {PWM_1_OUT_IO_MUX,PWM_1_OUT_IO_FUNC,PWM_1_OUT_IO_NUM},
		                      {PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM}};
       uint32 pwm_duty_init[3] = {0,0,0};
pwm_init(light_param.pwm_period,  pwm_duty_init ,PWM_CHANNEL,io_info);

light_set_aim(light_param.pwm_duty[LIGHT_RED],
	                light_param.pwm_duty[LIGHT_GREEN],
	                light_param.pwm_duty[LIGHT_BLUE], 
	                0);
    set_pwm_debug_en(0);
    os_printf("PWM version : %08x \r\n",get_pwm_version());
}
/******************************************************************************
 * FunctionName : user_light_init
 * Description  : light demo init, mainy init pwm
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void  user_light_init(void)
{
    /*init to off*/
    uint32 pwm_duty_init[PWM_CHANNEL];
    light_param.pwm_period = 1000;
    memset(pwm_duty_init,0,PWM_CHANNEL*sizeof(uint32));
    pwm_init(light_param.pwm_period, pwm_duty_init,PWM_CHANNEL,pwmio_info); 

    /*set target valuve from memory*/
    spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,(uint32 *)&light_param, sizeof(struct light_saved_param));
    if(light_param.pwm_period>10000 || light_param.pwm_period <1000){
            light_param.pwm_period = 1000;
            light_param.pwm_duty[0]= APP_MAX_PWM;
            light_param.pwm_duty[1]= APP_MAX_PWM;
            light_param.pwm_duty[2]= APP_MAX_PWM;
            light_param.pwm_duty[3]= APP_MAX_PWM;
            light_param.pwm_duty[4]= APP_MAX_PWM;
    }
    printf("LIGHT P:%d",light_param.pwm_period);
    printf(" R:%d",light_param.pwm_duty[LIGHT_RED]);
    printf(" G:%d",light_param.pwm_duty[LIGHT_GREEN]);
    printf(" B:%d",light_param.pwm_duty[LIGHT_BLUE]);
    if(PWM_CHANNEL>LIGHT_COLD_WHITE){
        printf(" CW:%d",light_param.pwm_duty[LIGHT_COLD_WHITE]);
        printf(" WW:%d\r\n",light_param.pwm_duty[LIGHT_WARM_WHITE]);
    }else{
        printf("\r\n");
    }

    light_set_aim(light_param.pwm_duty[LIGHT_RED],
                    light_param.pwm_duty[LIGHT_GREEN],
                    light_param.pwm_duty[LIGHT_BLUE], 
                    light_param.pwm_duty[LIGHT_COLD_WHITE],
                    light_param.pwm_duty[LIGHT_WARM_WHITE],
                    light_param.pwm_period);
        
	return;
}
void user_esp_pwm_test_task(void *pvParameters)
{
	uint32 r,g,b,cw,ww,period;

	r = 0;
	g = 0;
	b = 0;
	cw = 0;

	period = 1000;

	while(1)   // a demo test pwm
	{
		ESP_DBG(("*****test****r:%d,g:%d,b:%d,cw:%d,ww:%d",r,g,b,cw,ww));
        light_set_aim(r,g,b,cw,ww,period);

		r+=5;
		g+=5;
		b+=5;
		cw+=5;
		ww+=5;
		
		if(r>100)
			r = 0;
		if(g>100)
			g = 0;
		if(b>100)
			b = 0;
		if(cw>100)
			cw = 0;
		if(ww>100)
			ww = 0;
		vTaskDelay(50);
	}
	vTaskDelete(NULL);
	return;
}
示例#13
0
文件: sample.c 项目: hwwr/test
/*get json cmd from server 服务器下发命令,需要设备端根据具体业务设定去解析处理*/
int ICACHE_FLASH_ATTR main_dev_set_device_status_callback(alink_down_cmd_ptr down_cmd)
{

	json_value *jptr;
	json_value *jstr;
	json_value *jstr_value;
	int value = 0, i = 0;
	char *value_str = NULL;

	wsf_deb("%s %d \n", __FUNCTION__, __LINE__);
	wsf_deb("%s %d\n%s\n", down_cmd->uuid, down_cmd->method, down_cmd->param);

	jptr = json_parse(down_cmd->param, strlen(down_cmd->param));
#if USER_UART_CTRL_DEV_EN
	for (i = 0; i < 5; i++)
	{
		jstr = json_object_object_get_e(jptr, device_attr[i]);
		jstr_value = json_object_object_get_e(jstr, "value");
		value_str = json_object_to_json_string_e(jstr_value);

		if (value_str) {
			value = atoi(value_str);
			cus_wifi_handler_alinkdata2mcu(i, value);

			ESP_DBG(("power:0x%X,temp_value:0x%X,light_value:0x%X,time_delay:0x%X,woke_mode:0x%X", virtual_device.power, \
				virtual_device.temp_value, virtual_device.light_value, virtual_device.time_delay, virtual_device.work_mode));
		}
	}
#endif
#if USER_PWM_LIGHT_EN
	USER_LIGHT_DATA *user_light_data_ptr = zalloc(sizeof(USER_LIGHT_DATA));
	// Set r g b w data,Developers need to parse the real device parameters corresponding to the Json package
	light_set_aim(user_light_data_ptr->light_r, user_light_data_ptr->light_g, user_light_data_ptr->light_b, user_light_data_ptr->light_cw, user_light_data_ptr->light_ww, user_light_data_ptr->light_period);

	free(user_light_data_ptr);
#endif
#if USER_VIRTUAL_DEV_TEST
	for (i = 0; i < 5; i++)
	{
		jstr = json_object_object_get_e(jptr, device_attr[i]);
		jstr_value = json_object_object_get_e(jstr, "value");
		value_str = json_object_to_json_string_e(jstr_value);
		if (value_str) {
			value = atoi(value_str);
			switch (i) {
			case 0:
				if (virtual_device.power != value) {
					virtual_device.power = value;
				}
				break;
			case 1:
				if (virtual_device.temp_value != value) {
					virtual_device.temp_value = value;
				}
				break;
			case 2:
				if (virtual_device.light_value != value) {
					virtual_device.light_value = value;
				}
				break;
			case 3:
				if (virtual_device.time_delay != value) {
					virtual_device.time_delay = value;
				}
				break;
			case 4:
				if (virtual_device.work_mode != value) {
					virtual_device.work_mode = value;
				}
				break;
			default:
				break;
			}
		}
	}
#endif

	json_value_free(jptr);
	device_status_change = 1;   // event send current real device status to the alink server

	return 0;		// alink_device_post_data(down_cmd);
					/* do your job end! */
}