diff --git a/left/build/kds/.project b/left/build/kds/.project
index 9b30aed..b625fe7 100644
--- a/left/build/kds/.project
+++ b/left/build/kds/.project
@@ -96,6 +96,16 @@
1
PARENT-3-PROJECT_LOC/lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_smc.h
+
+ drivers/fsl_tpm.c
+ 1
+ PARENT-3-PROJECT_LOC/lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_tpm.c
+
+
+ drivers/fsl_tpm.h
+ 1
+ PARENT-3-PROJECT_LOC/lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_tpm.h
+
startup/startup_MKL03Z4.S
1
diff --git a/left/src/bridge_protocol_handler.c b/left/src/bridge_protocol_handler.c
index 549733d..41248fa 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 "led_pwm.h"
void SetError(uint8_t error);
void SetGenericError();
@@ -31,10 +32,16 @@ void BridgeProtocolHandler()
BridgeTxSize = KEYBOARD_MATRIX_COLS_NUM*KEYBOARD_MATRIX_ROWS_NUM;
memcpy(BridgeTxBuffer, keyMatrix.keyStates, BridgeTxSize);
break;
- case BRIDGE_COMMAND_SET_LED:
+ case BRIDGE_COMMAND_SET_TEST_LED:
TEST_LED_OFF();
BridgeTxSize = 0;
TEST_LED_SET(BridgeRxBuffer[1]);
break;
+ case BRIDGE_COMMAND_SET_LED_PWM:
+ BridgeTxSize = 0;
+ uint8_t brightnessPercent = BridgeRxBuffer[1];
+ LedPwm_SetBrightness(brightnessPercent);
+ TEST_LED_SET(brightnessPercent == 0);
+ break;
}
}
diff --git a/left/src/bridge_protocol_handler.h b/left/src/bridge_protocol_handler.h
index dbee2a3..539019c 100644
--- a/left/src/bridge_protocol_handler.h
+++ b/left/src/bridge_protocol_handler.h
@@ -14,7 +14,8 @@
#define PROTOCOL_RESPONSE_GENERIC_ERROR 1
#define BRIDGE_COMMAND_GET_KEY_STATES 0
- #define BRIDGE_COMMAND_SET_LED 1
+ #define BRIDGE_COMMAND_SET_TEST_LED 1
+ #define BRIDGE_COMMAND_SET_LED_PWM 2
// Variables:
diff --git a/left/src/init_peripherials.c b/left/src/init_peripherials.c
index 9981a32..ed286f1 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 "led_pwm.h"
void InitI2c() {
port_pin_config_t pinConfig = {
@@ -41,5 +42,6 @@ void InitPeripherials(void)
{
InitLedDriver();
InitTestLed();
+ LedPwm_Init();
InitI2c();
}
diff --git a/left/src/led_pwm.c b/left/src/led_pwm.c
new file mode 100644
index 0000000..2121be2
--- /dev/null
+++ b/left/src/led_pwm.c
@@ -0,0 +1,31 @@
+#include "led_pwm.h"
+#include "fsl_port.h"
+
+void LedPwm_Init() {
+ tpm_config_t tpmInfo;
+ tpm_chnl_pwm_signal_param_t tpmParam[1];/* = {{
+ .chnlNumber = LED_PWM_TPM_CHANNEL,
+ .level = kTPM_LowTrue,
+ .dutyCyclePercent = 00,
+ }};*/
+
+ CLOCK_EnableClock(LED_PWM_CLOCK);
+ PORT_SetPinMux(LED_PWM_PORT, LED_PWM_PIN, kPORT_MuxAlt2);
+
+ tpmParam[0].chnlNumber = LED_PWM_TPM_CHANNEL;
+ tpmParam[0].level = kTPM_LowTrue;
+ tpmParam[0].dutyCyclePercent = 100 - INITIAL_DUTY_CYCLE_PERCENT;
+ TPM_GetDefaultConfig(&tpmInfo);
+
+ TPM_Init(LED_PWM_TPM_BASEADDR, &tpmInfo);
+ TPM_SetupPwm(LED_PWM_TPM_BASEADDR, tpmParam, sizeof(tpmParam),
+ kTPM_EdgeAlignedPwm, TPM_PWM_FREQUENCY, TPM_SOURCE_CLOCK);
+ TPM_StartTimer(LED_PWM_TPM_BASEADDR, kTPM_SystemClock);
+// LedPwm_SetBrightness(INITIAL_DUTY_CYCLE_PERCENT);
+}
+
+void LedPwm_SetBrightness(uint8_t brightnessPercent)
+{
+ TPM_UpdatePwmDutycycle(LED_PWM_TPM_BASEADDR, LED_PWM_TPM_CHANNEL,
+ kTPM_EdgeAlignedPwm, 100-brightnessPercent);
+}
diff --git a/left/src/led_pwm.h b/left/src/led_pwm.h
new file mode 100644
index 0000000..456b5b2
--- /dev/null
+++ b/left/src/led_pwm.h
@@ -0,0 +1,27 @@
+#ifndef __LED_PWM_H__
+#define __LED_PWM_H__
+
+// Includes:
+
+ #include "fsl_tpm.h"
+
+// Macros:
+
+ #define LED_PWM_PORT PORTB
+ #define LED_PWM_CLOCK kCLOCK_PortB
+ #define LED_PWM_PIN 5
+
+ #define LED_PWM_TPM_BASEADDR TPM1
+ #define LED_PWM_TPM_CHANNEL kTPM_Chnl_1
+
+ #define TPM_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_BusClk)
+ #define TPM_PWM_FREQUENCY 24000U
+
+ #define INITIAL_DUTY_CYCLE_PERCENT 100U
+
+// Functions:
+
+ extern void LedPwm_Init();
+ void LedPwm_SetBrightness(uint8_t brightnessPercent);
+
+#endif
diff --git a/right/src/led_pwm.c b/right/src/led_pwm.c
index d2d4c2e..eec11b3 100644
--- a/right/src/led_pwm.c
+++ b/right/src/led_pwm.c
@@ -15,7 +15,7 @@ void LedPwm_Init() {
ftmParam[0].chnlNumber = (ftm_chnl_t)LED_PWM_FTM_CHANNEL;
ftmParam[0].level = kFTM_LowTrue;
- ftmParam[0].dutyCyclePercent = INITIAL_DUTY_CYCLE_PERCENT - 100;
+ ftmParam[0].dutyCyclePercent = 100 - INITIAL_DUTY_CYCLE_PERCENT;
ftmParam[0].firstEdgeDelayPercent = 0;
FTM_GetDefaultConfig(&ftmInfo);
@@ -28,6 +28,6 @@ void LedPwm_Init() {
void LedPwm_SetBrightness(uint8_t brightnessPercent)
{
- FTM_UpdatePwmDutycycle(LED_PWM_FTM_BASEADDR, LED_PWM_FTM_CHANNEL, kFTM_EdgeAlignedPwm, brightnessPercent-100);
+ FTM_UpdatePwmDutycycle(LED_PWM_FTM_BASEADDR, LED_PWM_FTM_CHANNEL, kFTM_EdgeAlignedPwm, 100 - brightnessPercent);
FTM_SetSoftwareTrigger(LED_PWM_FTM_BASEADDR, true); // Triggers register update.
}
diff --git a/right/src/main.c b/right/src/main.c
index b2229f9..8eac0a6 100644
--- a/right/src/main.c
+++ b/right/src/main.c
@@ -59,7 +59,7 @@ static const uint8_t testData[] =
0x0a, 0x02, 0x2d, 0x02, 0x1d, 0x02, 0x1b, 0x02, 0x06, 0x02, 0x19, 0x02, 0x05, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06,
0x02, 0x07, 0x02, 0x08, 0x02, 0x09, 0x02, 0x02, 0x00 };
-void updateUsbReports()
+void UpdateUsbReports()
{
ResetActiveUsbKeyboardReport();
@@ -82,13 +82,13 @@ void main() {
InitClock();
LedDriver_InitAllLeds(1);
KeyMatrix_Init(&KeyMatrix);
- updateUsbReports();
+ UpdateUsbReports();
InitUsb();
// deserialize_Layer(testData, 0);
while (1) {
- updateUsbReports();
+ UpdateUsbReports();
asm("wfi");
}
}
diff --git a/right/src/main.h b/right/src/main.h
index 45a99a2..fb78482 100644
--- a/right/src/main.h
+++ b/right/src/main.h
@@ -19,5 +19,6 @@
extern key_matrix_t KeyMatrix;
extern uint8_t PreviousKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE];
extern uint8_t CurrentKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE];
+ extern void UpdateUsbReports();
#endif
diff --git a/right/src/usb_protocol_handler.c b/right/src/usb_protocol_handler.c
index 374ffba..4dfd254 100644
--- a/right/src/usb_protocol_handler.c
+++ b/right/src/usb_protocol_handler.c
@@ -207,8 +207,10 @@ void applyConfig()
void setLedPwm()
{
- uint8_t brightnessPercent = GenericHidInBuffer[1];
#if UHK_PCB_MAJOR_VERSION == 7
+ uint8_t brightnessPercent = GenericHidInBuffer[1];
LedPwm_SetBrightness(brightnessPercent);
+ uint8_t data[] = {2, brightnessPercent};
+ I2cWrite(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, data, sizeof(data));
#endif
}