diff --git a/keycluster/src/blackberry_trackball.c b/keycluster/src/blackberry_trackball.c new file mode 100644 index 0000000..85d527d --- /dev/null +++ b/keycluster/src/blackberry_trackball.c @@ -0,0 +1,19 @@ +#include "fsl_gpio.h" +#include "fsl_port.h" +#include "blackberry_trackball.h" + +pointer_delta_t BlackBerryTrackball_PointerDelta; + +void BlackberryTrackball_Init(void) +{ + CLOCK_EnableClock(BLACKBERRY_TRACKBALL_LEFT_CLOCK); + 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); +} + +void BLACKBERRY_TRACKBALL_IRQ_HANDLER(void) +{ + GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_GPIO, 1U << BLACKBERRY_TRACKBALL_LEFT_PIN); + BlackBerryTrackball_PointerDelta.x++; +} diff --git a/keycluster/src/blackberry_trackball.h b/keycluster/src/blackberry_trackball.h new file mode 100644 index 0000000..272d165 --- /dev/null +++ b/keycluster/src/blackberry_trackball.h @@ -0,0 +1,26 @@ +#ifndef __BLACKBERRY_TRACKBALL_H__ +#define __BLACKBERRY_TRACKBALL_H__ + +// Includes: + + #include "slave_protocol.h" + +// Macros: + + #define BLACKBERRY_TRACKBALL_LEFT_PORT PORTB + #define BLACKBERRY_TRACKBALL_LEFT_GPIO GPIOB + #define BLACKBERRY_TRACKBALL_LEFT_IRQ PORTB_IRQn + #define BLACKBERRY_TRACKBALL_LEFT_CLOCK kCLOCK_PortB + #define BLACKBERRY_TRACKBALL_LEFT_PIN 6 + + #define BLACKBERRY_TRACKBALL_IRQ_HANDLER PORTB_IRQHandler + +// Variables: + + extern pointer_delta_t BlackBerryTrackball_PointerDelta; + +// Functions: + + void BlackberryTrackball_Init(void); + +#endif diff --git a/keycluster/src/init_peripherals.c b/keycluster/src/init_peripherals.c index a0072ae..5c9eef2 100644 --- a/keycluster/src/init_peripherals.c +++ b/keycluster/src/init_peripherals.c @@ -11,6 +11,7 @@ #include "i2c_watchdog.h" #include "main.h" #include "module.h" +#include "blackberry_trackball.h" i2c_slave_config_t slaveConfig; i2c_slave_handle_t slaveHandle; @@ -86,4 +87,5 @@ void InitPeripherals(void) TestLed_Init(); LedPwm_Init(); initI2c(); + BlackberryTrackball_Init(); } diff --git a/keycluster/src/slave_protocol_handler.c b/keycluster/src/slave_protocol_handler.c index 0283174..9d596c5 100644 --- a/keycluster/src/slave_protocol_handler.c +++ b/keycluster/src/slave_protocol_handler.c @@ -11,6 +11,7 @@ #include "bootloader.h" #include "module.h" #include "versions.h" +#include "blackberry_trackball.h" i2c_message_t RxMessage; i2c_message_t TxMessage; @@ -97,8 +98,10 @@ void SlaveTxHandler(void) uint8_t messageLength = BOOL_BYTES_TO_BITS_COUNT(MODULE_KEY_COUNT); if (MODULE_POINTER_COUNT) { pointer_delta_t *pointerDelta = (pointer_delta_t*)(TxMessage.data + messageLength); - pointerDelta->x = 0; - pointerDelta->y = 0; + pointerDelta->x = BlackBerryTrackball_PointerDelta.x; + pointerDelta->y = BlackBerryTrackball_PointerDelta.y; + BlackBerryTrackball_PointerDelta.x = 0; + BlackBerryTrackball_PointerDelta.y = 0; if (keyMatrix.keyStates[0]) { pointerDelta->x = 1; }