1
0
Fork 0

RFC: add a simple implementation of the ploopy optical encoder (#17912)

This commit is contained in:
alaviss 2022-08-13 18:01:44 +00:00 committed by GitHub
parent 4c6ce12d2a
commit b1fe7621eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 165 additions and 43 deletions

View file

@ -15,6 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "opt_encoder.h"
#include <stdbool.h>
enum State { HIHI, HILO, LOLO, LOHI };
enum State state;
@ -44,6 +47,12 @@ 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);
/* Setup function for the scroll wheel. Initializes
the relevant variables. */
void opt_encoder_init(void) {
@ -70,7 +79,7 @@ void opt_encoder_init(void) {
scrollThresholdB = 0;
}
int opt_encoder_handler(int curA, int curB) {
int8_t opt_encoder_handler(uint16_t curA, uint16_t curB) {
if (lowOverflowA == false || highOverflowA == false) calculateThresholdA(curA);
if (lowOverflowB == false || highOverflowB == false) calculateThresholdB(curB);