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)
|
|
|
|
{
|
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-08-15 19:34:44 +08:00
|
|
|
void P_light_Ctrl(uint8_t state)
|
|
|
|
{
|
|
|
|
switch (state)
|
|
|
|
{
|
|
|
|
case P_LIGHT_NONE:
|
|
|
|
O_IND5_CTRL = 0;
|
|
|
|
O_IND1_CTRL = 0;
|
|
|
|
break;
|
|
|
|
case P_LIGHT_RED:
|
|
|
|
O_IND5_CTRL = 1;
|
|
|
|
O_IND1_CTRL = 0;
|
|
|
|
break;
|
2024-08-15 22:10:00 +08:00
|
|
|
case P_LIGHT_YELLOE:
|
2024-08-15 19:34:44 +08:00
|
|
|
O_IND5_CTRL = 0;
|
|
|
|
O_IND1_CTRL = 1;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-07 16:42:04 +08:00
|
|
|
|
|
|
|
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;
|
2024-08-15 19:34:44 +08:00
|
|
|
case SIGID_SW_P_IN:
|
2024-07-07 16:42:04 +08:00
|
|
|
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)
|
|
|
|
{
|
2024-08-22 09:00:08 +08:00
|
|
|
return keystate[keyno];
|
2024-07-07 16:42:04 +08:00
|
|
|
}
|
|
|
|
return KEY_NOPRESSED;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-08-15 19:34:44 +08:00
|
|
|
void IND_Ctrl(uint8_t fnr_state)
|
2024-07-07 16:42:04 +08:00
|
|
|
{
|
|
|
|
//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;
|
2024-08-17 00:07:25 +08:00
|
|
|
case FNR_ALL_LIGHT:
|
|
|
|
O_IND2_CTRL = 1;
|
|
|
|
O_IND3_CTRL = 1;
|
|
|
|
O_IND4_CTRL = 1;
|
|
|
|
break;
|
2024-07-07 16:42:04 +08:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|