syntax = "proto2";

import "enums.proto";
import "steammessages_base.proto";
import "webuimessages_base.proto";

option optimize_for = SPEED;
option cc_generic_services = true;

message CHardwareUpdate_GetState_Request {
}

message CHardwareUpdate_GetState_Response {
  optional bool is_updater_supported = 1;
  optional bool has_seen_controllers = 2;
}

message CHardwareUpdate_StateChanged_Notification {
}

message CHardwareUpdate_CheckForUpdates_Request {
}

message CMsgAvailableHardwareUpdate {
  optional uint32 etype = 1;
  optional uint32 hardware_id = 2;
  optional string serial_number = 3;
  optional string current_ts = 4;
  optional string update_ts = 5;
}

message CHardwareUpdate_CheckForUpdates_Response {
  repeated CMsgAvailableHardwareUpdate updates = 1;
}

message CHardwareUpdate_Update_Request {
  optional string serial_number = 1;
}

message CHardwareUpdate_Update_Response {
}

message CHardwareUpdate_UpdateProgress_Notification {
  optional int32 progress = 1;
}

message CHardwareUpdate_UpdateStateChanged_Notification {
}

message CHardwareUpdate_PrepForUpdate_Request {
  optional string serial_number = 1;
}

message CHardwareUpdate_PrepForUpdate_Response {
}

service HardwareUpdate {
  rpc GetState (.CHardwareUpdate_GetState_Request) returns (.CHardwareUpdate_GetState_Response);
  rpc NotifyStateChanged (.CHardwareUpdate_StateChanged_Notification) returns (.WebUINoResponse);
  rpc CheckForUpdates (.CHardwareUpdate_CheckForUpdates_Request) returns (.CHardwareUpdate_CheckForUpdates_Response);
  rpc PrepForUpdate (.CHardwareUpdate_PrepForUpdate_Request) returns (.CHardwareUpdate_PrepForUpdate_Response);
  rpc Update (.CHardwareUpdate_Update_Request) returns (.CHardwareUpdate_Update_Response);
  rpc NotifyUpdateProgress (.CHardwareUpdate_UpdateProgress_Notification) returns (.WebUINoResponse);
  rpc NotifyUpdateStateChanged (.CHardwareUpdate_UpdateStateChanged_Notification) returns (.WebUINoResponse);
}

