option optimize_for = SPEED; option cc_generic_services = false; enum EHIDDeviceLocation { k_EDeviceLocationLocal = 0; k_EDeviceLocationRemote = 2; k_EDeviceLocationAny = 3; } enum EHIDDeviceDisconnectMethod { k_EDeviceDisconnectMethodUnknown = 0; k_EDeviceDisconnectMethodBluetooth = 1; k_EDeviceDisconnectMethodFeatureReport = 2; k_EDeviceDisconnectMethodOutputReport = 3; } message CHIDDeviceInfo { optional .EHIDDeviceLocation location = 1 [default = k_EDeviceLocationLocal]; optional string path = 2; optional uint32 vendor_id = 3; optional uint32 product_id = 4; optional string serial_number = 5; optional uint32 release_number = 6; optional string manufacturer_string = 7; optional string product_string = 8; optional uint32 usage_page = 9; optional uint32 usage = 10; optional int32 interface_number = 11 [default = -1]; optional int32 ostype = 12 [default = -1]; optional bool is_generic_gamepad = 13; optional bool is_generic_joystick = 14; optional uint32 caps_bits = 15; optional uint32 session_id = 16; optional uint32 eControllerType_OBSOLETE = 17 [default = 0]; optional bool is_xinput_device_OBSOLETE = 18 [default = false]; optional uint32 session_remote_play_together_appid = 19; optional bool is_steamvr_device = 20 [default = false]; } message CHIDDeviceInputReport { optional bytes full_report = 1; optional bytes delta_report = 2; optional uint32 delta_report_size = 3; optional uint32 delta_report_crc = 4; } message CHIDMessageToRemote { message DeviceOpen { optional .CHIDDeviceInfo info = 1; } message DeviceClose { optional uint32 device = 1; } message DeviceWrite { optional uint32 device = 1; optional bytes data = 2; } message DeviceRead { optional uint32 device = 1; optional uint32 length = 2; optional int32 timeout_ms = 3; } message DeviceSendFeatureReport { optional uint32 device = 1; optional bytes data = 2; } message DeviceGetFeatureReport { optional uint32 device = 1; optional bytes report_number = 2; optional uint32 length = 3; } message DeviceGetVendorString { optional uint32 device = 1; } message DeviceGetProductString { optional uint32 device = 1; } message DeviceGetSerialNumberString { optional uint32 device = 1; } message DeviceStartInputReports { optional uint32 device = 1; optional uint32 length = 2; } message DeviceRequestFullReport { optional uint32 device = 1; } message DeviceDisconnect { optional uint32 device = 1; optional .EHIDDeviceDisconnectMethod disconnectMethod = 2 [default = k_EDeviceDisconnectMethodUnknown]; optional bytes data = 3; } optional uint32 request_id = 1; oneof command { .CHIDMessageToRemote.DeviceOpen device_open = 2; .CHIDMessageToRemote.DeviceClose device_close = 3; .CHIDMessageToRemote.DeviceWrite device_write = 4; .CHIDMessageToRemote.DeviceRead device_read = 5; .CHIDMessageToRemote.DeviceSendFeatureReport device_send_feature_report = 6; .CHIDMessageToRemote.DeviceGetFeatureReport device_get_feature_report = 7; .CHIDMessageToRemote.DeviceGetVendorString device_get_vendor_string = 8; .CHIDMessageToRemote.DeviceGetProductString device_get_product_string = 9; .CHIDMessageToRemote.DeviceGetSerialNumberString device_get_serial_number_string = 10; .CHIDMessageToRemote.DeviceStartInputReports device_start_input_reports = 11; .CHIDMessageToRemote.DeviceRequestFullReport device_request_full_report = 12; .CHIDMessageToRemote.DeviceDisconnect device_disconnect = 13; } } message CHIDMessageFromRemote { message UpdateDeviceList { repeated .CHIDDeviceInfo devices = 1; } message RequestResponse { optional uint32 request_id = 1; optional int32 result = 2; optional bytes data = 3; } message DeviceInputReports { message DeviceInputReport { optional uint32 device = 1; repeated .CHIDDeviceInputReport reports = 2; } repeated .CHIDMessageFromRemote.DeviceInputReports.DeviceInputReport device_reports = 1; } message CloseDevice { optional uint32 device = 1; } message CloseAllDevices { } oneof command { .CHIDMessageFromRemote.UpdateDeviceList update_device_list = 1; .CHIDMessageFromRemote.RequestResponse response = 2; .CHIDMessageFromRemote.DeviceInputReports reports = 3; .CHIDMessageFromRemote.CloseDevice close_device = 4; .CHIDMessageFromRemote.CloseAllDevices close_all_devices = 5; } }