diff --git a/left/src/bridge_protocol_handler.c b/left/src/bridge_protocol_handler.c index a0ac92a..d2aa49e 100644 --- a/left/src/bridge_protocol_handler.c +++ b/left/src/bridge_protocol_handler.c @@ -3,6 +3,7 @@ #include "main.h" #include "i2c_addresses.h" #include "i2c.h" +#include "iso_jumper.h" void SetError(uint8_t error); void SetGenericError(); @@ -36,5 +37,8 @@ void BridgeProtocolHandler() BridgeTxSize = 0; TEST_LED_SET(BridgeRxBuffer[1]); break; - } + case BRIDGE_COMMAND_GET_ISO_JUMPER_STATE: + BridgeTxBuffer[0] = IsoJumperState; + break; + } } diff --git a/left/src/bridge_protocol_handler.h b/left/src/bridge_protocol_handler.h index dbee2a3..c85b3a2 100644 --- a/left/src/bridge_protocol_handler.h +++ b/left/src/bridge_protocol_handler.h @@ -15,6 +15,7 @@ #define BRIDGE_COMMAND_GET_KEY_STATES 0 #define BRIDGE_COMMAND_SET_LED 1 + #define BRIDGE_COMMAND_GET_ISO_JUMPER_STATE 2 // Variables: diff --git a/left/src/init_peripherials.c b/left/src/init_peripherials.c index 9981a32..4a490c2 100644 --- a/left/src/init_peripherials.c +++ b/left/src/init_peripherials.c @@ -6,6 +6,7 @@ #include "fsl_i2c.h" #include "fsl_clock.h" #include "i2c.h" +#include "iso_jumper.h" void InitI2c() { port_pin_config_t pinConfig = { @@ -41,5 +42,6 @@ void InitPeripherials(void) { InitLedDriver(); InitTestLed(); + InitIsoJumper(); InitI2c(); } diff --git a/left/src/iso_jumper.c b/left/src/iso_jumper.c new file mode 100644 index 0000000..69b6ce9 --- /dev/null +++ b/left/src/iso_jumper.c @@ -0,0 +1,14 @@ +#include "iso_jumper.h" +#include "fsl_port.h" + +void InitIsoJumper() { + CLOCK_EnableClock(ISO_JUMPER_INPUT_CLOCK); + PORT_SetPinConfig(ISO_JUMPER_INPUT_PORT, ISO_JUMPER_INPUT_PIN, + &(port_pin_config_t){.pullSelect=kPORT_PullDown, .mux=kPORT_MuxAsGpio}); + GPIO_PinInit(ISO_JUMPER_INPUT_GPIO, ISO_JUMPER_INPUT_PIN, &(gpio_pin_config_t){kGPIO_DigitalInput}); + + CLOCK_EnableClock(ISO_JUMPER_OUTPUT_CLOCK); + PORT_SetPinConfig(ISO_JUMPER_OUTPUT_PORT, ISO_JUMPER_OUTPUT_PIN, + &(port_pin_config_t){.pullSelect=kPORT_PullDisable, .mux=kPORT_MuxAsGpio}); + GPIO_PinInit(ISO_JUMPER_OUTPUT_GPIO, ISO_JUMPER_OUTPUT_PIN, &(gpio_pin_config_t){kGPIO_DigitalOutput, 1}); +} diff --git a/left/src/iso_jumper.h b/left/src/iso_jumper.h new file mode 100644 index 0000000..1b4eeb2 --- /dev/null +++ b/left/src/iso_jumper.h @@ -0,0 +1,30 @@ +#ifndef __ISO_JUMPER_H__ +#define __ISO_JUMPER_H__ + +// Includes: + + #include "fsl_gpio.h" + +// Macros: + + #define ISO_JUMPER_INPUT_GPIO GPIOB + #define ISO_JUMPER_INPUT_PORT PORTB + #define ISO_JUMPER_INPUT_CLOCK kCLOCK_PortB + #define ISO_JUMPER_INPUT_PIN 13 + #define ISO_JUMPER_INPUT_IRQ PORTB_IRQn + #define ISO_JUMPER_INPUT_IRQ_HANDLER PORTB_IRQHandler + + #define ISO_JUMPER_OUTPUT_GPIO GPIOA + #define ISO_JUMPER_OUTPUT_PORT PORTA + #define ISO_JUMPER_OUTPUT_CLOCK kCLOCK_PortA + #define ISO_JUMPER_OUTPUT_PIN 6 + #define ISO_JUMPER_OUTPUT_IRQ PORTA_IRQn + #define ISO_JUMPER_OUTPUT_IRQ_HANDLER PORTA_IRQHandler + + #define ISO_JUMPER_IS_ENABLED !GPIO_ReadPinInput(ISO_JUMPER_INPUT_GPIO, ISO_JUMPER_INPUT_PIN) + +// Functions: + + extern void InitIsoJumper(); + +#endif diff --git a/left/src/main.c b/left/src/main.c index fbefb07..7117ed8 100644 --- a/left/src/main.c +++ b/left/src/main.c @@ -9,6 +9,7 @@ #include "i2c.h" #include "init_peripherials.h" #include "bridge_protocol_handler.h" +#include "iso_jumper.h" key_matrix_t keyMatrix = { .colNum = KEYBOARD_MATRIX_COLS_NUM, @@ -30,6 +31,7 @@ key_matrix_t keyMatrix = { {PORTA, GPIOA, kCLOCK_PortA, 4} } }; +uint8_t IsoJumperState; i2c_slave_config_t slaveConfig; i2c_slave_handle_t slaveHandle; @@ -63,6 +65,7 @@ int main(void) { InitClock(); InitPeripherials(); + IsoJumperState = ISO_JUMPER_IS_ENABLED; I2C_SlaveGetDefaultConfig(&slaveConfig); slaveConfig.slaveAddress = I2C_ADDRESS_LEFT_KEYBOARD_HALF; diff --git a/left/src/main.h b/left/src/main.h index 7df0c8c..abc3bcb 100644 --- a/left/src/main.h +++ b/left/src/main.h @@ -13,5 +13,6 @@ // Variables: extern key_matrix_t keyMatrix; + extern uint8_t IsoJumperState; #endif diff --git a/right/src/usb_protocol_handler.c b/right/src/usb_protocol_handler.c index c3ff039..482f003 100644 --- a/right/src/usb_protocol_handler.c +++ b/right/src/usb_protocol_handler.c @@ -18,6 +18,7 @@ void WriteEeprom(); void ReadEeprom(); void ReadMergeSensor(); void ReadLedJumper(); +void ReadIsoJumper(); // Functions for setting error statuses @@ -69,6 +70,9 @@ void UsbProtocolHandler() case USB_COMMAND_READ_LED_JUMPER: ReadLedJumper(); break; + case USB_COMMAND_READ_ISO_JUMPER: + ReadIsoJumper(); + break; default: break; } @@ -196,3 +200,14 @@ void ReadLedJumper() { SetResponseByte(LED_JUMPER_IS_ENABLED); } + +void ReadIsoJumper() +{ + uint8_t txBuffer[] = {2}; + I2cWrite(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, sizeof(txBuffer)); + + uint8_t rxBuffer[1]; + I2cRead(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, rxBuffer, sizeof(rxBuffer)); + + SetResponseByte(rxBuffer[0]); +} diff --git a/right/src/usb_protocol_handler.h b/right/src/usb_protocol_handler.h index c726f20..2ccef06 100644 --- a/right/src/usb_protocol_handler.h +++ b/right/src/usb_protocol_handler.h @@ -26,6 +26,7 @@ #define USB_COMMAND_READ_EEPROM 6 #define USB_COMMAND_READ_MERGE_SENSOR 7 #define USB_COMMAND_READ_LED_JUMPER 8 + #define USB_COMMAND_READ_ISO_JUMPER 9 // Functions: