Fix the state transfer of the test LED.

This commit is contained in:
László Monda
2017-03-18 21:06:40 +01:00
parent 4a5e5019aa
commit 487c02335b
5 changed files with 13 additions and 19 deletions

View File

@@ -10,7 +10,7 @@
#define LOGIC_LED_ON 0U #define LOGIC_LED_ON 0U
#define LOGIC_LED_OFF 1U #define LOGIC_LED_OFF 1U
#if UHK_PCB_MAJOR_VERSION == 7 #if UHK_PCB_MAJOR_VERSION >= 7
#define TEST_LED_GPIO GPIOB #define TEST_LED_GPIO GPIOB
#define TEST_LED_PORT PORTB #define TEST_LED_PORT PORTB
@@ -28,7 +28,7 @@
#define TEST_LED_ON() GPIO_SetPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_PIN) #define TEST_LED_ON() GPIO_SetPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_PIN)
#define TEST_LED_OFF() GPIO_ClearPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_PIN) #define TEST_LED_OFF() GPIO_ClearPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_PIN)
#define TEST_LED_SET(state) GPIO_WritePinOutput(TEST_LED_GPIO, TEST_LED_PIN, !(state)) #define TEST_LED_SET(state) GPIO_WritePinOutput(TEST_LED_GPIO, TEST_LED_PIN, (state))
#define TEST_LED_TOGGLE() GPIO_TogglePinsOutput(TEST_LED_GPIO, 1U << TEST_LED_PIN) #define TEST_LED_TOGGLE() GPIO_TogglePinsOutput(TEST_LED_GPIO, 1U << TEST_LED_PIN)
// Functions: // Functions:

View File

@@ -3,7 +3,9 @@
#include "bridge_slave_uhk_module.h" #include "bridge_slave_uhk_module.h"
#include "bridge_protocol.h" #include "bridge_protocol.h"
#include "main.h" #include "main.h"
#include "peripherials/test_led.h"
uhk_module_state_t UhkModuleStates[UHK_MODULE_MAX_COUNT];
uhk_module_field_t currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand; uhk_module_field_t currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand;
uhk_module_state_t uhkModuleExternalStates[UHK_MODULE_MAX_COUNT]; uhk_module_state_t uhkModuleExternalStates[UHK_MODULE_MAX_COUNT];
uint8_t txBuffer[2]; uint8_t txBuffer[2];
@@ -11,6 +13,7 @@ uint8_t txBuffer[2];
bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) { bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) {
uhk_module_state_t *uhkModuleInternalState = UhkModuleStates + uhkModuleId; uhk_module_state_t *uhkModuleInternalState = UhkModuleStates + uhkModuleId;
uhk_module_state_t *uhkModuleExternalState = uhkModuleExternalStates + uhkModuleId; uhk_module_state_t *uhkModuleExternalState = uhkModuleExternalStates + uhkModuleId;
uhkModuleInternalState->ledPwmBrightness = 0xff;
switch (currentUhkModuleField) { switch (currentUhkModuleField) {
case UhkModuleField_SendKeystatesRequestCommand: case UhkModuleField_SendKeystatesRequestCommand:
@@ -24,13 +27,13 @@ bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) {
break; break;
case UhkModuleField_SendPwmBrightnessCommand: case UhkModuleField_SendPwmBrightnessCommand:
txBuffer[0] = BridgeCommand_SetLedPwmBrightness; txBuffer[0] = BridgeCommand_SetLedPwmBrightness;
txBuffer[1] = uhkModuleExternalState->ledPwmBrightness; txBuffer[1] = uhkModuleInternalState->ledPwmBrightness;
I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2); I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2);
currentUhkModuleField = UhkModuleField_SendTestLedCommand; currentUhkModuleField = UhkModuleField_SendTestLedCommand;
break; break;
case UhkModuleField_SendTestLedCommand: case UhkModuleField_SendTestLedCommand:
txBuffer[0] = BridgeCommand_SetTestLed; txBuffer[0] = BridgeCommand_SetTestLed;
txBuffer[1] = uhkModuleExternalState->isTestLedOn; txBuffer[1] = uhkModuleInternalState->isTestLedOn;
I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2); I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2);
currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand; currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand;
break; break;

View File

@@ -25,7 +25,7 @@
// Variables: // Variables:
uhk_module_state_t UhkModuleStates[UHK_MODULE_MAX_COUNT]; extern uhk_module_state_t UhkModuleStates[UHK_MODULE_MAX_COUNT];
// Functions: // Functions:

View File

@@ -17,6 +17,7 @@
#define TEST_LED_ON() GPIO_SetPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_GPIO_PIN) #define TEST_LED_ON() GPIO_SetPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_GPIO_PIN)
#define TEST_LED_OFF() GPIO_ClearPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_GPIO_PIN) #define TEST_LED_OFF() GPIO_ClearPinsOutput(TEST_LED_GPIO, 1U << TEST_LED_GPIO_PIN)
#define TEST_LED_SET(state) GPIO_WritePinOutput(TEST_LED_GPIO, TEST_LED_GPIO_PIN, (state))
#define TEST_LED_TOGGLE() GPIO_TogglePinsOutput(TEST_LED_GPIO, 1U << TEST_LED_GPIO_PIN) #define TEST_LED_TOGGLE() GPIO_TogglePinsOutput(TEST_LED_GPIO, 1U << TEST_LED_GPIO_PIN)
// Functions: // Functions:

View File

@@ -8,6 +8,7 @@
#include "config_buffer.h" #include "config_buffer.h"
#include "led_pwm.h" #include "led_pwm.h"
#include "bridge_protocol_scheduler.h" #include "bridge_protocol_scheduler.h"
#include "bridge_slaves/bridge_slave_uhk_module.h"
void setError(uint8_t error); void setError(uint8_t error);
void setGenericError(); void setGenericError();
@@ -120,18 +121,8 @@ void jumpToBootloader() {
void getSetTestLed() void getSetTestLed()
{ {
uint8_t ledState = GenericHidInBuffer[1]; uint8_t ledState = GenericHidInBuffer[1];
// uint8_t data[] = {1, ledState}; TEST_LED_SET(ledState);
// I2cWrite(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, data, sizeof(data)); UhkModuleStates[0].isTestLedOn = ledState;
switch (ledState) {
case 0:
TEST_LED_ON();
break;
case 1:
TEST_LED_OFF();
break;
}
SetLeds(ledState ? 0xff : 0);
} }
void writeLedDriver() void writeLedDriver()
@@ -215,8 +206,7 @@ void setLedPwm()
if (isRightKeyboardHalf) { if (isRightKeyboardHalf) {
LedPwm_SetBrightness(brightnessPercent); LedPwm_SetBrightness(brightnessPercent);
} else { } else {
uint8_t data[] = {2, brightnessPercent}; UhkModuleStates[0].ledPwmBrightness = brightnessPercent;
I2cWrite(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, data, sizeof(data));
} }
#endif #endif
} }