Skip to content

Commit

Permalink
优化Keymap写入流程
Browse files Browse the repository at this point in the history
  • Loading branch information
jim-kirisame committed Jul 28, 2019
1 parent b5adaa3 commit 957a3ca
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 21 deletions.
33 changes: 19 additions & 14 deletions application/main/src/keyboard/keymap_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
#include "keymap.h"
#include "keymap_common.h"
#include "nrf.h"
#include "app_scheduler.h"
#include <string.h>

#define layer_size (MATRIX_ROWS * MATRIX_COLS)
Expand Down Expand Up @@ -108,7 +109,6 @@ static void keymap_update(void)
if (err_code == FDS_ERR_NO_SPACE_IN_FLASH)
{
err_code = fds_gc();
APP_ERROR_CHECK(err_code);
fds_record_update(&record_desc, &record);
}
}
Expand All @@ -128,34 +128,39 @@ void keymap_init(void)
keymap_valid();
}

/**
* @brief 确认Keymap写入
*
*/
static void keymap_write(void *p_event_data, uint16_t event_size)
{
UNUSED_PARAMETER(p_event_data);
UNUSED_PARAMETER(event_size);
keymap_valid();
keymap_update();
}

/**
* @brief 写入Keymap
*
* @param block 当前块
* @param size 块大小
* @param data 数据
*/
void keymap_set(uint8_t block, uint8_t size, uint8_t* data)
bool keymap_set(uint8_t block, uint8_t size, uint8_t* data)
{
if (block * size < KEYMAP_SIZE) {
memcpy(&keymap_block[block * size], data, size);
if ((block + 1) * size >= KEYMAP_SIZE) {
keymap_write();
app_sched_event_put(NULL, 0, &keymap_write);
return true;
}
return false;
}
return true;
}

/**
* @brief 确认Keymap写入
*
*/
void keymap_write(void)
{
keymap_valid();
keymap_update();
}
#else
void keymap_init(void) {}
void keymap_set(uint8_t block, uint8_t size, uint8_t* data) {}
void keymap_write(void) {}
bool keymap_set(uint8_t block, uint8_t size, uint8_t* data) {}
#endif
4 changes: 2 additions & 2 deletions application/main/src/keyboard/keymap_storage.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
#define __KEYMAP_STORAGE_H__

#include <stdint.h>
#include <stdbool.h>

void keymap_init(void);
void keymap_set(uint8_t block, uint8_t size, uint8_t* data);
void keymap_write(void);
bool keymap_set(uint8_t block, uint8_t size, uint8_t* data);

#endif // __KEYMAP_STORAGE_H__
19 changes: 14 additions & 5 deletions application/main/src/keyboard/usb_comm.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,20 @@ static uint8_t checksum(uint8_t* data, uint8_t len)
return (uint8_t)checksum;
}

enum uart_ack_state {
UART_CHECK_FAIL,
UART_SUCCESS,
UART_END
};

/**
* @brief 回复请求
*
* @param success
*/
static void uart_ack(bool success)
static void uart_ack(enum uart_ack_state state)
{
app_uart_put(0x10 + success);
app_uart_put(0x10 + state);
}

/**
Expand Down Expand Up @@ -187,10 +193,13 @@ static void uart_on_recv()
uint8_t sum = checksum(recv_buf, 61);
if (sum == recv_buf[61]) {
uint8_t id = recv_buf[0] & 0x7F;
keymap_set(id, 60, &recv_buf[1]);
uart_ack(true);
if (keymap_set(id, 60, &recv_buf[1])) {
uart_ack(UART_END);
} else {
uart_ack(UART_SUCCESS);
}
} else {
uart_ack(false);
uart_ack(UART_CHECK_FAIL);
}
}
}
Expand Down

0 comments on commit 957a3ca

Please sign in to comment.