113 lines
2.0 KiB
Protocol Buffer
113 lines
2.0 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package keyboard.cdc;
|
|
|
|
// Full protocol schema.
|
|
//
|
|
// CDC uses:
|
|
// [AA][55][Len][Type][Payload][Checksum]
|
|
//
|
|
// GATT uses:
|
|
// protobuf(CdcPacketBody)
|
|
//
|
|
// In this schema, the outer CDC frame is also modeled explicitly so we keep
|
|
// one complete protocol definition.
|
|
|
|
enum CdcPacketType {
|
|
CDC_PACKET_TYPE_UNKNOWN = 0;
|
|
CDC_PACKET_TYPE_HELLO_REQ = 1;
|
|
CDC_PACKET_TYPE_HELLO_RSP = 2;
|
|
CDC_PACKET_TYPE_BITMAP = 16;
|
|
CDC_PACKET_TYPE_FUNCTION_KEY_EVENT = 32;
|
|
CDC_PACKET_TYPE_LED_STATE = 33;
|
|
CDC_PACKET_TYPE_TIME_SYNC = 48;
|
|
CDC_PACKET_TYPE_THEME_RGB = 49;
|
|
CDC_PACKET_TYPE_ACK = 126;
|
|
CDC_PACKET_TYPE_ERROR = 127;
|
|
}
|
|
|
|
enum KeyAction {
|
|
KEY_ACTION_RELEASE = 0;
|
|
KEY_ACTION_PRESS = 1;
|
|
}
|
|
|
|
enum ErrorCode {
|
|
ERROR_CODE_NONE = 0;
|
|
ERROR_CODE_UNKNOWN_TYPE = 1;
|
|
ERROR_CODE_INVALID_LENGTH = 2;
|
|
ERROR_CODE_INVALID_PARAM = 3;
|
|
ERROR_CODE_NOT_READY = 4;
|
|
}
|
|
|
|
message CdcFrame {
|
|
uint32 head1 = 1;
|
|
uint32 head2 = 2;
|
|
uint32 payload_length = 3;
|
|
CdcPacketType type = 4;
|
|
bytes payload = 5;
|
|
uint32 checksum = 6;
|
|
}
|
|
|
|
message CdcPacketBody {
|
|
oneof body {
|
|
HelloReq hello_req = 1;
|
|
HelloRsp hello_rsp = 2;
|
|
Bitmap bitmap = 3;
|
|
FunctionKeyEvent function_key_event = 4;
|
|
LedState led_state = 5;
|
|
TimeSync time_sync = 6;
|
|
ThemeRgb theme_rgb = 7;
|
|
Ack ack = 8;
|
|
Error error = 9;
|
|
}
|
|
}
|
|
|
|
message HelloReq {
|
|
uint32 protocol_version = 1;
|
|
}
|
|
|
|
message HelloRsp {
|
|
uint32 protocol_version = 1;
|
|
uint32 vendor_id = 2;
|
|
uint32 product_id = 3;
|
|
uint32 firmware_major = 4;
|
|
uint32 firmware_minor = 5;
|
|
uint32 capability_flags = 6;
|
|
}
|
|
|
|
message Bitmap {
|
|
bytes usage_bitmap = 1;
|
|
}
|
|
|
|
message FunctionKeyEvent {
|
|
uint32 usage = 1;
|
|
KeyAction action = 2;
|
|
}
|
|
|
|
message LedState {
|
|
uint32 led_mask = 1;
|
|
}
|
|
|
|
message TimeSync {
|
|
uint32 version = 1;
|
|
uint32 flags = 2;
|
|
sint32 timezone_min = 3;
|
|
fixed64 utc_ms = 4;
|
|
fixed32 accuracy_ms = 5;
|
|
}
|
|
|
|
message ThemeRgb {
|
|
uint32 red = 1;
|
|
uint32 green = 2;
|
|
uint32 blue = 3;
|
|
}
|
|
|
|
message Ack {
|
|
uint32 acked_type = 1;
|
|
}
|
|
|
|
message Error {
|
|
uint32 error_type = 1;
|
|
ErrorCode error_code = 2;
|
|
}
|