| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #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();
- }
- }
|