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

@ -16,7 +16,7 @@
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
#ifndef SCROLLER_AR_SIZE
# define SCROLLER_AR_SIZE 31
@ -26,41 +26,7 @@
# define SCROLL_THRESH_RANGE_LIM 10
#endif
enum State { HIHI, HILO, LOLO, LOHI };
extern enum State state;
/* Variables used for scroll wheel functionality. */
extern bool lohif;
extern bool hilof;
extern int lowA;
extern int highA;
extern bool cLowA;
extern bool cHighA;
extern int lowIndexA;
extern int highIndexA;
extern bool lowOverflowA;
extern bool highOverflowA;
extern int lowB;
extern int highB;
extern bool cLowB;
extern bool cHighB;
extern int lowIndexB;
extern int highIndexB;
extern bool lowOverflowB;
extern bool highOverflowB;
extern int scrollThresholdA;
extern int scrollThresholdB;
extern int arLowA[SCROLLER_AR_SIZE];
extern int arHighA[SCROLLER_AR_SIZE];
extern int arLowB[SCROLLER_AR_SIZE];
extern 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);
/* Return the rotation direction, positive value means clockwise, negative value
* means counter-clockwise */
int8_t opt_encoder_handler(uint16_t curA, uint16_t curB);