diff options
author | stein3 <stein3@gmail.com> | 2020-10-06 07:15:41 -0700 |
---|---|---|
committer | stein3 <stein3@gmail.com> | 2020-10-06 07:15:41 -0700 |
commit | 2e402741a89c5eec8cf30c966ce6f36d6ec9249b (patch) | |
tree | 3592e8c5e6bd19943ae55db7fc02a5f755afbb51 /keyboards/ploopyco/opt_encoder.h | |
parent | 3e5e4f74272c610bb9fa737f674f8e65ed6100ca (diff) | |
parent | 2013f6313430b977e557e482d30daa279a46e75d (diff) | |
download | qmk_firmware-2e402741a89c5eec8cf30c966ce6f36d6ec9249b.tar.gz |
Merge branch 'master' into meteor
Diffstat (limited to 'keyboards/ploopyco/opt_encoder.h')
-rw-r--r-- | keyboards/ploopyco/opt_encoder.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/keyboards/ploopyco/opt_encoder.h b/keyboards/ploopyco/opt_encoder.h new file mode 100644 index 000000000..23a170d59 --- /dev/null +++ b/keyboards/ploopyco/opt_encoder.h @@ -0,0 +1,66 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> + * Copyright 2020 Ploopy Corporation + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#pragma once + +#include <stdbool.h> + +#ifndef SCROLLER_AR_SIZE +# define SCROLLER_AR_SIZE 31 +#endif + +#ifndef SCROLL_THRESH_RANGE_LIM +# define SCROLL_THRESH_RANGE_LIM 10 +#endif + +enum State { HIHI, HILO, LOLO, LOHI }; + +enum State state; + +/* Variables used for scroll wheel functionality. */ +bool lohif; +bool hilof; +int lowA; +int highA; +bool cLowA; +bool cHighA; +int lowIndexA; +int highIndexA; +bool lowOverflowA; +bool highOverflowA; +int lowB; +int highB; +bool cLowB; +bool cHighB; +int lowIndexB; +int highIndexB; +bool lowOverflowB; +bool highOverflowB; +int scrollThresholdA; +int scrollThresholdB; +int arLowA[SCROLLER_AR_SIZE]; +int arHighA[SCROLLER_AR_SIZE]; +int arLowB[SCROLLER_AR_SIZE]; +int arHighB[SCROLLER_AR_SIZE]; + +void calculateThresholdA(int curA); +void calculateThresholdB(int curB); +int calculateThreshold(int cur, int* low, int* high, bool* cLow, bool* cHigh, int arLow[], int arHigh[], int* lowIndex, int* highIndex, bool* lowOverflow, bool* highOverflow); +int thresholdEquation(int lo, int hi); +void incrementIndex(int* index, bool* ovflw); + +void opt_encoder_init(void); +int opt_encoder_handler(int curA, int curB); |