1
0
Fork 0

Rework and expand Pointing Device support (#14343)

Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
This commit is contained in:
Drashna Jael're 2021-11-14 22:03:24 -08:00 committed by GitHub
parent 462c3a6151
commit 56e3f06a26
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
60 changed files with 2107 additions and 1705 deletions

View file

@ -18,6 +18,8 @@
#pragma once
#include <stdint.h>
#include "report.h"
#include "spi_master.h"
#ifndef PMW3360_CPI
@ -25,7 +27,7 @@
#endif
#ifndef PMW3360_CLOCK_SPEED
# define PMW3360_CLOCK_SPEED 70000000
# define PMW3360_CLOCK_SPEED 2000000
#endif
#ifndef PMW3360_SPI_LSBFIRST
@ -52,6 +54,17 @@
# error "No chip select pin defined -- missing PMW3360_CS_PIN"
#endif
/*
The pmw33660 and pmw3389 use the same registers and timing and such.
The only differences between the two is the firmware used, and the
range for the DPI. So add a semi-secret hack to allow use of the
pmw3389's firmware blob. Also, can set the max cpi range too.
This should work for the 3390 and 3391 too, in theory.
*/
#ifndef PMW3360_FIRMWARE_H
# define PMW3360_FIRMWARE_H "pmw3360_firmware.h"
#endif
#ifdef CONSOLE_ENABLE
void print_byte(uint8_t byte);
#endif
@ -64,19 +77,18 @@ typedef struct {
int8_t mdx;
int16_t dy; // displacement on y directions.
int8_t mdy;
} report_pmw_t;
} report_pmw3360_t;
bool spi_start_adv(void);
void spi_stop_adv(void);
spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data);
uint8_t spi_read_adv(uint8_t reg_addr);
bool pmw_spi_init(void);
void pmw_set_cpi(uint16_t cpi);
uint16_t pmw_get_cpi(void);
void pmw_upload_firmware(void);
bool pmw_check_signature(void);
report_pmw_t pmw_read_burst(void);
bool spi_start_adv(void);
void spi_stop_adv(void);
spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data);
uint8_t spi_read_adv(uint8_t reg_addr);
bool pmw3360_init(void);
void pmw3360_set_cpi(uint16_t cpi);
uint16_t pmw3360_get_cpi(void);
void pmw3360_upload_firmware(void);
bool pmw3360_check_signature(void);
report_pmw3360_t pmw3360_read_burst(void);
#define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0)
#define radToDeg(angleInRadians) ((angleInRadians)*180.0 / M_PI)
#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))