aboutsummaryrefslogtreecommitdiff
path: root/drivers/sensors/adns5050.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/sensors/adns5050.h')
-rw-r--r--drivers/sensors/adns5050.h75
1 files changed, 34 insertions, 41 deletions
diff --git a/drivers/sensors/adns5050.h b/drivers/sensors/adns5050.h
index 5e9edc296..e45a25019 100644
--- a/drivers/sensors/adns5050.h
+++ b/drivers/sensors/adns5050.h
@@ -21,59 +21,52 @@
21 21
22#include <stdbool.h> 22#include <stdbool.h>
23 23
24// Registers
25#define REG_PRODUCT_ID 0x00
26#define REG_REVISION_ID 0x01
27#define REG_MOTION 0x02
28#define REG_DELTA_X 0x03
29#define REG_DELTA_Y 0x04
30#define REG_SQUAL 0x05
31#define REG_SHUTTER_UPPER 0x06
32#define REG_SHUTTER_LOWER 0x07
33#define REG_MAXIMUM_PIXEL 0x08
34#define REG_PIXEL_SUM 0x09
35#define REG_MINIMUM_PIXEL 0x0a
36#define REG_PIXEL_GRAB 0x0b
37#define REG_MOUSE_CONTROL 0x0d
38#define REG_MOUSE_CONTROL2 0x19
39#define REG_LED_DC_MODE 0x22
40#define REG_CHIP_RESET 0x3a
41#define REG_PRODUCT_ID2 0x3e
42#define REG_INV_REV_ID 0x3f
43#define REG_MOTION_BURST 0x63
44
45// CPI values 24// CPI values
46#define CPI125 0x11 25// clang-format off
47#define CPI250 0x12 26#define CPI125 0x11
48#define CPI375 0x13 27#define CPI250 0x12
49#define CPI500 0x14 28#define CPI375 0x13
50#define CPI625 0x15 29#define CPI500 0x14
51#define CPI750 0x16 30#define CPI625 0x15
52#define CPI875 0x17 31#define CPI750 0x16
32#define CPI875 0x17
53#define CPI1000 0x18 33#define CPI1000 0x18
54#define CPI1125 0x19 34#define CPI1125 0x19
55#define CPI1250 0x1a 35#define CPI1250 0x1a
56#define CPI1375 0x1b 36#define CPI1375 0x1b
37// clang-format on
38
39#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
40
41// Definitions for the ADNS serial line.
42#ifndef ADNS5050_SCLK_PIN
43# error "No clock pin defined -- missing ADNS5050_SCLK_PIN"
44#endif
45
46#ifndef ADNS5050_SDIO_PIN
47# error "No data pin defined -- missing ADNS5050_SDIO_PIN"
48#endif
57 49
58#ifdef CONSOLE_ENABLE 50#ifndef ADNS5050_CS_PIN
59void print_byte(uint8_t byte); 51# error "No chip select pin defined -- missing ADNS5050_CS_PIN"
60#endif 52#endif
61 53
62typedef struct { 54typedef struct {
63 int8_t dx; 55 int8_t dx;
64 int8_t dy; 56 int8_t dy;
65} report_adns_t; 57} report_adns5050_t;
66 58
67// A bunch of functions to implement the ADNS5050-specific serial protocol. 59// A bunch of functions to implement the ADNS5050-specific serial protocol.
68// Note that the "serial.h" driver is insufficient, because it does not 60// Note that the "serial.h" driver is insufficient, because it does not
69// manually manipulate a serial clock signal. 61// manually manipulate a serial clock signal.
70void adns_init(void); 62void adns5050_init(void);
71void adns_sync(void); 63void adns5050_sync(void);
72uint8_t adns_serial_read(void); 64uint8_t adns5050_serial_read(void);
73void adns_serial_write(uint8_t data); 65void adns5050_serial_write(uint8_t data);
74uint8_t adns_read_reg(uint8_t reg_addr); 66uint8_t adns5050_read_reg(uint8_t reg_addr);
75void adns_write_reg(uint8_t reg_addr, uint8_t data); 67void adns5050_write_reg(uint8_t reg_addr, uint8_t data);
76report_adns_t adns_read_burst(void); 68report_adns5050_t adns5050_read_burst(void);
77int8_t convert_twoscomp(uint8_t data); 69void adns5050_set_cpi(uint16_t cpi);
78void adns_set_cpi(uint8_t cpi); 70uint16_t adns5050_get_cpi(void);
79bool adns_check_signature(void); 71int8_t convert_twoscomp(uint8_t data);
72bool adns5050_check_signature(void);