HDG/ECU_APP/user/hwCtrl.c

222 lines
3.9 KiB
C
Raw Normal View History

2024-05-26 08:08:32 +08:00
#include "hwCtrl.h"
#include "r_cg_port.h"
#include "iodefine.h"
#include "PINdef.h"
#include "r_cg_adc.h"
2024-05-26 11:13:55 +08:00
static uint8_t keystate[SIG_NUM] = {0};
static uint8_t keyPressFlag[SIG_NUM] = {0};
static uint8_t keyReleaseFlag[SIG_NUM] = {0};
static uint16_t keydelay[SIG_NUM] = {0};
2024-05-26 08:08:32 +08:00
uint16_t g_adval[12];
#define KEY_DELAY_TIMES 20 //20Ms
void ClearKeyState(void)
{
uint8_t i;
2024-05-26 11:13:55 +08:00
for (i = 0; i < SIG_NUM; i++)
2024-05-26 08:08:32 +08:00
{
keystate[i] = 0;
}
}
void setKeyPressFlag(uint8_t id)
{
2024-05-26 11:13:55 +08:00
if (id < SIG_NUM)
2024-05-26 08:08:32 +08:00
{
keyPressFlag[id] = KEY_PRESSED;
}
}
void setKeyReleaseFlag(uint8_t id)
{
2024-05-26 11:13:55 +08:00
if (id < SIG_NUM)
2024-05-26 08:08:32 +08:00
{
keyReleaseFlag[id] = KEY_PRESSED;
}
}
uint8_t getKeyPressFlag(uint8_t id)
{
uint8_t retVal = KEY_NOPRESSED;
2024-05-26 11:13:55 +08:00
if (id < SIG_NUM)
2024-05-26 08:08:32 +08:00
{
retVal = keyPressFlag[id];
keyPressFlag[id] = KEY_NOPRESSED;
}
return retVal;
}
uint8_t getKeyReleaseFlag(uint8_t id)
{
uint8_t retVal = KEY_NOPRESSED;
2024-05-26 11:13:55 +08:00
if (id < SIG_NUM)
2024-05-26 08:08:32 +08:00
{
retVal = keyReleaseFlag[id];
keyReleaseFlag[id] = KEY_NOPRESSED;
}
return retVal;
}
2024-05-26 11:13:55 +08:00
void KeyScan(void)
2024-05-26 08:08:32 +08:00
{
2024-05-26 11:13:55 +08:00
uint8_t i,key,key_nopress;
key_nopress = 0;
for (i = 0; i < SIG_NUM; i++)
2024-05-26 08:08:32 +08:00
{
key = GetIOState(i);
2024-05-26 11:13:55 +08:00
if (key == KEY_PRESSED && keystate[i] == KEY_NOPRESSED)
2024-05-26 08:08:32 +08:00
{
keydelay[i]++;
if (keydelay[i] >= KEY_DELAY_TIMES)
{
keystate[i] = KEY_PRESSED;
2024-05-26 11:13:55 +08:00
setKeyPressFlag(i);
2024-05-26 08:08:32 +08:00
}
}
else if(key == KEY_NOPRESSED)
{
if (keydelay[i] > 0)
{
keydelay[i]--;
}
else
{
2024-05-26 11:13:55 +08:00
if (keystate[i] == KEY_PRESSED)
{
setKeyReleaseFlag(i);
}
2024-05-26 08:08:32 +08:00
keystate[i] = KEY_NOPRESSED;
2024-05-26 11:13:55 +08:00
key_nopress++;
2024-05-26 08:08:32 +08:00
}
}
}
2024-05-26 11:13:55 +08:00
if (key_nopress == 6)
{
//
}
2024-05-26 08:08:32 +08:00
}
uint8_t GetIOState(uint8_t keyno)
{
switch (keyno)
{
//KEY
2024-05-26 11:13:55 +08:00
case SIGID_SW_LOCK_IN:
return I_SW_LOCK_IN==0?1:0;
case SIGID_SW_L_IN:
return I_SW_L_IN==0?1:0;
2024-05-26 08:08:32 +08:00
default:
return 0;
}
}
uint8_t GetKeyState(uint8_t keyno)
{
2024-05-26 11:13:55 +08:00
if (keyno < SIG_NUM)
2024-05-26 08:08:32 +08:00
{
2024-05-26 11:13:55 +08:00
return keystate[keyno-1];
2024-05-26 08:08:32 +08:00
}
return KEY_NOPRESSED;
}
2024-05-26 11:13:55 +08:00
void BL_Ctrl(uint8_t bl_state)
{
if (bl_state != 0)
{
O_BL_CTRL = 1;
}
else
{
O_BL_CTRL = 0;
}
}
void IND_Ctrl(uint8_t ind_state)
{
switch (ind_state)
{
case 0:
O_IND_CTRL = 0;
O_IND1_CTRL = 0;
O_IND2_CTRL = 0;
O_IND3_CTRL = 0;
O_IND4_CTRL = 0;
break;
case 1:
O_IND_CTRL = 1;
O_IND1_CTRL = 1;
O_IND2_CTRL = 0;
O_IND3_CTRL = 0;
O_IND4_CTRL = 0;
break;
case 2:
O_IND_CTRL = 1;
O_IND1_CTRL = 0;
O_IND2_CTRL = 1;
O_IND3_CTRL = 0;
O_IND4_CTRL = 0;
break;
case 3:
O_IND_CTRL = 1;
O_IND1_CTRL = 0;
O_IND2_CTRL = 0;
O_IND3_CTRL = 1;
O_IND4_CTRL = 0;
break;
case 4:
O_IND_CTRL = 1;
O_IND1_CTRL = 0;
O_IND2_CTRL = 0;
O_IND3_CTRL = 0;
O_IND4_CTRL = 1;
break;
default:
break;
}
}
2024-05-26 08:08:32 +08:00
uint16_t getAdval(uint8_t ch)
{
2024-05-26 11:13:55 +08:00
if (ch < 12)
2024-05-26 08:08:32 +08:00
{
return g_adval[ch];
}
return 0;
}
void ad_handle(void)
{
2024-05-26 11:13:55 +08:00
switch (ADS)
2024-05-26 08:08:32 +08:00
{
2024-05-26 11:13:55 +08:00
case _00_AD_INPUT_CHANNEL_0:
R_ADC_Get_Result(g_adval);
ADS = _01_AD_INPUT_CHANNEL_1;
break;
case _01_AD_INPUT_CHANNEL_1:
R_ADC_Get_Result(g_adval+1);
ADS = _00_AD_INPUT_CHANNEL_0;
break;
default:
ADS = _00_AD_INPUT_CHANNEL_0;
break;
2024-05-26 08:08:32 +08:00
}
}
/*****************diagnostic******************/
2024-05-26 11:13:55 +08:00
void getInputStatus(unsigned char* data)
{
data[0] = 0;
}
2024-05-26 08:08:32 +08:00