815 lines
14 KiB
C
815 lines
14 KiB
C
////////////////////////////////////////////////////////////////////////////////
|
||
/// @file led.c
|
||
/// @author AE TEAM
|
||
/// @brief THIS FILE PROVIDES ALL THE SYSTEM FUNCTIONS.
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
/// @attention
|
||
///
|
||
/// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
|
||
/// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
|
||
/// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
|
||
/// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
|
||
/// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
|
||
/// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
|
||
///
|
||
/// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
|
||
// Define to prevent recursive inclusion
|
||
#define _LED_C_
|
||
|
||
// Files includes
|
||
|
||
#include "led.h"
|
||
#include "key.h"
|
||
#include "public.h"
|
||
//#include "uart.h"
|
||
#include "sim_eeprom.h"
|
||
|
||
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
/// @addtogroup MM32_Example_Layer
|
||
/// @{
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
/// @addtogroup LED
|
||
/// @{
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
/// @addtogroup LED_Exported_Constants
|
||
/// @{
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
/// @brief initialize LED GPIO pin
|
||
/// @note if use jtag/swd interface GPIO PIN as LED, need to be careful,
|
||
/// can not debug or program.
|
||
/// @param None.
|
||
/// @retval None.
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
void LED_Init(void)
|
||
{
|
||
GPIO_InitTypeDef GPIO_InitStruct;
|
||
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
|
||
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE);
|
||
|
||
GPIO_StructInit(&GPIO_InitStruct);
|
||
GPIO_InitStruct.GPIO_Pin = Bat_T_Pin; // 初始化电池温度检测
|
||
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
||
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
|
||
GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||
|
||
GPIO_InitStruct.GPIO_Pin = LED1_Pin | LED2_Pin | LED3_Pin | Beep_Pin | TemP_Pin | LDO_EN_Pin | CHANGE_Pin ; // LED灯初始化,
|
||
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
||
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
|
||
GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||
|
||
//禁用SWD功能
|
||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource13, GPIO_AF_2); //AF to not pararell
|
||
|
||
GPIO_InitStruct.GPIO_Pin = TEST_Pin; // LED灯初始化,
|
||
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
||
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
|
||
GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||
|
||
LED1_OFF();
|
||
LED2_OFF();
|
||
LED3_OFF();
|
||
TEST_OFF();
|
||
}
|
||
|
||
|
||
//void LED
|
||
void V_led(void)
|
||
{
|
||
/***g_work.m_conditon.m_conditon.V_conditon:
|
||
0: 白灯
|
||
1:蓝灯
|
||
2:红灯
|
||
3:红灯闪
|
||
|
||
电量达到100%时 ,白灯长亮.
|
||
电量为70%-99%之间时,白灯常亮
|
||
电量为30%-69%之间时,蓝灯常亮
|
||
电量为1-29%之间时,红灯闪烁
|
||
***/
|
||
GPIO_InitTypeDef GPIO_InitStruct;
|
||
switch(g_work.m_conditon.m_conditon.V_conditon )
|
||
{
|
||
|
||
case 0 : // 4.0 以上满电
|
||
g_work.v_condtion = 2;
|
||
if( V_5_V == 1 )
|
||
{
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
else
|
||
{
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
GREEN_OFF;
|
||
}
|
||
}
|
||
|
||
else
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
break;
|
||
case 1 : //
|
||
g_work.v_condtion = 1;
|
||
if( V_5_V == 1 )
|
||
{
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
BLUE_ON;
|
||
}
|
||
else
|
||
{
|
||
BLUE_OFF;;
|
||
}
|
||
}
|
||
|
||
else
|
||
{
|
||
BLUE_ON;
|
||
}
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
|
||
break;
|
||
|
||
case 2 :
|
||
if( V_5_V == 1 )
|
||
{
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
}
|
||
}
|
||
|
||
else
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
}
|
||
BLUE_OFF;
|
||
GREEN_OFF;
|
||
break;
|
||
case 3:
|
||
|
||
if( V_5_V == 1 )
|
||
{
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(g_work.m_time._Sleep_time / 205%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 205%2 == 1 )
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
}
|
||
}
|
||
BLUE_OFF;
|
||
GREEN_OFF;
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/*******
|
||
充电时电压电量判断函数V_proess()
|
||
g_work.v_condtion:
|
||
电池容量1% 3.50v
|
||
电池容量25% 3.70v
|
||
电池容量55% 3.90v
|
||
电池容量75% 4.13v
|
||
电池容量100% 4.35v
|
||
|
||
|
||
0:电池电压小于3.5-3.74v 红灯闪烁
|
||
1:电池电压大于3.75V-4.09V 蓝灯闪烁
|
||
2:电池电压大于4.10-4.34V 白灯闪烁
|
||
3:电池电压大于4.35V 充电芯片输出低电平 白灯闪烁
|
||
4:电池电压大于4.35V 充电芯片输出高电平电平 白灯常亮
|
||
|
||
|
||
|
||
|
||
*************/
|
||
void V_proess()
|
||
{
|
||
|
||
// printf("\ng_work.V_real_Value:%d\n",g_work.V_real_Value);
|
||
|
||
GPIO_InitTypeDef GPIO_InitStruct;
|
||
// g_work.V_real_Value = g_work.v_value * 100 /510.0f * 710.0f+ 44;
|
||
// g_work.v_value = g_work.v_value + 18; // 相差 25
|
||
// printf("\ng_work.v_condtion:%d\n",g_work.v_condtion);
|
||
//printf("\ng_work.V_real_Value:%d\n",g_work.V_real_Value);
|
||
|
||
switch (g_work.v_condtion)
|
||
{
|
||
case 0:
|
||
|
||
if( g_work.V_real_Value >= 374 ) // 电压小于 3.55V 3.45 V 246 277
|
||
{
|
||
g_work.v_condtion = 1;
|
||
}
|
||
|
||
|
||
else
|
||
{
|
||
|
||
if ( g_work.V_real_Value < 370 )
|
||
{
|
||
if( g_work.m_conditon.m_conditon.V_conditon != 2 )
|
||
{
|
||
g_work.m_conditon.m_conditon.V_conditon = 2;
|
||
Write_condtion();
|
||
}
|
||
}
|
||
if( V_5_V == 1 )
|
||
{
|
||
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
RED_ON;
|
||
}
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
}
|
||
|
||
|
||
break;
|
||
case 1:
|
||
if ( g_work.V_real_Value >= 409) // 电压小于3.900 288 4.09 :294
|
||
{
|
||
|
||
g_work.v_condtion = 2;
|
||
}
|
||
else
|
||
{
|
||
|
||
if( V_5_V == 1 )
|
||
{
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
BLUE_OFF;
|
||
}
|
||
else
|
||
{
|
||
BLUE_ON;
|
||
}
|
||
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
|
||
if( g_work.m_conditon.m_conditon.V_conditon != 1 )
|
||
{
|
||
g_work.m_conditon.m_conditon.V_conditon = 1;
|
||
Write_condtion();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
break;
|
||
case 2:
|
||
if( g_work.V_real_Value >= 434 )
|
||
{
|
||
g_work.v_condtion = 3;
|
||
}
|
||
else
|
||
{
|
||
if( V_5_V == 1 )
|
||
{
|
||
|
||
if(STANDBY == 1)
|
||
{
|
||
// RED_ON;
|
||
// BLUE_ON;
|
||
// GREEN_ON;
|
||
|
||
|
||
if ( g_work.m_time._Standby_time > 4500 )
|
||
{
|
||
g_work.v_condtion = 4;
|
||
}
|
||
|
||
}
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
else
|
||
{
|
||
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
|
||
}
|
||
|
||
if( g_work.m_conditon.m_conditon.V_conditon != 0 )
|
||
{
|
||
g_work.m_conditon.m_conditon.V_conditon = 0;
|
||
Write_condtion();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
break;
|
||
case 3:
|
||
if( V_5_V == 1 )
|
||
{
|
||
|
||
if(STANDBY == 1)
|
||
{
|
||
// RED_ON;
|
||
// BLUE_ON;
|
||
// GREEN_ON;
|
||
|
||
|
||
if ( g_work.m_time._Standby_time > 4500 )
|
||
{
|
||
g_work.v_condtion = 4;
|
||
}
|
||
|
||
}
|
||
// else
|
||
// {
|
||
if( g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
else
|
||
{
|
||
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
|
||
}
|
||
|
||
|
||
// }
|
||
|
||
if( g_work.m_conditon.m_conditon.V_conditon != 0 )
|
||
{
|
||
g_work.m_conditon.m_conditon.V_conditon = 0;
|
||
Write_condtion();
|
||
}
|
||
}
|
||
|
||
break;
|
||
case 4 :
|
||
|
||
if( V_5_V == 1 )
|
||
{
|
||
|
||
if( g_work.m_conditon.m_conditon.V_conditon != 0 )
|
||
{
|
||
g_work.m_conditon.m_conditon.V_conditon = 0;
|
||
Write_condtion();
|
||
}
|
||
|
||
|
||
if( g_work.m_time._full_stop_led_time < 30000 )
|
||
{
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
else
|
||
{
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
if( g_work.m_work_flag.chargeflag == NOCHARGE )
|
||
{
|
||
|
||
g_work.v_condtion = 3;
|
||
}
|
||
}
|
||
|
||
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//Write_condtion();
|
||
|
||
}
|
||
/********************
|
||
烟具报警灯处理函数err_led()
|
||
g_work.err_fault:
|
||
NO_WARING: 无报警 灯不控制
|
||
LOW_T_ERR: // 低温报警 红蓝交替1次
|
||
PRO_T_ERR: // 保温报警 红蓝交替2次
|
||
|
||
HIG_T_ERR: // 高温报警 红蓝交替3次
|
||
OPEN_ERR: // 开路报警 红灯闪 3
|
||
SHORT_ERR: // 短路报警 红灯闪 2
|
||
BATT_HIG_ERR: // 电池高温报警 红蓝交替4次
|
||
|
||
NO_HOT_ERR: // 不加热报警 4 红灯闪
|
||
********************/
|
||
unsigned char err_led()
|
||
{
|
||
if( g_work.power == 1 && g_work.m_work_flag.led_err_flag == 0)
|
||
{
|
||
|
||
switch( g_work.err_fault )
|
||
{
|
||
case NO_WARING:
|
||
return 0;
|
||
break;
|
||
case LOW_T_ERR: // 低温报警 红蓝交替1次
|
||
|
||
if(g_work.m_time._Sleep_time / 400%4 == 0 )
|
||
{
|
||
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 400%4 == 1 )
|
||
{
|
||
RED_ON;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 400%4 == 2 )
|
||
{
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 400%4 == 3 )
|
||
{
|
||
BLUE_ON;
|
||
RED_OFF;
|
||
}
|
||
GREEN_OFF;
|
||
return 1;
|
||
break;
|
||
case PRO_T_ERR: // 保温报警 红蓝交替2次
|
||
if(g_work.m_time._Sleep_time / 200%4 == 0 )
|
||
{
|
||
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 200%4 == 1 )
|
||
{
|
||
RED_ON;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 200%4 == 2 )
|
||
{
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 200%4 == 3 )
|
||
{
|
||
BLUE_ON;
|
||
RED_OFF;
|
||
}
|
||
GREEN_OFF;
|
||
return 1;
|
||
break;
|
||
case HIG_T_ERR: // 高温报警 红蓝交替3次
|
||
|
||
if(g_work.m_time._Sleep_time / 200%4 == 0 )
|
||
{
|
||
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 200%4 == 1 )
|
||
{
|
||
RED_ON;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 200%4 == 2 )
|
||
{
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 200%4 == 3 )
|
||
{
|
||
BLUE_ON;
|
||
RED_OFF;
|
||
}
|
||
GREEN_OFF;
|
||
return 1;
|
||
break;
|
||
case OPEN_ERR: // 开路报警 红灯闪 3
|
||
if(g_work.m_time._Sleep_time / 300%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 300%2 == 1 )
|
||
{
|
||
RED_ON;
|
||
}
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
return 1;
|
||
break;
|
||
case SHORT_ERR: // 短路报警 红灯闪 2
|
||
if(g_work.m_time._Sleep_time / 400%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 400%2 == 1 )
|
||
{
|
||
RED_ON;
|
||
}
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
return 1;
|
||
break;
|
||
case BATT_HIG_ERR: // 高温报警 红蓝交替4次
|
||
|
||
if(g_work.m_time._Sleep_time / 200%4 == 0 )
|
||
{
|
||
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 200%4 == 1 )
|
||
{
|
||
RED_ON;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 200%4 == 2 )
|
||
{
|
||
RED_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
else if ( g_work.m_time._Sleep_time / 200%4 == 3 )
|
||
{
|
||
BLUE_ON;
|
||
RED_OFF;
|
||
}
|
||
GREEN_OFF;
|
||
return 1;
|
||
break;
|
||
case NO_HOT_ERR: // 不加热报警 4 红灯闪
|
||
|
||
if(g_work.m_time._Sleep_time / 200%2 == 0 )
|
||
{
|
||
RED_OFF;
|
||
}
|
||
else if( g_work.m_time._Sleep_time / 200%2 == 1 )
|
||
{
|
||
RED_ON;
|
||
}
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
return 1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
/***************************
|
||
在各个状态下led灯处理函数led_flash()
|
||
***************************/
|
||
void led_flash(void)
|
||
{
|
||
GPIO_InitTypeDef GPIO_InitStruct;
|
||
WWDG_SetCounter(0x7e);
|
||
|
||
|
||
if( err_led() == 1 )
|
||
{
|
||
return;
|
||
}
|
||
|
||
// if( g_work.err_fault == 1)
|
||
// {
|
||
// if( g_work.power == 1 )
|
||
// {
|
||
// if(g_work.m_time._Sleep_time / 200%2 == 0 )
|
||
// {
|
||
//
|
||
// RED_OFF;
|
||
// }
|
||
// else if( g_work.m_time._Sleep_time / 200%2 == 1 )
|
||
// {
|
||
// RED_ON;
|
||
// }
|
||
// }
|
||
//
|
||
//
|
||
// GREEN_OFF;
|
||
// BLUE_OFF;
|
||
// return;
|
||
// }
|
||
|
||
// else if( g_work.err_fault == 2)
|
||
// {
|
||
// if( g_work.power == 1 )
|
||
// {
|
||
// if(g_work.m_time._Sleep_time / 300%4 == 0 )
|
||
// {
|
||
//
|
||
// RED_ON;
|
||
// BLUE_OFF;
|
||
// }
|
||
// else if( g_work.m_time._Sleep_time / 300%4 == 1 )
|
||
// {
|
||
// RED_OFF;
|
||
// BLUE_OFF;
|
||
// }
|
||
// else if ( g_work.m_time._Sleep_time / 300%4 == 2 )
|
||
// {
|
||
// BLUE_ON;
|
||
// RED_OFF;
|
||
// }
|
||
// else if ( g_work.m_time._Sleep_time / 300%4 == 3 )
|
||
// {
|
||
// BLUE_OFF;
|
||
// RED_OFF;
|
||
// }
|
||
// }
|
||
//
|
||
//
|
||
// GREEN_OFF;
|
||
//
|
||
// return;
|
||
// }
|
||
|
||
if( g_work.power == 1 )
|
||
switch(g_work.work_conditon)
|
||
{
|
||
case STANDY:
|
||
|
||
if( V_5_V == 0 ) // 不充电
|
||
{
|
||
g_work._get_v_from_down = 1; //不记录电池电压
|
||
|
||
if( g_work.m_time._full_stop_led_time < 30000 && g_work.m_time._Sleep_time < 2000) // 满电亮灯 不让 再次显示
|
||
{
|
||
if( g_work.m_conditon.m_conditon.lock == 0 )
|
||
{
|
||
V_led(); // 上电显示
|
||
}
|
||
else
|
||
{
|
||
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
if( g_work.m_time._Charge_start_time < 30000 )// 充电前30 S 只是显示当前电量
|
||
{
|
||
V_led();
|
||
}
|
||
else // 30S 之后开始 充电判断显示
|
||
{
|
||
g_work._get_v_from_down = 1; //开始读取电压
|
||
V_proess(); // 充电的时候显示
|
||
}
|
||
|
||
}
|
||
break;
|
||
case ORDER_HOT: // 在预加热阶段 白灯闪烁
|
||
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
else
|
||
{
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
|
||
}
|
||
break;
|
||
default:
|
||
|
||
|
||
if( g_work.work_conditon == FINISH ) // 结束阶段 白灯闪烁
|
||
{
|
||
|
||
if(g_work.m_time._Sleep_time / 500%2 == 0 )
|
||
{
|
||
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
else
|
||
{
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
|
||
}
|
||
|
||
}
|
||
else if ( g_work.work_conditon == TEST ) // 测试阶段 灯灭
|
||
{
|
||
RED_OFF;
|
||
GREEN_OFF;
|
||
BLUE_OFF;
|
||
|
||
}
|
||
else // 其它阶段 白灯常亮
|
||
{
|
||
|
||
|
||
|
||
RED_ON;
|
||
BLUE_ON;
|
||
GREEN_ON;
|
||
}
|
||
break;
|
||
|
||
}
|
||
|
||
}
|
||
/// @}
|
||
|
||
/// @}
|
||
|
||
/// @}
|