#include "u_light_ctrl.h" #include "u_effect_color.h" #include "u_effect_rhythm.h" #include "u_app_handler.h" #include "u_effect_normal.h" #include "u_app_handler.h" #include "u_pwm_drive.h" void light_power_set(uint8_t set_state) { if (set_state == GLO_EN) { g_light_para.power_st = GLO_EN; if (g_light_para.app_mode[0] < LIGHT_APP_MODE_RC_MIN) { light_mode_set(g_light_para.app_mode); } else { rc_mode_enter(g_light_para.rc_mode); } } else { g_light_para.power_st = GLO_DIS; u_rhythm_timer_ctrl(GLO_DIS); light_effect_timer_stop(); light_set_color(0x00); } U_UART_PRINTF("power_st = %d\n", g_light_para.power_st); } void light_speed_ctrl(uint8_t light_speed) { // if (change_speed <= 0 || change_speed > 11 || g_light_para.effect == LIGHT_EFFECT_STATIC || g_light_para.effect == LIGHT_EFFECT_RHYTHM) // { // return; // } g_light_para.app_speed = light_speed; g_light_para.speed = (110 - light_speed) / 10; U_UART_PRINTF("g_speed = %d\n", g_light_para.speed); if (g_light_para.speed > LIGHT_SPEED_MAX) { light_effect_timer_stop(); return; } switch (g_light_para.effect) { // case LIGHT_EFFECT_NULL: // { // u_analog_timer_stop(&g_ag_timer_light_effect); // } // break; case LIGHT_EFFECT_JUMP: { light_mode_jump_cfg(&g_light_info, 0, 0, g_light_para.speed, 0); } break; case LIGHT_EFFECT_GRADUAL: { light_mode_gradual_cfg(&g_light_info, 0, 0, g_light_para.speed, 0); } break; case LIGHT_EFFECT_BREATH: { light_mode_breath_cfg(&g_light_info, 0, 0, g_light_para.speed, 0); } break; case LIGHT_EFFECT_BLINK: { light_mode_blink_cfg(&g_light_info, 0, 0, 0, g_light_para.speed, 0); } break; default: { U_UART_PRINTF("speed_false\n"); //u_analog_timer_stop(&g_ag_timer_light_effect); } break; } } void light_bright_ctrl(uint8_t light_bright) { g_light_para.bright = light_bright; U_UART_PRINTF("g_bright = %d\n", g_light_para.bright); switch (g_light_para.effect) { case LIGHT_EFFECT_JUMP: { light_mode_jump_cfg(&g_light_info, 0, 0, 0, g_light_para.bright); } break; case LIGHT_EFFECT_GRADUAL: { light_mode_gradual_cfg(&g_light_info, 0, 0, 0, g_light_para.bright); } break; case LIGHT_EFFECT_STATIC: { light_mode_static_cfg(&g_light_info, 0, g_light_para.bright); } break; case LIGHT_EFFECT_BREATH: { light_mode_breath_cfg(&g_light_info, 0, 0, 0, g_light_para.bright); } break; case LIGHT_EFFECT_BLINK: { light_mode_blink_cfg(&g_light_info, 0, 0, 0, 0, g_light_para.bright); } break; default: { //dream_mode_rainbow_spectra_cfg(&g_effect_dream_rainbow_info, 0, 0, 0, 0); } break; } } void light_rhythm_enter(uint8_t rhythm_mode) { g_light_para.rhythm_mode = rhythm_mode; light_effect_timer_stop(); u_rhythm_timer_ctrl(GLO_EN); app_rhythm_val_up(0); switch (rhythm_mode) { case RHYTHM_MODE_STOP: { u_rhythm_timer_ctrl(GLO_DIS); } break; case RHYTHM_MODE_GRADUAL_7: { //light_rhythm_mode_one_clr_cfg(&g_normal_rhythm, &g_light_para.one_rhythm_clr, NULL); light_rhythm_mode_gradual_cfg(&g_normal_rhythm, app_static_clr, 7, NULL); } break; case RHYTHM_MODE_JUMP_7://RHYTHM_MODE_JUMP_7: { light_rhythm_mode_jump_cfg(&g_normal_rhythm, base_clr, 7, NULL); } break; case RHYTHM_MODE_FADE_7://RHYTHM_MODE_GRADUAL_7: { light_rhythm_mode_fade_cfg(&g_normal_rhythm, base_clr, 7, NULL); } break; case RHYTHM_MODE_JUMP_3: { light_rhythm_mode_jump_cfg(&g_normal_rhythm, base_clr, 3, NULL); } break; case RHYTHM_MODE_FADE_3: { light_rhythm_mode_fade_cfg(&g_normal_rhythm, base_clr, 3, NULL); } break; default: { u_rhythm_timer_ctrl(GLO_DIS); } break; } U_UART_PRINTF("Rhythm_mode = 0x%X\n", rhythm_mode); } void rc_mode_enter(uint8_t rc_mode) { uint8_t cnt_tmp=0; u_rhythm_timer_ctrl(GLO_DIS);//节奏控制 g_light_para.rc_mode = rc_mode; U_UART_PRINTF("s_rc_mode = %d\n", g_light_para.rc_mode); switch(g_light_para.rc_mode) { case RC_MODE_COLOR_R: case RC_MODE_COLOR_G: case RC_MODE_COLOR_B: case RC_MODE_COLOR_W: case RC_MODE_COLOR_1: case RC_MODE_COLOR_2: case RC_MODE_COLOR_3: case RC_MODE_COLOR_4: case RC_MODE_COLOR_5: case RC_MODE_COLOR_6: case RC_MODE_COLOR_7: case RC_MODE_COLOR_8: case RC_MODE_COLOR_9: case RC_MODE_COLOR_10: case RC_MODE_COLOR_11: case RC_MODE_COLOR_12: { light_mode_static_cfg(&g_light_info, &rc_static_clr[g_light_para.rc_mode], g_light_para.bright); g_light_para.app_mode[0] = LIGHT_APP_MODE_RC_STATIC; } break; //g_light_para.app_mode[0] = LIGHT_APP_MODE_RC_DYNAMIC; //bug case RC_MODE_FLASH: { static uint8_t s_flash_color_ind = 0; cnt_tmp = ++s_flash_color_ind; s_flash_color_ind = cnt_tmp % 7; light_mode_jump_cfg(&g_light_info, &base_clr[s_flash_color_ind], 1, g_light_para.speed, g_light_para.bright); U_UART_PRINTF("s_flash_color_ind = %d\n", s_flash_color_ind); } break; case RC_MODE_STROBE: { static uint8_t s_strobe_color_ind = 0; cnt_tmp = ++s_strobe_color_ind; s_strobe_color_ind = cnt_tmp % 7; light_mode_blink_cfg(&g_light_info, &base_clr[s_strobe_color_ind], 1, 5, g_light_para.speed, g_light_para.bright); } break; case RC_MODE_FADE: { static uint8_t s_fade_color_ind = 0; cnt_tmp = ++s_fade_color_ind; s_fade_color_ind =cnt_tmp % 2; if (s_fade_color_ind) { light_mode_breath_cfg(&g_light_info, &rc_clr_smooth[0], 7, g_light_para.speed, g_light_para.bright); } else { light_mode_breath_cfg(&g_light_info, &base_clr[0], 3, g_light_para.speed, g_light_para.bright); } } break; case RC_MODE_SMOOTH: { light_mode_gradual_cfg(&g_light_info, rc_clr_smooth, 7, g_light_para.speed, g_light_para.bright); } break; default: { } break; } } /********************************* ir_decode **********************************/ #include "u_time.h" void ir_decode(const uint8_t *ir_code) { #define RC_USER_CODE_0 (0x00) // #define RC_USER_CODE_1 (0xFF) // #define RC_USER_CODE_1 (0xEF) #define RC_USER_CODE_2 (0x7F) if (ir_code[0] == RC_USER_CODE_0 && (ir_code[1] == RC_USER_CODE_1 || ir_code[1] == RC_USER_CODE_2)) { if (ir_code[2] == (~ir_code[3] & 0xff)) { //U_UART_PRINTF("ir_code = %02X\n", ir_code[2]); if (g_light_para.power_st == GLO_DIS && ir_code[2] != RC_CODE_ON) { return; } switch(ir_code[2]) { case RC_CODE_UP: { if (g_light_para.effect == LIGHT_EFFECT_STATIC) { g_light_para.bright = (g_light_para.bright + 10) >= LIGHT_BRIGHT_MAX ? LIGHT_BRIGHT_MAX : (g_light_para.bright + 10); light_bright_ctrl(g_light_para.bright); } else if(g_light_para.effect >= LIGHT_EFFECT_RHYTHM_MIN) { //rhythm_sensit_ctrl(g_light_para.app_music_mode, -2, 0); } else { 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); light_speed_ctrl(g_light_para.app_speed); } } break; case RC_CODE_DOWN: { if (g_light_para.effect == LIGHT_EFFECT_STATIC) { g_light_para.bright = (g_light_para.bright - 10) <= LIGHT_BRIGHT_MIN ? LIGHT_BRIGHT_MIN : (g_light_para.bright - 10); light_bright_ctrl(g_light_para.bright); } else if(g_light_para.effect >= LIGHT_EFFECT_RHYTHM_MIN) { //rhythm_sensit_ctrl(g_light_para.app_music_mode, -2, 0); } else { g_light_para.app_speed = (g_light_para.app_speed - 10) < LIGHT_SPEED_MIN ? LIGHT_SPEED_MIN : (g_light_para.app_speed - 10); light_speed_ctrl(g_light_para.app_speed); } } break; case RC_CODE_OFF: { light_power_set(GLO_DIS); light_state_upload(); } break; case RC_CODE_ON: { light_power_set(GLO_EN); light_state_upload(); } break; case RC_CODE_FLASH: { rc_mode_enter(RC_MODE_FLASH); } break; case RC_CODE_STROBE: { rc_mode_enter(RC_MODE_STROBE); } break; case RC_CODE_FADE: { rc_mode_enter(RC_MODE_FADE); } break; case RC_CODE_SMOOTH: { rc_mode_enter(RC_MODE_SMOOTH); } break; case RC_CODE_COLOR_R: { rc_mode_enter(RC_MODE_COLOR_R); } break; case RC_CODE_COLOR_G: { rc_mode_enter(RC_MODE_COLOR_G); } break; case RC_CODE_COLOR_B: { rc_mode_enter(RC_MODE_COLOR_B); } break; case RC_CODE_W: { rc_mode_enter(RC_MODE_COLOR_W); } break; case RC_CODE_COLOR_1: { rc_mode_enter(RC_MODE_COLOR_1); } break; case RC_CODE_COLOR_2: { rc_mode_enter(RC_MODE_COLOR_2); } break; case RC_CODE_COLOR_3: { rc_mode_enter(RC_MODE_COLOR_3); } break; case RC_CODE_COLOR_4: { rc_mode_enter(RC_MODE_COLOR_4); } break; case RC_CODE_COLOR_5: { rc_mode_enter(RC_MODE_COLOR_5); } break; case RC_CODE_COLOR_6: { rc_mode_enter(RC_MODE_COLOR_6); } break; case RC_CODE_COLOR_7: { rc_mode_enter(RC_MODE_COLOR_7); } break; case RC_CODE_COLOR_8: { rc_mode_enter(RC_MODE_COLOR_8); } break; case RC_CODE_COLOR_9: { rc_mode_enter(RC_MODE_COLOR_9); } break; case RC_CODE_COLOR_10: { rc_mode_enter(RC_MODE_COLOR_10); } break; case RC_CODE_COLOR_11: { rc_mode_enter(RC_MODE_COLOR_11); } break; case RC_CODE_COLOR_12: { rc_mode_enter(RC_MODE_COLOR_12); } break; } light_info_save_set(); } } } /********************************* ir_decode end **********************************/ uint8_t rgb_line_order_check(void) { uint8_t order_err = 0; if (g_light_para.rgb_order[0] == 0) { 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)) { order_err = 1; } else { order_err = 0; } } else if (g_light_para.rgb_order[0] == 1) { 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)) { order_err = 1; } else { order_err = 0; } } else if (g_light_para.rgb_order[0] == 2) { 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)) { order_err = 1; } else { order_err = 0; } } else { order_err = 0; } if (order_err == 0) { g_light_para.rgb_order[0] = 0; g_light_para.rgb_order[1] = 1; g_light_para.rgb_order[2] = 2; } U_UART_PRINTF("order_err = %d\n", order_err); return order_err; } /********************************* app_ctrl end **********************************/ /********************************* flash_save **********************************/ #include "u_time.h" #define FLASH_SAVE_BASE_ADDR (0x27800) #define FLASH_SAVE_FLAG (0x5A) extern AlarmTime_t m_alarm_cfg[2]; //3个闹钟结构体定义 void flash_printf(void) { // U_UART_PRINTF("save_flag = %d, clr_data = %d, effect = %d\n", \ // g_light_para.save_flag, m_app_colour_info.clr_data[0], m_app_mode_info[0].effect); // // U_UART_PRINTF("dow_st = %d, alarm_st = %d\n", \ // m_count_down.alarm_state, m_alarm_cfg[0].alarm_state); } static uint32_t flash_offset_addr_set(uint32_t data_size) { if (data_size % 4 == 0) { return data_size; } else { return data_size + (4 - (data_size % 4)); } } /********************************* flash_save **********************************/ #include "user_driver.h" //#define BT_LIGHT_FLASH_ADDR (0x7f000) #define BT_LIGHT_FLASH_ADDR (0x3f000) //芯片最后一次扇区 static uint8_t m_flash_save_flg = 0; void light_info_save_set(void) { m_flash_save_flg = 1; } void light_info_save(void) { //flash_set_line_mode(1); flash_erase_sector(BT_LIGHT_FLASH_ADDR); flash_write_data((uint8_t *)&g_light_para, BT_LIGHT_FLASH_ADDR , sizeof(LightPara_t)); U_UART_PRINTF("save_ok\r\n"); //flash_set_line_mode(4); } void light_flash_save_cb(void) { if (m_flash_save_flg) { m_flash_save_flg = 0; light_info_save(); } } /********************************* flash_save end **********************************/ void light_info_init(void) { //flash_set_line_mode(1); flash_read_data((uint8_t *)&g_light_para, BT_LIGHT_FLASH_ADDR , sizeof(LightPara_t)); delay_us(20); //flash_set_line_mode(4); if (g_light_para.save_flag == FLASH_SAVE_FLAG) { //flash_printf(); } else { U_UART_PRINTF("flash_init\n"); memset(&g_light_para, 0, sizeof(LightPara_t)); g_light_para.save_flag = FLASH_SAVE_FLAG; g_light_para.power_st = GLO_EN; g_light_para.bright = LIGHT_BRIGHT_MAX; g_light_para.speed = LIGHT_DEF_SPEED; g_light_para.rhythm_sensit = 25; g_light_para.app_speed = 109 - LIGHT_DEF_SPEED * 10; g_light_para.app_mode[0] = LIGHT_APP_MODE_COLORUR; g_light_para.app_mode[1] = 0x01; g_light_para.clr_temp[0] = 0xFF; g_light_para.clr_temp[1] = 0x00; g_light_para.clr_temp[2] = 0x00; g_light_para.rgb_order[0] = 0; g_light_para.rgb_order[1] = 1; g_light_para.rgb_order[2] = 2; light_info_save(); } g_light_para.rebootCnt++; rgb_line_order_check(); 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); light_power_set(g_light_para.power_st); light_info_save(); //U_UART_PRINTF("size:%d\r\n",sizeof(g_light_para)); } /********************************* flash_save end **********************************/