basic button handler routines added, hard buttons tested
touch sensors were also preliminary tested but not all have been analyzed yet.
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
#define TOUCH_DEFAULT_CHARGE 0x4c
|
||||
#define TOUCH_DEFAULT_THRESH 0x800
|
||||
#define TOUCH_HYSTERESIS 66
|
||||
|
||||
|
||||
typedef struct AdcChan {
|
||||
@@ -35,6 +36,8 @@ typedef struct AdcChan {
|
||||
static uint8_t adc_idx = 0;
|
||||
static AdcChan adc_chan[ADC_CHANNELS] = {0};
|
||||
|
||||
static uint32_t touch_status = 0;
|
||||
|
||||
|
||||
|
||||
void adc_init()
|
||||
@@ -57,6 +60,7 @@ void adc_init()
|
||||
adc_chan[1].thresh = 3580;
|
||||
|
||||
adc_chan[2].chan = ADC_Channel_2;
|
||||
adc_chan[2].timing = 0x6f;
|
||||
adc_chan[2].thresh = 3380;
|
||||
|
||||
adc_chan[3].chan = ADC_Channel_3;
|
||||
@@ -108,16 +112,10 @@ void adc_init()
|
||||
|
||||
int8_t adc_get_tkey(uint8_t key_idx)
|
||||
{
|
||||
if (key_idx > ADC_CHANNELS)
|
||||
return 0;
|
||||
|
||||
if (adc_chan[key_idx].avg < adc_chan[key_idx].thresh) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return (touch_status & (1 << key_idx) ? 1 : 0);
|
||||
}
|
||||
|
||||
__attribute((section(".ramfunc")))
|
||||
void adc_next()
|
||||
{
|
||||
AdcChan *chan;
|
||||
@@ -205,6 +203,16 @@ void adc_isr()
|
||||
v += chan->rawval[i];
|
||||
}
|
||||
chan->avg = v >> ashift;
|
||||
|
||||
// calculate if touched if measuring a touch sensor
|
||||
if (amax == 4) {
|
||||
if (chan->avg <= chan->thresh) {
|
||||
touch_status |= (1 << adc_idx);
|
||||
}
|
||||
if (chan->avg > (chan->thresh + TOUCH_HYSTERESIS)) {
|
||||
touch_status &= ~(1 << adc_idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user