diff options
author | Drashna Jaelre <drashna@live.com> | 2020-09-27 15:11:41 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-27 15:11:41 -0700 |
commit | fbdc65e2e956e9d51c94fecdbce1f0abc2817950 (patch) | |
tree | f7e31480856b1ce14a70941bc0641cb6647b688f /keyboards/ploopyco/pmw3600.h | |
parent | 34b9c51d9cb9694e2e1d0667758f33054a2aad81 (diff) |
[Keyboard] Add PloopyCo devices (#7935)
* Initial Commit for Ploopyco Trackball
This is a WIP at this point. Most of it compiles, but the SPI commands are non-functioning as they come from Arduino, so don't exist in LUFA
* Convert SPI commands from arduino to LUFA
But I have no idea if this is actually correct or not
* Update keyboard readme
* Clean up ploopyco trackball
* Update readme
* Update mouse key stuff
* last minutue cleanup
* Add caveat about scroll wheel
* Fixup to code
* Additional fixup
* Add movement multiplier
* Rename folders
* mid changes
* temp
* Got it working!!!!!
* Additional cleanup of code
* Make unused pin calls more compact
* Rotation info
* Add debouncing checks
* Make everything replaceable
* Add info.json
* Include ISP flashing info
* Better handling for user customization
* Reconfigure CPI stuff
* fix issues with debug printing
* Fix tiny scroll issue
* Add and update scroll code from ploopy mouse
* Update licensing
* Add PloopyCo Mouse
* Cleanup and layout stuff
* Move common files to main folder for reuse
* Increase polling rate
* Update image for mouse
* Apply changes from code review
* Add VIA support
Diffstat (limited to 'keyboards/ploopyco/pmw3600.h')
-rw-r--r-- | keyboards/ploopyco/pmw3600.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/keyboards/ploopyco/pmw3600.h b/keyboards/ploopyco/pmw3600.h new file mode 100644 index 0000000000..c1d5e3badb --- /dev/null +++ b/keyboards/ploopyco/pmw3600.h @@ -0,0 +1,103 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> + * Copyright 2019 Sunjun Kim + * Copyright 2020 Ploopy Corporation + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "spi_master.h" + +// Registers +#define REG_Product_ID 0x00 +#define REG_Revision_ID 0x01 +#define REG_Motion 0x02 +#define REG_Delta_X_L 0x03 +#define REG_Delta_X_H 0x04 +#define REG_Delta_Y_L 0x05 +#define REG_Delta_Y_H 0x06 +#define REG_SQUAL 0x07 +#define REG_Raw_Data_Sum 0x08 +#define REG_Maximum_Raw_data 0x09 +#define REG_Minimum_Raw_data 0x0A +#define REG_Shutter_Lower 0x0B +#define REG_Shutter_Upper 0x0C +#define REG_Control 0x0D +#define REG_Config1 0x0F +#define REG_Config2 0x10 +#define REG_Angle_Tune 0x11 +#define REG_Frame_Capture 0x12 +#define REG_SROM_Enable 0x13 +#define REG_Run_Downshift 0x14 +#define REG_Rest1_Rate_Lower 0x15 +#define REG_Rest1_Rate_Upper 0x16 +#define REG_Rest1_Downshift 0x17 +#define REG_Rest2_Rate_Lower 0x18 +#define REG_Rest2_Rate_Upper 0x19 +#define REG_Rest2_Downshift 0x1A +#define REG_Rest3_Rate_Lower 0x1B +#define REG_Rest3_Rate_Upper 0x1C +#define REG_Observation 0x24 +#define REG_Data_Out_Lower 0x25 +#define REG_Data_Out_Upper 0x26 +#define REG_Raw_Data_Dump 0x29 +#define REG_SROM_ID 0x2A +#define REG_Min_SQ_Run 0x2B +#define REG_Raw_Data_Threshold 0x2C +#define REG_Config5 0x2F +#define REG_Power_Up_Reset 0x3A +#define REG_Shutdown 0x3B +#define REG_Inverse_Product_ID 0x3F +#define REG_LiftCutoff_Tune3 0x41 +#define REG_Angle_Snap 0x42 +#define REG_LiftCutoff_Tune1 0x4A +#define REG_Motion_Burst 0x50 +#define REG_LiftCutoff_Tune_Timeout 0x58 +#define REG_LiftCutoff_Tune_Min_Length 0x5A +#define REG_SROM_Load_Burst 0x62 +#define REG_Lift_Config 0x63 +#define REG_Raw_Data_Burst 0x64 +#define REG_LiftCutoff_Tune2 0x65 + +#ifdef CONSOLE_ENABLE +void print_byte(uint8_t byte); +#endif + +typedef struct { + int8_t motion; + bool isMotion; // True if a motion is detected. + bool isOnSurface; // True when a chip is on a surface + int16_t dx; // displacement on x directions. Unit: Count. (CPI * Count = Inch value) + int8_t mdx; + int16_t dy; // displacement on y directions. + int8_t mdy; +} report_pmw_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); +void pmw_upload_firmware(void); +bool pmw_check_signature(void); +report_pmw_t pmw_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))) |