Add mouse key support to bluetooth
This commit is contained in:
parent
652e6f3db8
commit
fa207545a9
2 changed files with 47 additions and 30 deletions
|
|
@ -34,7 +34,7 @@
|
|||
#define CKBT51_WAKE_WAIT_TIME 3000 // us
|
||||
|
||||
enum {
|
||||
/* HID Report */
|
||||
/* HID Report */
|
||||
CKBT51_CMD_SEND_KB = 0x11,
|
||||
CKBT51_CMD_SEND_KB_NKRO = 0x12,
|
||||
CKBT51_CMD_SEND_CONSUMER = 0x13,
|
||||
|
|
@ -86,13 +86,13 @@ enum {
|
|||
CKBT51_EVT_BATTERY = 0xB5,
|
||||
};
|
||||
|
||||
enum {
|
||||
CKBT51_CONNECTED = 0x20,
|
||||
CKBT51_DISCOVERABLE = 0x21,
|
||||
CKBT51_RECONNECTING = 0x22,
|
||||
CKBT51_DISCONNECTED = 0x23,
|
||||
CKBT51_PINCODE_ENTRY = 0x24,
|
||||
CKBT51_EXIT_PINCODE_ENTRY = 0x25
|
||||
enum {
|
||||
CKBT51_CONNECTED = 0x20,
|
||||
CKBT51_DISCOVERABLE = 0x21,
|
||||
CKBT51_RECONNECTING = 0x22,
|
||||
CKBT51_DISCONNECTED = 0x23,
|
||||
CKBT51_PINCODE_ENTRY = 0x24,
|
||||
CKBT51_EXIT_PINCODE_ENTRY = 0x25
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -106,15 +106,15 @@ static uint8_t payload[PACKET_MAX_LEN];
|
|||
static uint8_t reg_offset = 0xFF;
|
||||
|
||||
bluetooth_transport_t bluetooth_transport = {
|
||||
ckbt51_init,
|
||||
ckbt51_connect,
|
||||
ckbt51_become_discoverable,
|
||||
ckbt51_disconnect,
|
||||
ckbt51_send_keyboard,
|
||||
ckbt51_send_nkro,
|
||||
ckbt51_send_consumer,
|
||||
ckbt51_send_system,
|
||||
NULL,
|
||||
ckbt51_init,
|
||||
ckbt51_connect,
|
||||
ckbt51_become_discoverable,
|
||||
ckbt51_disconnect,
|
||||
ckbt51_send_keyboard,
|
||||
ckbt51_send_nkro,
|
||||
ckbt51_send_consumer,
|
||||
ckbt51_send_system,
|
||||
ckbt51_send_mouse,
|
||||
ckbt51_task
|
||||
};
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ void ckbt51_send_cmd(uint8_t* payload, uint8_t len, bool ack_enable) {
|
|||
while (chTimeI2US(chVTTimeElapsedSinceX(start)) < CKBT51_WAKE_WAIT_TIME / 3) {};
|
||||
}
|
||||
writePinHigh(CKBT51_INT_INPUT_PIN);
|
||||
|
||||
|
||||
uint16_t checksum = 0;
|
||||
for (i = 0; i < len; i++) checksum += payload[i];
|
||||
|
||||
|
|
@ -216,6 +216,22 @@ void ckbt51_send_system(uint16_t report) {
|
|||
ckbt51_send_cmd(payload, i, true);
|
||||
}
|
||||
|
||||
void ckbt51_send_mouse(uint8_t* report) {
|
||||
uint8_t i = 0;
|
||||
memset(payload, 0, PACKET_MAX_LEN);
|
||||
|
||||
payload[i++] = CKBT51_CMD_SEND_MOUSE; // Cmd type
|
||||
payload[i++] = report[1]; // Button
|
||||
payload[i++] = report[2]; // X
|
||||
payload[i++] = (report[2] & 0x80) ? 0xff : 0x00; // ckbt51 use 16bit report, set high byte
|
||||
payload[i++] = report[3]; // Y
|
||||
payload[i++] = (report[3] & 0x80) ? 0xff : 0x00; // ckbt51 use 16bit report, set high byte
|
||||
payload[i++] = report[4]; // V wheel
|
||||
payload[i++] = report[5]; // H wheel
|
||||
|
||||
ckbt51_send_cmd(payload, i, false);
|
||||
}
|
||||
|
||||
/* Send ack to connection event, bluetooth module will retry 2 times if no ack received */
|
||||
void ckbt51_send_conn_evt_ack(void) {
|
||||
uint8_t i = 0;
|
||||
|
|
@ -229,7 +245,7 @@ void ckbt51_send_conn_evt_ack(void) {
|
|||
void ckbt51_become_discoverable(uint8_t host_idx, void* param) {
|
||||
uint8_t i = 0;
|
||||
memset(payload, 0, PACKET_MAX_LEN);
|
||||
|
||||
|
||||
pairing_param_t default_pairing_param = {0, 0, PAIRING_MODE_LESC_OR_SSP, BT_MODE_CLASSIC, 0, NULL};
|
||||
|
||||
if (param == NULL) {
|
||||
|
|
@ -301,7 +317,7 @@ void ckbt51_get_info(module_info_t* info) {
|
|||
uint8_t i = 0;
|
||||
memset(payload, 0, PACKET_MAX_LEN);
|
||||
|
||||
payload[i++] = CKBT51_CMD_GET_MODULE_INFO;
|
||||
payload[i++] = CKBT51_CMD_GET_MODULE_INFO;
|
||||
ckbt51_send_cmd(payload, i, false);
|
||||
}
|
||||
|
||||
|
|
@ -348,9 +364,9 @@ void ckbt51_get_local_name(char* name) {
|
|||
void ckbt51_factory_reset(void) {
|
||||
uint8_t i = 0;
|
||||
memset(payload, 0, PACKET_MAX_LEN);
|
||||
|
||||
payload[i++] = CKBT51_CMD_FACTORY_RESET;
|
||||
|
||||
|
||||
payload[i++] = CKBT51_CMD_FACTORY_RESET;
|
||||
|
||||
ckbt51_send_cmd(payload, i, false);
|
||||
}
|
||||
|
||||
|
|
@ -405,7 +421,7 @@ void ckbt51_dfu_rx(uint8_t* data, uint8_t length) {
|
|||
for (uint8_t i = 0; i < payload_len - 2; i++) {
|
||||
checksum += payload[i];
|
||||
}
|
||||
|
||||
|
||||
/* Verify checksum */
|
||||
if ((checksum & 0xFF) != payload[payload_len - 2] || checksum >> 8 != payload[payload_len - 1]) return;
|
||||
|
||||
|
|
|
|||
|
|
@ -69,12 +69,12 @@
|
|||
#define BDA_LEN 6
|
||||
#define PACKET_MAX_LEN 64
|
||||
|
||||
enum {
|
||||
PAIRING_MODE_DEFAULT = 0x00,
|
||||
PAIRING_MODE_JUST_WORK,
|
||||
PAIRING_MODE_PASSKEY_ENTRY,
|
||||
PAIRING_MODE_LESC_OR_SSP,
|
||||
PAIRING_MODE_INVALID
|
||||
enum {
|
||||
PAIRING_MODE_DEFAULT = 0x00,
|
||||
PAIRING_MODE_JUST_WORK,
|
||||
PAIRING_MODE_PASSKEY_ENTRY,
|
||||
PAIRING_MODE_LESC_OR_SSP,
|
||||
PAIRING_MODE_INVALID
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -134,6 +134,7 @@ void ckbt51_send_keyboard(uint8_t* report);
|
|||
void ckbt51_send_nkro(uint8_t* report);
|
||||
void ckbt51_send_consumer(uint16_t report);
|
||||
void ckbt51_send_system(uint16_t report);
|
||||
void ckbt51_send_mouse(uint8_t* report);
|
||||
|
||||
void ckbt51_become_discoverable(uint8_t host_idx, void* param);
|
||||
void ckbt51_connect(uint8_t hostIndex, uint16_t timeout);
|
||||
|
|
|
|||
Loading…
Reference in a new issue