Skip to content

Commit 743b530

Browse files
committed
code quality improvements and performance optimization
1 parent 56407da commit 743b530

File tree

4 files changed

+73
-27
lines changed

4 files changed

+73
-27
lines changed

Inc/matrix_led.h

+13-1
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ extern "C"
2626
#define SPI_TIMEOUT_PA 1
2727

2828
#define MAX_EFFECT_TASK 16
29-
#define MAX_EFFECT_STEP 20
29+
#define MAX_EFFECT_STEP 30
3030
#define MAX_EFFECT_INTERVAL 60
3131
#define EFFECT_STEP_VAL ((EFFECT_VAL_HI - brightness)/MAX_EFFECT_STEP)
3232
#define EFFECT_VAL_HI 0xfe
3333
#define EFFECT_VAL_LO 0x0a
34+
#define MAX_MATRIX_TASK MAX_EFFECT_TASK + 2
3435

3536

3637
#define ST524_ADDR_SWCTL 0x00
@@ -194,6 +195,13 @@ typedef struct
194195
uint8_t dotIndex;
195196
}WaveEffectTypeDef;
196197

198+
typedef struct
199+
{
200+
uint8_t x;
201+
uint8_t y;
202+
uint8_t keyVal;
203+
}MatrixTaskTypeDef;
204+
197205
enum BRIGHTNESS_VALS
198206
{
199207
BL_VAL_0 = 0,
@@ -243,6 +251,10 @@ typedef struct
243251

244252
void MatrixEffectNextMove(WaveEffectTypeDef* pEffect, uint32_t timeTick);
245253

254+
bool MatrixTaskPush(uint8_t x, uint8_t y, uint8_t keyVal);
255+
256+
void MatrixTaskTimer(uint32_t timeTick);
257+
246258
void SpiTransmit(uint8_t* pData, uint16_t len);
247259

248260
#ifdef __cplusplus

Src/keyboard.c

+19-25
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,29 @@ void KeyCheck(void)
2424
{
2525
KeyColPrepare(x);
2626
portVal = ~ReadGpioPort(ROW_GPIO_Port);
27-
//if (portVal > 0)
27+
for (uint8_t y = 0; y < MAX_ROW; y++)
2828
{
29-
for (uint8_t y = 0; y < MAX_ROW; y++)
29+
checkingRow = 0x8000 >> y;
30+
debounce = &(debounceCount[x][y]);
31+
keyVal = KEYBOARD_Value_Map[x][y];
32+
if (checkingRow & portVal)
3033
{
31-
checkingRow = 0x8000 >> y;
32-
debounce = &(debounceCount[x][y]);
33-
keyVal = KEYBOARD_Value_Map[x][y];
34-
if (checkingRow & portVal)
34+
if (*debounce < 100)
3535
{
36-
if (*debounce < 100)
37-
{
38-
(*debounce)++;
39-
}
40-
if (*debounce == DEBOUNCE_MS) //debounce
41-
{
42-
//MatrixOnKeyPressed(x, y, keyVal);
43-
OnKeyDown(x, y, keyVal);
44-
}
36+
(*debounce)++;
4537
}
46-
else
38+
if (*debounce == DEBOUNCE_MS) //debounce
4739
{
48-
if (keyVal > 0 && *debounce >= DEBOUNCE_MS)
49-
{
50-
OnKeyUp(x, y, keyVal);
51-
}
52-
53-
*debounce = 0;
40+
OnKeyDown(x, y, keyVal);
41+
}
42+
}
43+
else
44+
{
45+
if (keyVal > 0 && *debounce >= DEBOUNCE_MS)
46+
{
47+
OnKeyUp(x, y, keyVal);
5448
}
49+
*debounce = 0;
5550
}
5651
}
5752
}
@@ -142,7 +137,6 @@ void OnKeyDown(uint8_t x, uint8_t y, uint8_t keyVal)
142137
}
143138
else
144139
{
145-
//MatrixBrightnessChange();
146140
brightnessChange = 1;
147141
}
148142
}
@@ -188,7 +182,7 @@ void OnKeyDown(uint8_t x, uint8_t y, uint8_t keyVal)
188182
if (keyFnDown)
189183
{
190184
InsertEnableSw();
191-
MatrixOnKeyPressed(x, y, KC_INSERT_SW);
185+
MatrixTaskPush(x, y, KC_INSERT_SW);
192186
break;
193187
}
194188
else if (insertEnable < 1 && kbReport.modify == 0)
@@ -241,7 +235,7 @@ void OnKeyDown(uint8_t x, uint8_t y, uint8_t keyVal)
241235
}
242236
break;
243237
}
244-
MatrixOnKeyPressed(x, y, keyVal);
238+
MatrixTaskPush(x, y, keyVal);
245239
//sprintf(debugBuff, "x=%u,y=%u,val=%x\n", x, y, keyVal);
246240
//HAL_UART_Transmit(&huart1, (uint8_t *)debugBuff, 64, 100);
247241
}

Src/main.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,10 @@ int main(void)
233233
zt_bind(EncoderCheck, 10, 1);
234234
zt_bind(KeyCheck, 1, 1);
235235

236+
zt_bind(MatrixTaskTimer, 1, 1);
237+
236238
//zt_bind(MatrixTimer, 10, 1);
237-
zt_bind(MatrixTimer, 1, 1);
239+
zt_bind(MatrixTimer, 2, 1);
238240

239241
kbReport.id = 1; //report id
240242
nkroReport.id = NKRO_REPORT_ID; //report id

Src/matrix_led.c

+38
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
static uint8_t gCmdBuff[255] = {0};
77
static uint8_t* matrixBuff = &gCmdBuff[2]; //led buff
88

9+
static MatrixTaskTypeDef matrixTask[MAX_MATRIX_TASK] = {0};
10+
11+
912
/*
1013
about the STLED524 led driver
1114
@@ -323,6 +326,41 @@ void MatrixEffectNextMove(WaveEffectTypeDef* pEffect, uint32_t timeTick)
323326
}
324327
}
325328

329+
bool MatrixTaskPush(uint8_t x, uint8_t y, uint8_t keyVal)
330+
{
331+
MatrixTaskTypeDef* pTask = NULL;
332+
333+
for (uint8_t i = 0; i < MAX_MATRIX_TASK; i++)
334+
{
335+
pTask = &matrixTask[i];
336+
if (pTask->keyVal == 0) //first free task
337+
{
338+
pTask->x = x;
339+
pTask->y = y;
340+
pTask->keyVal = keyVal;
341+
return true;
342+
break;
343+
}
344+
}
345+
return false;
346+
}
347+
348+
void MatrixTaskTimer(uint32_t timeTick)
349+
{
350+
static uint8_t taskIndex;
351+
MatrixTaskTypeDef* pTask = &matrixTask[taskIndex];
352+
353+
if (pTask->keyVal > 0 && timeTick >= pTask->keyVal)
354+
{
355+
MatrixOnKeyPressed(pTask->x, pTask->y, pTask->keyVal);
356+
pTask->keyVal = 0; //free this task
357+
}
358+
359+
if (++taskIndex >= MAX_MATRIX_TASK)
360+
{
361+
taskIndex = 0;
362+
}
363+
}
326364

327365
void SpiTransmit(uint8_t* pData, uint16_t len)
328366
{

0 commit comments

Comments
 (0)