123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /******************************************************************************
- * Copyright 2013-2014 Espressif Systems (Wuxi)
- *
- * FileName: user_light.c
- *
- * Description: light demo's function realization
- *
- * Modification history:
- * 2014/5/1, v1.0 create this file.
- *******************************************************************************/
- #include "ets_sys.h"
- #include "osapi.h"
- #include "os_type.h"
- #include "mem.h"
- #include "user_interface.h"
- #include "user_light.h"
- #include "pwm.h"
- #if LIGHT_DEVICE
- struct light_saved_param light_param;
- /******************************************************************************
- * FunctionName : user_light_get_duty
- * Description : get duty of each channel
- * Parameters : uint8 channel : LIGHT_RED/LIGHT_GREEN/LIGHT_BLUE
- * Returns : NONE
- *******************************************************************************/
- uint32 ICACHE_FLASH_ATTR
- user_light_get_duty(uint8 channel)
- {
- return light_param.pwm_duty[channel];
- }
- /******************************************************************************
- * FunctionName : user_light_set_duty
- * Description : set each channel's duty params
- * Parameters : uint8 duty : 0 ~ PWM_DEPTH
- * uint8 channel : LIGHT_RED/LIGHT_GREEN/LIGHT_BLUE
- * Returns : NONE
- *******************************************************************************/
- void ICACHE_FLASH_ATTR
- user_light_set_duty(uint32 duty, uint8 channel)
- {
- if (duty != light_param.pwm_duty[channel]) {
- pwm_set_duty(duty, channel);
- light_param.pwm_duty[channel] = pwm_get_duty(channel);
- }
- }
- /******************************************************************************
- * FunctionName : user_light_get_period
- * Description : get pwm period
- * Parameters : NONE
- * Returns : uint32 : pwm period
- *******************************************************************************/
- uint32 ICACHE_FLASH_ATTR
- user_light_get_period(void)
- {
- return light_param.pwm_period;
- }
- /******************************************************************************
- * FunctionName : user_light_set_duty
- * Description : set pwm frequency
- * Parameters : uint16 freq : 100hz typically
- * Returns : NONE
- *******************************************************************************/
- void ICACHE_FLASH_ATTR
- user_light_set_period(uint32 period)
- {
- if (period != light_param.pwm_period) {
- pwm_set_period(period);
- light_param.pwm_period = pwm_get_period();
- }
- }
- void ICACHE_FLASH_ATTR
- user_light_restart(void)
- {
- spi_flash_erase_sector(PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE);
- spi_flash_write((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
- (uint32 *)&light_param, sizeof(struct light_saved_param));
- pwm_start();
- }
- /******************************************************************************
- * 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));
- 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);
- set_pwm_debug_en(0);//disable debug print in pwm driver
- os_printf("PWM version : %08x \r\n",get_pwm_version());
- }
- #endif
|