diff options
Diffstat (limited to 'drivers/sensors/adns5050.h')
| -rw-r--r-- | drivers/sensors/adns5050.h | 75 |
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 |
| 59 | void print_byte(uint8_t byte); | 51 | # error "No chip select pin defined -- missing ADNS5050_CS_PIN" |
| 60 | #endif | 52 | #endif |
| 61 | 53 | ||
| 62 | typedef struct { | 54 | typedef 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. |
| 70 | void adns_init(void); | 62 | void adns5050_init(void); |
| 71 | void adns_sync(void); | 63 | void adns5050_sync(void); |
| 72 | uint8_t adns_serial_read(void); | 64 | uint8_t adns5050_serial_read(void); |
| 73 | void adns_serial_write(uint8_t data); | 65 | void adns5050_serial_write(uint8_t data); |
| 74 | uint8_t adns_read_reg(uint8_t reg_addr); | 66 | uint8_t adns5050_read_reg(uint8_t reg_addr); |
| 75 | void adns_write_reg(uint8_t reg_addr, uint8_t data); | 67 | void adns5050_write_reg(uint8_t reg_addr, uint8_t data); |
| 76 | report_adns_t adns_read_burst(void); | 68 | report_adns5050_t adns5050_read_burst(void); |
| 77 | int8_t convert_twoscomp(uint8_t data); | 69 | void adns5050_set_cpi(uint16_t cpi); |
| 78 | void adns_set_cpi(uint8_t cpi); | 70 | uint16_t adns5050_get_cpi(void); |
| 79 | bool adns_check_signature(void); | 71 | int8_t convert_twoscomp(uint8_t data); |
| 72 | bool adns5050_check_signature(void); | ||
