#include "panel_keys.h"
#include <string.h>
void pk_init(pk_decoder*s){if(s)memset(s,0,sizeof(*s));}
pk_key pk_classify(uint16_t v){
 if(v>=3850u&&v<=4095u)return PK_NONE;
 if(v>=1900u&&v<=2200u)return PK_PLUS;
 if(v>=2650u&&v<=2970u)return PK_MINUS;
 if(v>=1530u&&v<=1800u)return PK_BOTH;
 return PK_INVALID;
}
pk_output pk_step(pk_decoder*s,uint16_t raw,bool valid,uint32_t now){
 pk_output o={0};if(!s)return o;
 pk_key k=valid?pk_classify(raw):PK_INVALID;
 bool gap=s->initialized&&(uint32_t)(now-s->last_ms)>100u;
 if(k==PK_INVALID){pk_init(s);return o;}
 if(!s->initialized||gap||k!=s->candidate){s->candidate=k;s->candidate_since=now;s->initialized=true;}
 s->last_ms=now;
 if((uint32_t)(now-s->candidate_since)<20u)return o;
 o.valid=true;o.key=k;o.plus=k==PK_PLUS||k==PK_BOTH;o.minus=k==PK_MINUS||k==PK_BOTH;return o;
}
