void key_change_proc(void) {u8 key0 = kb_event.keycode[0]; u8 key_buf[8] = {0,0,0,0,0,0,0,0}; key_not_released = 1; if (kb_event.cnt == 2) //two key press, do not process { } else if(kb_event.cnt == 1) { if(key0 >= CR_VOL_UP ) //volume up/down { key_type = CONSUMER_KEY; u16 consumer_key; if(key0 == CR_VOL_UP){ //volume up consumer_key = MKEY_VOL_UP; } else if(key0 == CR_VOL_DN){ //volume down consumer_key = MKEY_VOL_DN; } blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2); } else { key_type = KEYBOARD_KEY; key_buf[2] = key0; blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8); } } else //kb_event.cnt == 0, key release { key_not_released = 0; if(key_type == CONSUMER_KEY) { u16 consumer_key = 0; blc_gatt_pushHandleValueNotify ( BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2); } else if(key_type == KEYBOARD_KEY) { key_buf[2] = 0; blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8); //release } } }按条分析各语句的作用
时间: 2024-04-28 07:25:24 浏览: 11
这段代码是一个函数,功能是根据键盘事件发送 HID 报文给 BLE 连接的主机。下面是各语句的作用:
1. `void key_change_proc(void)`:函数定义,返回值类型为 `void`,函数名为 `key_change_proc`,没有输入参数。
2. `u8 key0 = kb_event.keycode[0];`:从 `kb_event` 结构体中取出按下的第一个键的键码并存储在 `key0` 变量中。
3. `u8 key_buf[8] = {0,0,0,0,0,0,0,0};`:初始化一个长度为 8 的数组 `key_buf`,每个元素的值都为 0。
4. `key_not_released = 1;`:将 `key_not_released` 的值设为 1,表示键还没有松开。
5. `if (kb_event.cnt == 2)`:如果按下了两个键,则不处理。
6. `else if(kb_event.cnt == 1)`:如果只按下了一个键,则执行下面的代码块。
7. `if(key0 >= CR_VOL_UP )`:如果按下的键码大于或等于 `CR_VOL_UP`,则说明按下了音量加或音量减键。
8. `key_type = CONSUMER_KEY;`:将 `key_type` 变量的值设为 `CONSUMER_KEY`,表示这是一个消费者键。
9. `u16 consumer_key;`:定义一个 `u16` 类型的变量 `consumer_key`。
10. `if(key0 == CR_VOL_UP){ consumer_key = MKEY_VOL_UP; }`:如果按下的是音量加键,则将 `consumer_key` 的值设为 `MKEY_VOL_UP`。
11. `else if(key0 == CR_VOL_DN){ consumer_key = MKEY_VOL_DN; }`:如果按下的是音量减键,则将 `consumer_key` 的值设为 `MKEY_VOL_DN`。
12. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,将消费者键报文发送给 BLE 连接的主机。
13. `else`:如果按下的不是音量加或音量减键,则执行下面的代码块。
14. `key_type = KEYBOARD_KEY;`:将 `key_type` 变量的值设为 `KEYBOARD_KEY`,表示这是一个普通键。
15. `key_buf[2] = key0;`:将按下的键码存储在 `key_buf` 数组的第 3 个元素中,因为 HID 报文的前两个字节是保留位。
16. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,将普通键报文发送给 BLE 连接的主机。
17. `else`:如果没有按键事件,则执行下面的代码块。
18. `key_not_released = 0;`:将 `key_not_released` 的值设为 0,表示键已经松开。
19. `if(key_type == CONSUMER_KEY)`:如果前一个按键是消费者键,则执行下面的代码块。
20. `u16 consumer_key = 0;`:将 `consumer_key` 的值设为 0。
21. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,发送一个空的消费者键报文。
22. `else if(key_type == KEYBOARD_KEY)`:如果前一个按键是普通键,则执行下面的代码块。
23. `key_buf[2] = 0;`:将 `key_buf` 数组的第 3 个元素设为 0,表示键已经松开。
24. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,发送一个空的普通键报文。