aboutsummaryrefslogtreecommitdiff
path: root/drivers/sensors/pmw3360.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/sensors/pmw3360.h')
-rw-r--r--drivers/sensors/pmw3360.h38
1 files changed, 25 insertions, 13 deletions
diff --git a/drivers/sensors/pmw3360.h b/drivers/sensors/pmw3360.h
index 7429a6ba0..7b2bef5b8 100644
--- a/drivers/sensors/pmw3360.h
+++ b/drivers/sensors/pmw3360.h
@@ -18,6 +18,8 @@
18 18
19#pragma once 19#pragma once
20 20
21#include <stdint.h>
22#include "report.h"
21#include "spi_master.h" 23#include "spi_master.h"
22 24
23#ifndef PMW3360_CPI 25#ifndef PMW3360_CPI
@@ -25,7 +27,7 @@
25#endif 27#endif
26 28
27#ifndef PMW3360_CLOCK_SPEED 29#ifndef PMW3360_CLOCK_SPEED
28# define PMW3360_CLOCK_SPEED 70000000 30# define PMW3360_CLOCK_SPEED 2000000
29#endif 31#endif
30 32
31#ifndef PMW3360_SPI_LSBFIRST 33#ifndef PMW3360_SPI_LSBFIRST
@@ -52,6 +54,17 @@
52# error "No chip select pin defined -- missing PMW3360_CS_PIN" 54# error "No chip select pin defined -- missing PMW3360_CS_PIN"
53#endif 55#endif
54 56
57/*
58The pmw33660 and pmw3389 use the same registers and timing and such.
59The only differences between the two is the firmware used, and the
60range for the DPI. So add a semi-secret hack to allow use of the
61pmw3389's firmware blob. Also, can set the max cpi range too.
62This should work for the 3390 and 3391 too, in theory.
63*/
64#ifndef PMW3360_FIRMWARE_H
65# define PMW3360_FIRMWARE_H "pmw3360_firmware.h"
66#endif
67
55#ifdef CONSOLE_ENABLE 68#ifdef CONSOLE_ENABLE
56void print_byte(uint8_t byte); 69void print_byte(uint8_t byte);
57#endif 70#endif
@@ -64,19 +77,18 @@ typedef struct {
64 int8_t mdx; 77 int8_t mdx;
65 int16_t dy; // displacement on y directions. 78 int16_t dy; // displacement on y directions.
66 int8_t mdy; 79 int8_t mdy;
67} report_pmw_t; 80} report_pmw3360_t;
68 81
69bool spi_start_adv(void); 82bool spi_start_adv(void);
70void spi_stop_adv(void); 83void spi_stop_adv(void);
71spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data); 84spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data);
72uint8_t spi_read_adv(uint8_t reg_addr); 85uint8_t spi_read_adv(uint8_t reg_addr);
73bool pmw_spi_init(void); 86bool pmw3360_init(void);
74void pmw_set_cpi(uint16_t cpi); 87void pmw3360_set_cpi(uint16_t cpi);
75uint16_t pmw_get_cpi(void); 88uint16_t pmw3360_get_cpi(void);
76void pmw_upload_firmware(void); 89void pmw3360_upload_firmware(void);
77bool pmw_check_signature(void); 90bool pmw3360_check_signature(void);
78report_pmw_t pmw_read_burst(void); 91report_pmw3360_t pmw3360_read_burst(void);
79 92
80#define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0) 93#define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0)
81#define radToDeg(angleInRadians) ((angleInRadians)*180.0 / M_PI) 94#define radToDeg(angleInRadians) ((angleInRadians)*180.0 / M_PI)
82#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))