syntax = "proto3";
package kandyhid;

message Operation {
  oneof message_type {
  // southbound: JS -> DLL
    kandyhid.ScanForDevices scan_for_devices = 1;
    kandyhid.OpenDevice open_device = 2;
    kandyhid.CloseDevice close_device = 3;
    // northbound: DLL -> JS
    kandyhid.ScanResponse scan_response = 4;
    kandyhid.OpenResponse open_response = 5;
    kandyhid.CloseResponse close_response = 6;
    kandyhid.DeviceError device_error = 7;
    // both directions
    kandyhid.HIDMessageCollection hid_message_collection = 8;
  }
}

message ScanForDevices {}

message OpenDevice {
  int32 location = 1;
}

message CloseDevice {
  int32 location = 1; // not currently used; future
};

message ScanResponse {
    message ScanResult {
        int32 interface = 1;
        string name = 2;
    }
    repeated ScanResult scan_results = 1;
}

message OpenResponse {
  bool result = 1;
}

message CloseResponse {
  bool result = 1;
}

message DeviceError {}

message HIDMessageCollection {
    message HIDMessage {
        int32 usage_page = 1;
        int32 usage = 2;
        bool value = 3;
    }
    repeated HIDMessage hid_messages = 1;
}
