#ifndef SERVICES_DEVICE_USB_USB_DESCRIPTORS_H_
#define SERVICES_DEVICE_USB_USB_DESCRIPTORS_H_
#include <stdint.h>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "services/device/public/mojom/usb_device.mojom.h"
namespace device {
class UsbDeviceHandle;
struct CombinedInterfaceInfo { … };
struct UsbDeviceDescriptor { … };
void ReadUsbDescriptors(
scoped_refptr<UsbDeviceHandle> device_handle,
base::OnceCallback<void(std::unique_ptr<UsbDeviceDescriptor>)> callback);
bool ParseUsbStringDescriptor(base::span<const uint8_t> descriptor,
std::u16string* output);
void ReadUsbStringDescriptors(
scoped_refptr<UsbDeviceHandle> device_handle,
std::unique_ptr<std::map<uint8_t, std::u16string>> index_map,
base::OnceCallback<void(std::unique_ptr<std::map<uint8_t, std::u16string>>)>
callback);
mojom::UsbEndpointInfoPtr BuildUsbEndpointInfoPtr(const uint8_t* data);
mojom::UsbEndpointInfoPtr BuildUsbEndpointInfoPtr(uint8_t address,
uint8_t attributes,
uint16_t maximum_packet_size,
uint8_t polling_interval);
mojom::UsbInterfaceInfoPtr BuildUsbInterfaceInfoPtr(const uint8_t* data);
mojom::UsbInterfaceInfoPtr BuildUsbInterfaceInfoPtr(uint8_t interface_number,
uint8_t alternate_setting,
uint8_t interface_class,
uint8_t interface_subclass,
uint8_t interface_protocol);
void AggregateInterfacesForConfig(mojom::UsbConfigurationInfo* config);
CombinedInterfaceInfo FindInterfaceInfoFromConfig(
const mojom::UsbConfigurationInfo* config,
uint8_t interface_number,
uint8_t alternate_setting);
mojom::UsbConfigurationInfoPtr BuildUsbConfigurationInfoPtr(
const uint8_t* data);
mojom::UsbConfigurationInfoPtr BuildUsbConfigurationInfoPtr(
uint8_t configuration_value,
bool self_powered,
bool remote_wakeup,
uint8_t maximum_power);
void AssignFirstInterfaceNumbers(mojom::UsbConfigurationInfo* config);
}
#endif