From 3e87ed851af370602114c9664a64ea6cb292ed8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 13 Jun 2019 14:26:19 +0200 Subject: [PATCH] Make the blackberry trackball pointer move in all 4 directions. --- keycluster/src/blackberry_trackball.c | 48 +++++++++++++++++++++++++-- keycluster/src/blackberry_trackball.h | 21 +++++++++++- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/keycluster/src/blackberry_trackball.c b/keycluster/src/blackberry_trackball.c index 85d527d..59beeb6 100644 --- a/keycluster/src/blackberry_trackball.c +++ b/keycluster/src/blackberry_trackball.c @@ -10,10 +10,52 @@ void BlackberryTrackball_Init(void) PORT_SetPinMux(BLACKBERRY_TRACKBALL_LEFT_PORT, BLACKBERRY_TRACKBALL_LEFT_PIN, kPORT_MuxAsGpio); PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_LEFT_PORT, BLACKBERRY_TRACKBALL_LEFT_PIN, kPORT_InterruptEitherEdge); NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_LEFT_IRQ); + + CLOCK_EnableClock(BLACKBERRY_TRACKBALL_RIGHT_CLOCK); + PORT_SetPinMux(BLACKBERRY_TRACKBALL_RIGHT_PORT, BLACKBERRY_TRACKBALL_RIGHT_PIN, kPORT_MuxAsGpio); + PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_RIGHT_PORT, BLACKBERRY_TRACKBALL_RIGHT_PIN, kPORT_InterruptEitherEdge); + NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_RIGHT_IRQ); + + CLOCK_EnableClock(BLACKBERRY_TRACKBALL_TOP_CLOCK); + PORT_SetPinMux(BLACKBERRY_TRACKBALL_TOP_PORT, BLACKBERRY_TRACKBALL_TOP_PIN, kPORT_MuxAsGpio); + PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_TOP_PORT, BLACKBERRY_TRACKBALL_TOP_PIN, kPORT_InterruptEitherEdge); + NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_TOP_IRQ); + + CLOCK_EnableClock(BLACKBERRY_TRACKBALL_BOTTOM_CLOCK); + PORT_SetPinMux(BLACKBERRY_TRACKBALL_BOTTOM_PORT, BLACKBERRY_TRACKBALL_BOTTOM_PIN, kPORT_MuxAsGpio); + PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_BOTTOM_PORT, BLACKBERRY_TRACKBALL_BOTTOM_PIN, kPORT_InterruptEitherEdge); + NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_BOTTOM_IRQ); } -void BLACKBERRY_TRACKBALL_IRQ_HANDLER(void) +void handleTrackball(void) { - GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_GPIO, 1U << BLACKBERRY_TRACKBALL_LEFT_PIN); - BlackBerryTrackball_PointerDelta.x++; + if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_PORT) & (1 << BLACKBERRY_TRACKBALL_LEFT_PIN)) { + BlackBerryTrackball_PointerDelta.x++; + GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_GPIO, 1U << BLACKBERRY_TRACKBALL_LEFT_PIN); + } + + if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_RIGHT_PORT) & (1 << BLACKBERRY_TRACKBALL_RIGHT_PIN)) { + BlackBerryTrackball_PointerDelta.x--; + GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_RIGHT_GPIO, 1U << BLACKBERRY_TRACKBALL_RIGHT_PIN); + } + + if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_TOP_PORT) & (1 << BLACKBERRY_TRACKBALL_TOP_PIN)) { + BlackBerryTrackball_PointerDelta.y++; + GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_TOP_GPIO, 1U << BLACKBERRY_TRACKBALL_TOP_PIN); + } + + if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_BOTTOM_PORT) & (1 << BLACKBERRY_TRACKBALL_BOTTOM_PIN)) { + BlackBerryTrackball_PointerDelta.y--; + GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_BOTTOM_GPIO, 1U << BLACKBERRY_TRACKBALL_BOTTOM_PIN); + } +} + +void BLACKBERRY_TRACKBALL_IRQ_HANDLER1(void) +{ + handleTrackball(); +} + +void BLACKBERRY_TRACKBALL_IRQ_HANDLER2(void) +{ + handleTrackball(); } diff --git a/keycluster/src/blackberry_trackball.h b/keycluster/src/blackberry_trackball.h index 272d165..aedef7e 100644 --- a/keycluster/src/blackberry_trackball.h +++ b/keycluster/src/blackberry_trackball.h @@ -13,7 +13,26 @@ #define BLACKBERRY_TRACKBALL_LEFT_CLOCK kCLOCK_PortB #define BLACKBERRY_TRACKBALL_LEFT_PIN 6 - #define BLACKBERRY_TRACKBALL_IRQ_HANDLER PORTB_IRQHandler + #define BLACKBERRY_TRACKBALL_RIGHT_PORT PORTA + #define BLACKBERRY_TRACKBALL_RIGHT_GPIO GPIOA + #define BLACKBERRY_TRACKBALL_RIGHT_IRQ PORTA_IRQn + #define BLACKBERRY_TRACKBALL_RIGHT_CLOCK kCLOCK_PortA + #define BLACKBERRY_TRACKBALL_RIGHT_PIN 12 + + #define BLACKBERRY_TRACKBALL_TOP_PORT PORTB + #define BLACKBERRY_TRACKBALL_TOP_GPIO GPIOB + #define BLACKBERRY_TRACKBALL_TOP_IRQ PORTB_IRQn + #define BLACKBERRY_TRACKBALL_TOP_CLOCK kCLOCK_PortB + #define BLACKBERRY_TRACKBALL_TOP_PIN 2 + + #define BLACKBERRY_TRACKBALL_BOTTOM_PORT PORTB + #define BLACKBERRY_TRACKBALL_BOTTOM_GPIO GPIOB + #define BLACKBERRY_TRACKBALL_BOTTOM_IRQ PORTB_IRQn + #define BLACKBERRY_TRACKBALL_BOTTOM_CLOCK kCLOCK_PortB + #define BLACKBERRY_TRACKBALL_BOTTOM_PIN 0 + + #define BLACKBERRY_TRACKBALL_IRQ_HANDLER1 PORTA_IRQHandler + #define BLACKBERRY_TRACKBALL_IRQ_HANDLER2 PORTB_IRQHandler // Variables: