📄 ctrl_task.c
字号:
/*************************************************************************
*
* Used with ICCARM and AARM.
*
* (c) Copyright IAR Systems 2007
*
* File name : ctrl_task.c
* Description : Control task
*
* History :
* 1. Date : January 18, 2007
* Author : Stanimir Bonev
* Description : Create
*
* Controlling LEDs flashing speed, pattern and intensity regarding of the keys
* state and status
*
* $Revision: 1.0 $
**************************************************************************/
#define __CTRL_TASK_GLOBALS
#include "ctrl_task.h"
static const unsigned char KeysDecode[] =
{
0, // 123456 no pressed
1, // 100000
3, // 010000
2, // 110000
5, // 001000
0, // 101000
4, // 011000
3, // 111000
7, // 000100
0, // 100100
0, // 010100
0, // 110100
6, // 001100
0, // 101100
5, // 011100
0, // 111100
9, // 000010
0, // 100010
0, // 010010
0, // 110010
0, // 001010
0, // 101010
0, // 011010
0, // 111010
8, // 000110
0, // 100110
0, // 010110
0, // 110110
7, // 001110
0, // 101110
0, // 011110
0, // 111110
11, // 000001
0, // 100001
0, // 010001
0, // 110001
0, // 001001
0, // 101001
0, // 011001
0, // 111001
0, // 000101
0, // 100101
0, // 010101
0, // 110101
0, // 001101
0, // 101101
0, // 011101
0, // 111101
10, // 000011
0, // 100011
0, // 010011
0, // 110011
0, // 001011
0, // 101011
0, // 011011
0, // 111011
9, // 000111
0, // 100111
0, // 010111
0, // 110111
0, // 001111
0, // 101111
0, // 011111
0, // 111111
};
static const unsigned char LedsIntensity[] =
{
0, // 0
1, // 1
4, // 2
7, // 3
11, // 4
15, // 5
20, // 6
35, // 7
55, // 8
150, // 9
200, // 10
255, // 11
};
const LedsCtrl_t RunningLight[] =
{
{_LED2_ID | _LED15_ID,(LedsCtrl_t *)&RunningLight[1]}, // step 1
{_LED4_ID | _LED13_ID,(LedsCtrl_t *)&RunningLight[2]}, // step 2
{_LED6_ID | _LED11_ID,(LedsCtrl_t *)&RunningLight[3]}, // step 3
{_LED8_ID | _LED9_ID,(LedsCtrl_t *)&RunningLight[4]}, // step 4
{_LED10_ID | _LED7_ID,(LedsCtrl_t *)&RunningLight[5]}, // step 5
{_LED12_ID | _LED5_ID,(LedsCtrl_t *)&RunningLight[6]}, // step 6
{_LED14_ID | _LED3_ID,(LedsCtrl_t *)&RunningLight[7]}, // step 7
{_LED16_ID | _LED1_ID,(LedsCtrl_t *)&RunningLight[0]}, // step 8
};
static const LedsCtrl_t ButtonsFault [] =
{
{_LED2_ID | _LED4_ID | _LED6_ID | _LED8_ID, (LedsCtrl_t *)&ButtonsFault[1]},
{_LED15_ID | _LED13_ID | _LED11_ID | _LED9_ID, (LedsCtrl_t *)&ButtonsFault[2]},
{_LED10_ID | _LED12_ID | _LED14_ID | _LED16_ID,(LedsCtrl_t *)&ButtonsFault[3]},
{_LED7_ID | _LED5_ID | _LED3_ID | _LED1_ID, (LedsCtrl_t *)&ButtonsFault[0]}
};
/*************************************************************************
* Function Name: CtrlTask
* Parameters: none
* Return: none
*
* Description: Controlling LEDs flashing speed, pattern and intensity regarding
* of the keys state and status
*
*************************************************************************/
void CtrlTask (void)
{
CapKeysMessage_t CapKeysMess;
bool ErrorsShow = false;
unsigned int Temp;
// Init intensity
BSP_IntensityLED(LedsIntensity[LED_DEFAULT_INTENSITY]);
// Init LEDs pattern massive
pNewLEDsCtrl = (pLedsCtrl_t)RunningLight;
// Init LEDs scan timer
OS_CreateTimer(&ScanLEDsTimer,LEDsScan,1);
// Init LEDs pattern update timer
OS_CreateTimer(&UpdateLEDsPatternTimer,
LEDsUpdatePattern,
(LED_DEFAULT_SPEED * LED_SPEED_DELTA) + LED_SPEED_OFFSET);
OS_CreateTimer(&PowerOffTimer,
StandBy,
STAND_BY_TO * TICK_PER_SEC);
// Start timers
OS_StartTimer(&ScanLEDsTimer);
OS_StartTimer(&UpdateLEDsPatternTimer);
OS_StartTimer(&PowerOffTimer);
while(1)
{
// wait for a message from the scanning buttons task
OS_GetMail(&CapKeyMb,&CapKeysMess);
if(CapKeysMess.KeyErrorMask)
{
// Hardware fault set new LEDs pattern
if(!ErrorsShow)
{
pNewLEDsCtrl = (pLedsCtrl_t)ButtonsFault;
ErrorsShow = true;
}
}
else
{
// Restart stanby timer
OS_RetriggerTimer(&PowerOffTimer);
if(ErrorsShow)
{
// No more hardware errors return usual LEDs pattern
ErrorsShow = false;
pNewLEDsCtrl = (pLedsCtrl_t)RunningLight;
}
// buttons data implement
// Left slider control speed
// Right slider control intensity
if(CapKeysMess.PressedKeysMask & KEYS_SPEED_MASK)
{
Temp = KeysDecode[CapKeysMess.PressedKeysMask & KEYS_SPEED_MASK];
if(Temp)
{
Temp = (Temp * LED_SPEED_DELTA) + LED_SPEED_OFFSET;
OS_SetTimerPeriod(&UpdateLEDsPatternTimer,Temp);
}
}
if(CapKeysMess.PressedKeysMask & KEYS_INTENSITY_MASK)
{
Temp = KeysDecode[((CapKeysMess.PressedKeysMask & KEYS_INTENSITY_MASK) >> KEYS_INTENSITY_OFFSET)];
if(Temp)
{
BSP_IntensityLED(LedsIntensity[Temp]);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -