user_light.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /******************************************************************************
  2. * Copyright 2013-2014 Espressif Systems (Wuxi)
  3. *
  4. * FileName: user_light.c
  5. *
  6. * Description: light demo's function realization
  7. *
  8. * Modification history:
  9. * 2014/5/1, v1.0 create this file.
  10. *******************************************************************************/
  11. #include "ets_sys.h"
  12. #include "osapi.h"
  13. #include "os_type.h"
  14. #include "mem.h"
  15. #include "user_interface.h"
  16. #include "user_light.h"
  17. #include "pwm.h"
  18. #if LIGHT_DEVICE
  19. struct light_saved_param light_param;
  20. /******************************************************************************
  21. * FunctionName : user_light_get_duty
  22. * Description : get duty of each channel
  23. * Parameters : uint8 channel : LIGHT_RED/LIGHT_GREEN/LIGHT_BLUE
  24. * Returns : NONE
  25. *******************************************************************************/
  26. uint32 ICACHE_FLASH_ATTR
  27. user_light_get_duty(uint8 channel)
  28. {
  29. return light_param.pwm_duty[channel];
  30. }
  31. /******************************************************************************
  32. * FunctionName : user_light_set_duty
  33. * Description : set each channel's duty params
  34. * Parameters : uint8 duty : 0 ~ PWM_DEPTH
  35. * uint8 channel : LIGHT_RED/LIGHT_GREEN/LIGHT_BLUE
  36. * Returns : NONE
  37. *******************************************************************************/
  38. void ICACHE_FLASH_ATTR
  39. user_light_set_duty(uint32 duty, uint8 channel)
  40. {
  41. if (duty != light_param.pwm_duty[channel]) {
  42. pwm_set_duty(duty, channel);
  43. light_param.pwm_duty[channel] = pwm_get_duty(channel);
  44. }
  45. }
  46. /******************************************************************************
  47. * FunctionName : user_light_get_period
  48. * Description : get pwm period
  49. * Parameters : NONE
  50. * Returns : uint32 : pwm period
  51. *******************************************************************************/
  52. uint32 ICACHE_FLASH_ATTR
  53. user_light_get_period(void)
  54. {
  55. return light_param.pwm_period;
  56. }
  57. /******************************************************************************
  58. * FunctionName : user_light_set_duty
  59. * Description : set pwm frequency
  60. * Parameters : uint16 freq : 100hz typically
  61. * Returns : NONE
  62. *******************************************************************************/
  63. void ICACHE_FLASH_ATTR
  64. user_light_set_period(uint32 period)
  65. {
  66. if (period != light_param.pwm_period) {
  67. pwm_set_period(period);
  68. light_param.pwm_period = pwm_get_period();
  69. }
  70. }
  71. void ICACHE_FLASH_ATTR
  72. user_light_restart(void)
  73. {
  74. spi_flash_erase_sector(PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE);
  75. spi_flash_write((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
  76. (uint32 *)&light_param, sizeof(struct light_saved_param));
  77. pwm_start();
  78. }
  79. /******************************************************************************
  80. * FunctionName : user_light_init
  81. * Description : light demo init, mainy init pwm
  82. * Parameters : none
  83. * Returns : none
  84. *******************************************************************************/
  85. void ICACHE_FLASH_ATTR
  86. user_light_init(void)
  87. {
  88. spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
  89. (uint32 *)&light_param, sizeof(struct light_saved_param));
  90. if(light_param.pwm_period>10000 || light_param.pwm_period <1000){
  91. light_param.pwm_period = 1000;
  92. }
  93. uint32 io_info[][3] = { {PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM},
  94. {PWM_1_OUT_IO_MUX,PWM_1_OUT_IO_FUNC,PWM_1_OUT_IO_NUM},
  95. {PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM},
  96. {PWM_3_OUT_IO_MUX,PWM_3_OUT_IO_FUNC,PWM_3_OUT_IO_NUM},
  97. {PWM_4_OUT_IO_MUX,PWM_4_OUT_IO_FUNC,PWM_4_OUT_IO_NUM},
  98. };
  99. uint32 pwm_duty_init[PWM_CHANNEL] = {0};
  100. /*PIN FUNCTION INIT FOR PWM OUTPUT*/
  101. pwm_init(light_param.pwm_period, pwm_duty_init ,PWM_CHANNEL,io_info);
  102. os_printf("LIGHT PARAM: R: %d \r\n",light_param.pwm_duty[LIGHT_RED]);
  103. os_printf("LIGHT PARAM: G: %d \r\n",light_param.pwm_duty[LIGHT_GREEN]);
  104. os_printf("LIGHT PARAM: B: %d \r\n",light_param.pwm_duty[LIGHT_BLUE]);
  105. if(PWM_CHANNEL>LIGHT_COLD_WHITE){
  106. os_printf("LIGHT PARAM: CW: %d \r\n",light_param.pwm_duty[LIGHT_COLD_WHITE]);
  107. os_printf("LIGHT PARAM: WW: %d \r\n",light_param.pwm_duty[LIGHT_WARM_WHITE]);
  108. }
  109. os_printf("LIGHT PARAM: P: %d \r\n",light_param.pwm_period);
  110. uint32 light_init_target[8]={0};
  111. os_memcpy(light_init_target,light_param.pwm_duty,sizeof(light_param.pwm_duty));
  112. light_set_aim(
  113. light_init_target[LIGHT_RED],
  114. light_init_target[LIGHT_GREEN],
  115. light_init_target[LIGHT_BLUE],
  116. light_init_target[LIGHT_COLD_WHITE],
  117. light_init_target[LIGHT_WARM_WHITE],
  118. light_param.pwm_period);
  119. set_pwm_debug_en(0);//disable debug print in pwm driver
  120. os_printf("PWM version : %08x \r\n",get_pwm_version());
  121. }
  122. #endif