|
|
- #include "trackpad.h"
-
- // bool isScrollingMode = false;
- bool isScrollMode = false;
-
- void pointing_device_init(void){
-
- SPI_Init(SPI_SPEED_FCPU_DIV_8 | SPI_MODE_MASTER);
-
- // Set as output
- TP_RESET_INIT;
- TP_SHUTDOWN_INIT;
- TP_CS_INIT;
- LVL_SHIFT_EN_INIT;
-
- // Reset level shifter
- LVL_SHIFT_EN_LO;
- wait_ms(100);
- LVL_SHIFT_EN_HI;
-
- // Force a BB-8520 reset
- TP_RESET_HI;
- wait_ms(100);
- TP_RESET_LO;
-
- // Turn on BB-8520 trackpad
- TP_SHUTDOWN_LO;
-
- TP_CS_HI;
- }
-
- uint8_t readRegister(uint8_t address) {
- uint8_t data;
-
- TP_CS_LO;
-
- // Read the data
- SPI_TransferByte(address);
- data = SPI_TransferByte(0x00);
-
- TP_CS_HI;
-
- return data;
- }
-
- void pointing_device_task(void){
- uint8_t motion = readRegister(0x02);
-
- // Motion has occurred on the trackpad
- if (motion > 127) {
-
- int8_t dx, dy;
-
- if(TRACKPAD_CONNECTOR_VER == 1) {
- dx = readRegister(0x03);
- dy = -readRegister(0x04);
- }
- else {
- dy = -readRegister(0x03);
- dx = -readRegister(0x04);
- }
-
- report_mouse_t currentReport = pointing_device_get_report();
- if (isScrollMode)
- {
- currentReport.h = dx/SCROLL_SPEED_DIVIDER;
- currentReport.v = dy/SCROLL_SPEED_DIVIDER;
- }
- else
- {
- currentReport.x = dx * POINTER_SPEED_MULTIPLIER;
- currentReport.y = dy * POINTER_SPEED_MULTIPLIER;
- }
-
- pointing_device_set_report(currentReport);
- pointing_device_send();
- }
- }
|