u_light_ctrl.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. #include "u_light_ctrl.h"
  2. #include "u_effect_color.h"
  3. #include "u_effect_rhythm.h"
  4. #include "u_app_handler.h"
  5. #include "u_effect_normal.h"
  6. #include "u_app_handler.h"
  7. #include "u_pwm_drive.h"
  8. void light_power_set(uint8_t set_state)
  9. {
  10. if (set_state == GLO_EN)
  11. {
  12. g_light_para.power_st = GLO_EN;
  13. if (g_light_para.app_mode[0] < LIGHT_APP_MODE_RC_MIN)
  14. {
  15. light_mode_set(g_light_para.app_mode);
  16. }
  17. else
  18. {
  19. rc_mode_enter(g_light_para.rc_mode);
  20. }
  21. }
  22. else
  23. {
  24. g_light_para.power_st = GLO_DIS;
  25. u_rhythm_timer_ctrl(GLO_DIS);
  26. light_effect_timer_stop();
  27. light_set_color(0x00);
  28. }
  29. U_UART_PRINTF("power_st = %d\n", g_light_para.power_st);
  30. }
  31. void light_speed_ctrl(uint8_t light_speed)
  32. {
  33. // if (change_speed <= 0 || change_speed > 11 || g_light_para.effect == LIGHT_EFFECT_STATIC || g_light_para.effect == LIGHT_EFFECT_RHYTHM)
  34. // {
  35. // return;
  36. // }
  37. g_light_para.app_speed = light_speed;
  38. g_light_para.speed = (110 - light_speed) / 10;
  39. U_UART_PRINTF("g_speed = %d\n", g_light_para.speed);
  40. if (g_light_para.speed > LIGHT_SPEED_MAX)
  41. {
  42. light_effect_timer_stop();
  43. return;
  44. }
  45. switch (g_light_para.effect)
  46. {
  47. // case LIGHT_EFFECT_NULL:
  48. // {
  49. // u_analog_timer_stop(&g_ag_timer_light_effect);
  50. // }
  51. // break;
  52. case LIGHT_EFFECT_JUMP:
  53. {
  54. light_mode_jump_cfg(&g_light_info, 0, 0, g_light_para.speed, 0);
  55. }
  56. break;
  57. case LIGHT_EFFECT_GRADUAL:
  58. {
  59. light_mode_gradual_cfg(&g_light_info, 0, 0, g_light_para.speed, 0);
  60. }
  61. break;
  62. case LIGHT_EFFECT_BREATH:
  63. {
  64. light_mode_breath_cfg(&g_light_info, 0, 0, g_light_para.speed, 0);
  65. }
  66. break;
  67. case LIGHT_EFFECT_BLINK:
  68. {
  69. light_mode_blink_cfg(&g_light_info, 0, 0, 0, g_light_para.speed, 0);
  70. }
  71. break;
  72. default:
  73. {
  74. U_UART_PRINTF("speed_false\n");
  75. //u_analog_timer_stop(&g_ag_timer_light_effect);
  76. }
  77. break;
  78. }
  79. }
  80. void light_bright_ctrl(uint8_t light_bright)
  81. {
  82. g_light_para.bright = light_bright;
  83. U_UART_PRINTF("g_bright = %d\n", g_light_para.bright);
  84. switch (g_light_para.effect)
  85. {
  86. case LIGHT_EFFECT_JUMP:
  87. {
  88. light_mode_jump_cfg(&g_light_info, 0, 0, 0, g_light_para.bright);
  89. }
  90. break;
  91. case LIGHT_EFFECT_GRADUAL:
  92. {
  93. light_mode_gradual_cfg(&g_light_info, 0, 0, 0, g_light_para.bright);
  94. }
  95. break;
  96. case LIGHT_EFFECT_STATIC:
  97. {
  98. light_mode_static_cfg(&g_light_info, 0, g_light_para.bright);
  99. }
  100. break;
  101. case LIGHT_EFFECT_BREATH:
  102. {
  103. light_mode_breath_cfg(&g_light_info, 0, 0, 0, g_light_para.bright);
  104. }
  105. break;
  106. case LIGHT_EFFECT_BLINK:
  107. {
  108. light_mode_blink_cfg(&g_light_info, 0, 0, 0, 0, g_light_para.bright);
  109. }
  110. break;
  111. default:
  112. {
  113. //dream_mode_rainbow_spectra_cfg(&g_effect_dream_rainbow_info, 0, 0, 0, 0);
  114. }
  115. break;
  116. }
  117. }
  118. void light_rhythm_enter(uint8_t rhythm_mode)
  119. {
  120. g_light_para.rhythm_mode = rhythm_mode;
  121. light_effect_timer_stop();
  122. u_rhythm_timer_ctrl(GLO_EN);
  123. app_rhythm_val_up(0);
  124. switch (rhythm_mode)
  125. {
  126. case RHYTHM_MODE_STOP:
  127. {
  128. u_rhythm_timer_ctrl(GLO_DIS);
  129. }
  130. break;
  131. case RHYTHM_MODE_GRADUAL_7:
  132. {
  133. //light_rhythm_mode_one_clr_cfg(&g_normal_rhythm, &g_light_para.one_rhythm_clr, NULL);
  134. light_rhythm_mode_gradual_cfg(&g_normal_rhythm, app_static_clr, 7, NULL);
  135. }
  136. break;
  137. case RHYTHM_MODE_JUMP_7://RHYTHM_MODE_JUMP_7:
  138. {
  139. light_rhythm_mode_jump_cfg(&g_normal_rhythm, base_clr, 7, NULL);
  140. }
  141. break;
  142. case RHYTHM_MODE_FADE_7://RHYTHM_MODE_GRADUAL_7:
  143. {
  144. light_rhythm_mode_fade_cfg(&g_normal_rhythm, base_clr, 7, NULL);
  145. }
  146. break;
  147. case RHYTHM_MODE_JUMP_3:
  148. {
  149. light_rhythm_mode_jump_cfg(&g_normal_rhythm, base_clr, 3, NULL);
  150. }
  151. break;
  152. case RHYTHM_MODE_FADE_3:
  153. {
  154. light_rhythm_mode_fade_cfg(&g_normal_rhythm, base_clr, 3, NULL);
  155. }
  156. break;
  157. default:
  158. {
  159. u_rhythm_timer_ctrl(GLO_DIS);
  160. }
  161. break;
  162. }
  163. U_UART_PRINTF("Rhythm_mode = 0x%X\n", rhythm_mode);
  164. }
  165. void rc_mode_enter(uint8_t rc_mode)
  166. {
  167. uint8_t cnt_tmp=0;
  168. u_rhythm_timer_ctrl(GLO_DIS);//节奏控制
  169. g_light_para.rc_mode = rc_mode;
  170. U_UART_PRINTF("s_rc_mode = %d\n", g_light_para.rc_mode);
  171. switch(g_light_para.rc_mode)
  172. {
  173. case RC_MODE_COLOR_R:
  174. case RC_MODE_COLOR_G:
  175. case RC_MODE_COLOR_B:
  176. case RC_MODE_COLOR_W:
  177. case RC_MODE_COLOR_1:
  178. case RC_MODE_COLOR_2:
  179. case RC_MODE_COLOR_3:
  180. case RC_MODE_COLOR_4:
  181. case RC_MODE_COLOR_5:
  182. case RC_MODE_COLOR_6:
  183. case RC_MODE_COLOR_7:
  184. case RC_MODE_COLOR_8:
  185. case RC_MODE_COLOR_9:
  186. case RC_MODE_COLOR_10:
  187. case RC_MODE_COLOR_11:
  188. case RC_MODE_COLOR_12:
  189. {
  190. light_mode_static_cfg(&g_light_info, &rc_static_clr[g_light_para.rc_mode], g_light_para.bright);
  191. g_light_para.app_mode[0] = LIGHT_APP_MODE_RC_STATIC;
  192. }
  193. break;
  194. //g_light_para.app_mode[0] = LIGHT_APP_MODE_RC_DYNAMIC; //bug
  195. case RC_MODE_FLASH:
  196. {
  197. static uint8_t s_flash_color_ind = 0;
  198. cnt_tmp = ++s_flash_color_ind;
  199. s_flash_color_ind = cnt_tmp % 7;
  200. light_mode_jump_cfg(&g_light_info, &base_clr[s_flash_color_ind], 1, g_light_para.speed, g_light_para.bright);
  201. U_UART_PRINTF("s_flash_color_ind = %d\n", s_flash_color_ind);
  202. }
  203. break;
  204. case RC_MODE_STROBE:
  205. {
  206. static uint8_t s_strobe_color_ind = 0;
  207. cnt_tmp = ++s_strobe_color_ind;
  208. s_strobe_color_ind = cnt_tmp % 7;
  209. light_mode_blink_cfg(&g_light_info, &base_clr[s_strobe_color_ind], 1, 5, g_light_para.speed, g_light_para.bright);
  210. }
  211. break;
  212. case RC_MODE_FADE:
  213. {
  214. static uint8_t s_fade_color_ind = 0;
  215. cnt_tmp = ++s_fade_color_ind;
  216. s_fade_color_ind =cnt_tmp % 2;
  217. if (s_fade_color_ind)
  218. {
  219. light_mode_breath_cfg(&g_light_info, &rc_clr_smooth[0], 7, g_light_para.speed, g_light_para.bright);
  220. }
  221. else
  222. {
  223. light_mode_breath_cfg(&g_light_info, &base_clr[0], 3, g_light_para.speed, g_light_para.bright);
  224. }
  225. }
  226. break;
  227. case RC_MODE_SMOOTH:
  228. {
  229. light_mode_gradual_cfg(&g_light_info, rc_clr_smooth, 7, g_light_para.speed, g_light_para.bright);
  230. }
  231. break;
  232. default:
  233. {
  234. }
  235. break;
  236. }
  237. }
  238. /********************************* ir_decode **********************************/
  239. #include "u_time.h"
  240. void ir_decode(const uint8_t *ir_code)
  241. {
  242. #define RC_USER_CODE_0 (0x00)
  243. // #define RC_USER_CODE_1 (0xFF) //
  244. #define RC_USER_CODE_1 (0xEF)
  245. #define RC_USER_CODE_2 (0x7F)
  246. if (ir_code[0] == RC_USER_CODE_0 && (ir_code[1] == RC_USER_CODE_1 || ir_code[1] == RC_USER_CODE_2))
  247. {
  248. if (ir_code[2] == (~ir_code[3] & 0xff))
  249. {
  250. //U_UART_PRINTF("ir_code = %02X\n", ir_code[2]);
  251. if (g_light_para.power_st == GLO_DIS && ir_code[2] != RC_CODE_ON)
  252. {
  253. return;
  254. }
  255. switch(ir_code[2])
  256. {
  257. case RC_CODE_UP:
  258. {
  259. if (g_light_para.effect == LIGHT_EFFECT_STATIC)
  260. {
  261. g_light_para.bright = (g_light_para.bright + 10) >= LIGHT_BRIGHT_MAX ? LIGHT_BRIGHT_MAX : (g_light_para.bright + 10);
  262. light_bright_ctrl(g_light_para.bright);
  263. }
  264. else if(g_light_para.effect >= LIGHT_EFFECT_RHYTHM_MIN)
  265. {
  266. //rhythm_sensit_ctrl(g_light_para.app_music_mode, -2, 0);
  267. }
  268. else
  269. {
  270. g_light_para.app_speed = (g_light_para.app_speed + 10) >= LIGHT_APP_SPEED_MAX ? LIGHT_APP_SPEED_MAX : (g_light_para.app_speed + 10);
  271. light_speed_ctrl(g_light_para.app_speed);
  272. }
  273. }
  274. break;
  275. case RC_CODE_DOWN:
  276. {
  277. if (g_light_para.effect == LIGHT_EFFECT_STATIC)
  278. {
  279. g_light_para.bright = (g_light_para.bright - 10) <= LIGHT_BRIGHT_MIN ? LIGHT_BRIGHT_MIN : (g_light_para.bright - 10);
  280. light_bright_ctrl(g_light_para.bright);
  281. }
  282. else if(g_light_para.effect >= LIGHT_EFFECT_RHYTHM_MIN)
  283. {
  284. //rhythm_sensit_ctrl(g_light_para.app_music_mode, -2, 0);
  285. }
  286. else
  287. {
  288. g_light_para.app_speed = (g_light_para.app_speed - 10) < LIGHT_SPEED_MIN ? LIGHT_SPEED_MIN : (g_light_para.app_speed - 10);
  289. light_speed_ctrl(g_light_para.app_speed);
  290. }
  291. }
  292. break;
  293. case RC_CODE_OFF:
  294. {
  295. light_power_set(GLO_DIS);
  296. light_state_upload();
  297. }
  298. break;
  299. case RC_CODE_ON:
  300. {
  301. light_power_set(GLO_EN);
  302. light_state_upload();
  303. }
  304. break;
  305. case RC_CODE_FLASH:
  306. {
  307. rc_mode_enter(RC_MODE_FLASH);
  308. }
  309. break;
  310. case RC_CODE_STROBE:
  311. {
  312. rc_mode_enter(RC_MODE_STROBE);
  313. }
  314. break;
  315. case RC_CODE_FADE:
  316. {
  317. rc_mode_enter(RC_MODE_FADE);
  318. }
  319. break;
  320. case RC_CODE_SMOOTH:
  321. {
  322. rc_mode_enter(RC_MODE_SMOOTH);
  323. }
  324. break;
  325. case RC_CODE_COLOR_R:
  326. {
  327. rc_mode_enter(RC_MODE_COLOR_R);
  328. }
  329. break;
  330. case RC_CODE_COLOR_G:
  331. {
  332. rc_mode_enter(RC_MODE_COLOR_G);
  333. }
  334. break;
  335. case RC_CODE_COLOR_B:
  336. {
  337. rc_mode_enter(RC_MODE_COLOR_B);
  338. }
  339. break;
  340. case RC_CODE_W:
  341. {
  342. rc_mode_enter(RC_MODE_COLOR_W);
  343. }
  344. break;
  345. case RC_CODE_COLOR_1:
  346. {
  347. rc_mode_enter(RC_MODE_COLOR_1);
  348. }
  349. break;
  350. case RC_CODE_COLOR_2:
  351. {
  352. rc_mode_enter(RC_MODE_COLOR_2);
  353. }
  354. break;
  355. case RC_CODE_COLOR_3:
  356. {
  357. rc_mode_enter(RC_MODE_COLOR_3);
  358. }
  359. break;
  360. case RC_CODE_COLOR_4:
  361. {
  362. rc_mode_enter(RC_MODE_COLOR_4);
  363. }
  364. break;
  365. case RC_CODE_COLOR_5:
  366. {
  367. rc_mode_enter(RC_MODE_COLOR_5);
  368. }
  369. break;
  370. case RC_CODE_COLOR_6:
  371. {
  372. rc_mode_enter(RC_MODE_COLOR_6);
  373. }
  374. break;
  375. case RC_CODE_COLOR_7:
  376. {
  377. rc_mode_enter(RC_MODE_COLOR_7);
  378. }
  379. break;
  380. case RC_CODE_COLOR_8:
  381. {
  382. rc_mode_enter(RC_MODE_COLOR_8);
  383. }
  384. break;
  385. case RC_CODE_COLOR_9:
  386. {
  387. rc_mode_enter(RC_MODE_COLOR_9);
  388. }
  389. break;
  390. case RC_CODE_COLOR_10:
  391. {
  392. rc_mode_enter(RC_MODE_COLOR_10);
  393. }
  394. break;
  395. case RC_CODE_COLOR_11:
  396. {
  397. rc_mode_enter(RC_MODE_COLOR_11);
  398. }
  399. break;
  400. case RC_CODE_COLOR_12:
  401. {
  402. rc_mode_enter(RC_MODE_COLOR_12);
  403. }
  404. break;
  405. }
  406. light_info_save_set();
  407. }
  408. }
  409. }
  410. /********************************* ir_decode end **********************************/
  411. uint8_t rgb_line_order_check(void)
  412. {
  413. uint8_t order_err = 0;
  414. if (g_light_para.rgb_order[0] == 0)
  415. {
  416. if ((g_light_para.rgb_order[1] == 1 && g_light_para.rgb_order[2] == 2) || (g_light_para.rgb_order[2] == 1 && g_light_para.rgb_order[1] == 2))
  417. {
  418. order_err = 1;
  419. }
  420. else
  421. {
  422. order_err = 0;
  423. }
  424. }
  425. else if (g_light_para.rgb_order[0] == 1)
  426. {
  427. if ((g_light_para.rgb_order[1] == 0 && g_light_para.rgb_order[2] == 2) || (g_light_para.rgb_order[2] == 0 && g_light_para.rgb_order[1] == 2))
  428. {
  429. order_err = 1;
  430. }
  431. else
  432. {
  433. order_err = 0;
  434. }
  435. }
  436. else if (g_light_para.rgb_order[0] == 2)
  437. {
  438. if ((g_light_para.rgb_order[1] == 0 && g_light_para.rgb_order[2] == 1) || (g_light_para.rgb_order[2] == 0 && g_light_para.rgb_order[1] == 1))
  439. {
  440. order_err = 1;
  441. }
  442. else
  443. {
  444. order_err = 0;
  445. }
  446. }
  447. else
  448. {
  449. order_err = 0;
  450. }
  451. if (order_err == 0)
  452. {
  453. g_light_para.rgb_order[0] = 0;
  454. g_light_para.rgb_order[1] = 1;
  455. g_light_para.rgb_order[2] = 2;
  456. }
  457. U_UART_PRINTF("order_err = %d\n", order_err);
  458. return order_err;
  459. }
  460. /********************************* app_ctrl end **********************************/
  461. /********************************* flash_save **********************************/
  462. #include "u_time.h"
  463. #define FLASH_SAVE_BASE_ADDR (0x27800)
  464. #define FLASH_SAVE_FLAG (0x5A)
  465. extern AlarmTime_t m_alarm_cfg[2]; //3个闹钟结构体定义
  466. void flash_printf(void)
  467. {
  468. // U_UART_PRINTF("save_flag = %d, clr_data = %d, effect = %d\n", \
  469. // g_light_para.save_flag, m_app_colour_info.clr_data[0], m_app_mode_info[0].effect);
  470. //
  471. // U_UART_PRINTF("dow_st = %d, alarm_st = %d\n", \
  472. // m_count_down.alarm_state, m_alarm_cfg[0].alarm_state);
  473. }
  474. static uint32_t flash_offset_addr_set(uint32_t data_size)
  475. {
  476. if (data_size % 4 == 0)
  477. {
  478. return data_size;
  479. }
  480. else
  481. {
  482. return data_size + (4 - (data_size % 4));
  483. }
  484. }
  485. /********************************* flash_save **********************************/
  486. #include "user_driver.h"
  487. //#define BT_LIGHT_FLASH_ADDR (0x7f000)
  488. #define BT_LIGHT_FLASH_ADDR (0x3f000) //芯片最后一次扇区
  489. static uint8_t m_flash_save_flg = 0;
  490. void light_info_save_set(void)
  491. {
  492. m_flash_save_flg = 1;
  493. }
  494. void light_info_save(void)
  495. {
  496. //flash_set_line_mode(1);
  497. flash_erase_sector(BT_LIGHT_FLASH_ADDR);
  498. flash_write_data((uint8_t *)&g_light_para, BT_LIGHT_FLASH_ADDR , sizeof(LightPara_t));
  499. U_UART_PRINTF("save_ok\r\n");
  500. //flash_set_line_mode(4);
  501. }
  502. void light_flash_save_cb(void)
  503. {
  504. if (m_flash_save_flg)
  505. {
  506. m_flash_save_flg = 0;
  507. light_info_save();
  508. }
  509. }
  510. /********************************* flash_save end **********************************/
  511. void light_info_init(void)
  512. {
  513. //flash_set_line_mode(1);
  514. flash_read_data((uint8_t *)&g_light_para, BT_LIGHT_FLASH_ADDR , sizeof(LightPara_t));
  515. delay_us(20);
  516. //flash_set_line_mode(4);
  517. if (g_light_para.save_flag == FLASH_SAVE_FLAG)
  518. {
  519. //flash_printf();
  520. }
  521. else
  522. {
  523. U_UART_PRINTF("flash_init\n");
  524. memset(&g_light_para, 0, sizeof(LightPara_t));
  525. g_light_para.save_flag = FLASH_SAVE_FLAG;
  526. g_light_para.power_st = GLO_EN;
  527. g_light_para.bright = LIGHT_BRIGHT_MAX;
  528. g_light_para.speed = LIGHT_DEF_SPEED;
  529. g_light_para.rhythm_sensit = 25;
  530. g_light_para.app_speed = 109 - LIGHT_DEF_SPEED * 10;
  531. g_light_para.app_mode[0] = LIGHT_APP_MODE_COLORUR;
  532. g_light_para.app_mode[1] = 0x01;
  533. g_light_para.clr_temp[0] = 0xFF;
  534. g_light_para.clr_temp[1] = 0x00;
  535. g_light_para.clr_temp[2] = 0x00;
  536. g_light_para.rgb_order[0] = 0;
  537. g_light_para.rgb_order[1] = 1;
  538. g_light_para.rgb_order[2] = 2;
  539. light_info_save();
  540. }
  541. g_light_para.rebootCnt++;
  542. rgb_line_order_check();
  543. U_UART_PRINTF("\r\napp_mode = %02X, rc_mode = %d reboot:%d\r\n", g_light_para.app_mode[0], g_light_para.rc_mode,g_light_para.rebootCnt);
  544. light_power_set(g_light_para.power_st);
  545. light_info_save();
  546. //U_UART_PRINTF("size:%d\r\n",sizeof(g_light_para));
  547. }
  548. /********************************* flash_save end **********************************/