:
项目链接:https://github.com/530china/BitsButton
BitsButton/
├── bits_button.h/.c # ? 核心按键处理库
├── test/ # ? 完整测试框架
├── examples/ # ? 示例代码
├── docs/ # ? 文档资源
├── simulator/ # ? 按键模拟器
├── .github/workflows/ # ? CI/CD 自动化
│ └── stable-ci.yml # 稳定的多平台测试配置
├── run_tests.bat # ? 快速测试脚本
└── README.md # 本文档
?1.按键事件回溯支持,创新使用位序列记录按键状态,1代表按下,0代表松开
| 键值 | 说明 |
|---|---|
| 0b0 | 未按下 |
| 0b010 | 单击 |
| 0b01010 | 双击 |
| 0b01010...n | n连击 |
| 0b011 | 长按开始 |
| 0b0111 | 长按保持 |
| 0b01110 | 长按结束 |
| 0b01011 | 短按然后长按 |
| 0b0101011 | 双击然后长按 |
| 0b01010..n11 | n连击然后长按 |
"直观的二进制表示让按键逻辑一目了然"
?2.高级按键检测
| 功能 | 描述 |
|---|---|
| 组合按键 | 轻松定义多键组合(如Ctrl+C),智能冲突处理 |
| 序列识别 | 支持复杂按键序列(如单击-长按,单击-长按-双击等操作流) |
| 事件类型 | 支持按下/抬起/单击/双击/连击/长按(开始/保持/结束),完整覆盖按键生命周期 |
?3.高性能内核
typedef struct {
bits_btn_result_t buffer[BITS_BTN_BUFFER_SIZE];
atomic_size_t read_idx; // 无锁原子操作
atomic_size_t write_idx;
} bits_btn_ring_buffer_t;
?4.模块化架构
| 模块 | 功能 |
|---|---|
| 位运算优化引擎 | 高效处理按键状态转换逻辑 |
| 硬件抽象层 | 统一接口适配各类硬件平台 |
| 调试接口 | 可插拔日志输出 |
// 单按键对象
typedef struct button_obj_t {
uint8_t active_level : 1;
uint8_t current_state : 3;
uint8_t last_state : 3;
uint16_t key_id;
uint16_t long_press_period_trigger_cnt;
uint32_t state_entry_time;
state_bits_type_t state_bits;
const bits_btn_obj_param_t *param;
} button_obj_t;
// 组合按键对象
typedef struct {
uint8_t key_count; // 组合中按键数量
uint16_t key_single_ids[BITS_BTN_MAX_COMBO_KEYS]; // 成员按键ID
button_obj_t btn; // 组合按键状态
button_mask_type_t combo_mask; // 组合掩码
uint8_t suppress; // 是否抑制成员按键事件
} button_obj_combo_t;
// 按键事件结果
typedef struct {
uint16_t key_id; // 触发按键ID
btn_state_t event; // 按键事件类型
uint16_t long_press_period_trigger_cnt; // 长按周期计数
key_value_type_t key_value; // 按键值(序列位图)
} bits_btn_result_t;
| 字段 | 用途说明 | 位宽优化 |
|---|---|---|
state_bits |
按键序列历史状态位图 | 32位(可调整为64)支持32次按键事件 |
long_press_period_trigger_cnt |
长按周期触发计数 | 支持最大65535次触发 |
⚠️ 编译器必须支持 C11 标准
_Atomic 类型(内核无锁设计的核心)<stdatomic.h> 原子操作库(内存序模型基础)# 克隆项目
git clone https://github.com/530china/BitsButton.git
cd BitsButton
# 运行测试
./run_tests.bat # Windows
# 或者使用CMake构建
cd test
mkdir build && cd build
cmake ..
make
./run_tests_new
bits_button.c 和 bits_button.h 复制到你的项目中#include "bits_button.h"
int my_log_printf(const char* format, ...) {
va_list args;
va_start(args, format);
int result = vprintf(format, args);
va_end(args);
return result;
}
bits_button_init(
btns,
ARRAY_SIZE(btns),
btns_combo,
ARRAY_SIZE(btns_combo),
read_key_state,
bits_btn_result_cb,
my_log_printf
);
BitsButton 配备了完整的 GitHub Actions CI/CD 流水线:
| 平台 | 编译器 | 状态 |
|---|---|---|
| Ubuntu | GCC + Clang | ✅ 自动测试 |
| Windows | MinGW-GCC | ✅ 自动测试 |
| macOS | Clang | ✅ 自动测试 |
# .github/workflows/stable-ci.yml
name: BitsButton 稳定CI
on: [push, pull_request]
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
compiler: [gcc, clang]
BitsButton 配备了完整的按键测试用例,专为嵌入式C项目设计:
| 测试类型 | 覆盖内容 | 测试数量 |
|---|---|---|
| 基础功能 | 单击、双击、长按、连击 | 5+ 测试 |
| 组合按键 | 多键组合、组合长按 | 4+ 测试 |
| 边界条件 | 超时、消抖、极限情况 | 6+ 测试 |
| 性能测试 | 高频按键、并发处理 | 5+ 测试 |
欢迎贡献代码!当前路线图
更多回帖