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:
true
2026-05-08 20:07:06 -07:00
parent 180aa589ee
commit fe169b64f6
5 changed files with 175 additions and 16 deletions

View File

@@ -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);
}
}
}
}