LYFJDB/ECU_APP/user/hwCtrl.c

233 lines
4.1 KiB
C
Raw Normal View History

2024-07-07 16:42:04 +08:00
#include "hwCtrl.h"
#include "r_cg_port.h"
#include "iodefine.h"
#include "r_cg_adc.h"
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};
uint16_t g_adval[12];
#define KEY_DELAY_TIMES 20 //20Ms
void ClearKeyState(void)
{
uint8_t i;
for (i = 0; i < SIG_NUM; i++)
{
keystate[i] = 0;
}
}
void setKeyPressFlag(uint8_t id)
{
if (id < SIG_NUM)
{
keyPressFlag[id] = KEY_PRESSED;
}
}
void setKeyReleaseFlag(uint8_t id)
{
if (id < SIG_NUM)
{
keyReleaseFlag[id] = KEY_PRESSED;
}
}
uint8_t getKeyPressFlag(uint8_t id)
{
uint8_t retVal = KEY_NOPRESSED;
if (id < SIG_NUM)
{
retVal = keyPressFlag[id];
keyPressFlag[id] = KEY_NOPRESSED;
}
return retVal;
}
uint8_t getKeyReleaseFlag(uint8_t id)
{
uint8_t retVal = KEY_NOPRESSED;
if (id < SIG_NUM)
{
retVal = keyReleaseFlag[id];
keyReleaseFlag[id] = KEY_NOPRESSED;
}
return retVal;
}
void KeyScan(void)
{
uint8_t i,key,key_nopress;
key_nopress = 0;
for (i = 0; i < SIG_NUM; i++)
{
key = GetIOState(i);
if (key == KEY_PRESSED && keystate[i] == KEY_NOPRESSED)
{
keydelay[i]++;
if (keydelay[i] >= KEY_DELAY_TIMES)
{
keystate[i] = KEY_PRESSED;
setKeyPressFlag(i);
}
}
else if(key == KEY_NOPRESSED)
{
if (keydelay[i] > 0)
{
keydelay[i]--;
}
else
{
if (keystate[i] == KEY_PRESSED)
{
setKeyReleaseFlag(i);
}
keystate[i] = KEY_NOPRESSED;
key_nopress++;
}
}
}
if (key_nopress == 6)
{
//
}
}
uint8_t GetIOState(uint8_t keyno)
{
switch (keyno)
{
//KEY
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;
case SIGID_SW_RE1:
return I_SW_RE1==0?1:0;
case SIGID_SW_RE2:
return I_SW_RE2==0?1:0;
default:
return 0;
}
}
uint8_t GetKeyState(uint8_t keyno)
{
if (keyno < SIG_NUM)
{
return keystate[keyno-1];
}
return KEY_NOPRESSED;
}
void IND_Ctrl(uint8_t fnr_state,uint8_t lh_state)
{
//O_IND_CTRL = 1;
switch (fnr_state)
{
case FNR_STATE_F:
O_IND2_CTRL = 1;
O_IND3_CTRL = 0;
O_IND4_CTRL = 0;
break;
case FNR_STATE_N:
O_IND2_CTRL = 0;
O_IND3_CTRL = 1;
O_IND4_CTRL = 0;
break;
case FNR_STATE_R:
O_IND2_CTRL = 0;
O_IND3_CTRL = 0;
O_IND4_CTRL = 1;
break;
default:
break;
}
if (lh_state == LH_STATE_L)
{
O_IND1_CTRL = 1;
}
else
{
O_IND1_CTRL = 0;
}
}
void RE1LED_CTRL(uint8_t state)
{
if (state == 0)
{
O_IND5_CTRL = 0;
}
else
{
O_IND5_CTRL = 1;
}
}
void RE2LED_CTRL(uint8_t state)
{
if (state == 0)
{
O_IND6_CTRL = 0;
}
else
{
O_IND6_CTRL = 1;
}
}
uint16_t getAdval(ADCH_type ch)
{
if (ch < ADCH_NUM)
{
return g_adval[ch];
}
return 0;
}
void ad_handle(void)
{
switch (ADS)
{
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 = _02_AD_INPUT_CHANNEL_2;
break;
case _02_AD_INPUT_CHANNEL_2:
R_ADC_Get_Result(g_adval+2);
ADS = _03_AD_INPUT_CHANNEL_3;
break;
case _03_AD_INPUT_CHANNEL_3:
R_ADC_Get_Result(g_adval+3);
ADS = _00_AD_INPUT_CHANNEL_0;
break;
default:
ADS = _00_AD_INPUT_CHANNEL_0;
break;
}
}
/*****************diagnostic******************/
void getInputStatus(unsigned char* data)
{
data[0] = 0;
}