diff options
author | bigbiff bigbiff <bigbiff@teamw.in> | 2018-12-19 00:39:53 +0100 |
---|---|---|
committer | Ethan Yonker <dees_troy@teamw.in> | 2019-03-20 20:28:21 +0100 |
commit | af32bb9c4f4f06e92de3435ed2db3153c0701094 (patch) | |
tree | 622948fb3167dc17bb436c948d61df581d2e75f7 /mtp/ffs/MtpDescriptors.h | |
parent | Adding Edl button in reboot menu (diff) | |
download | android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.tar android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.tar.gz android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.tar.bz2 android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.tar.lz android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.tar.xz android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.tar.zst android_bootable_recovery-af32bb9c4f4f06e92de3435ed2db3153c0701094.zip |
Diffstat (limited to '')
-rw-r--r-- | mtp/ffs/MtpDescriptors.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/mtp/ffs/MtpDescriptors.h b/mtp/ffs/MtpDescriptors.h new file mode 100644 index 000000000..f362d80f4 --- /dev/null +++ b/mtp/ffs/MtpDescriptors.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MTP_DESCRIPTORS_H +#define MTP_DESCRIPTORS_H + +#include <linux/usb/ch9.h> +#include <linux/usb/functionfs.h> +#include <sys/endian.h> + +constexpr char FFS_MTP_EP0[] = "/dev/usb-ffs/mtp/ep0"; +constexpr char FFS_MTP_EP_IN[] = "/dev/usb-ffs/mtp/ep1"; +constexpr char FFS_MTP_EP_OUT[] = "/dev/usb-ffs/mtp/ep2"; +constexpr char FFS_MTP_EP_INTR[] = "/dev/usb-ffs/mtp/ep3"; + +constexpr char FFS_PTP_EP0[] = "/dev/usb-ffs/ptp/ep0"; +constexpr char FFS_PTP_EP_IN[] = "/dev/usb-ffs/ptp/ep1"; +constexpr char FFS_PTP_EP_OUT[] = "/dev/usb-ffs/ptp/ep2"; +constexpr char FFS_PTP_EP_INTR[] = "/dev/usb-ffs/ptp/ep3"; + +constexpr int MAX_PACKET_SIZE_FS = 64; +constexpr int MAX_PACKET_SIZE_HS = 512; +constexpr int MAX_PACKET_SIZE_SS = 1024; +constexpr int MAX_PACKET_SIZE_EV = 28; + +struct func_desc { + struct usb_interface_descriptor intf; + struct usb_endpoint_descriptor_no_audio sink; + struct usb_endpoint_descriptor_no_audio source; + struct usb_endpoint_descriptor_no_audio intr; +} __attribute__((packed)); + +struct ss_func_desc { + struct usb_interface_descriptor intf; + struct usb_endpoint_descriptor_no_audio sink; + struct usb_ss_ep_comp_descriptor sink_comp; + struct usb_endpoint_descriptor_no_audio source; + struct usb_ss_ep_comp_descriptor source_comp; + struct usb_endpoint_descriptor_no_audio intr; + struct usb_ss_ep_comp_descriptor intr_comp; +} __attribute__((packed)); + +struct desc_v1 { + struct usb_functionfs_descs_head_v1 { + __le32 magic; + __le32 length; + __le32 fs_count; + __le32 hs_count; + } __attribute__((packed)) header; + struct func_desc fs_descs, hs_descs; +} __attribute__((packed)); + +struct desc_v2 { + struct usb_functionfs_descs_head_v2 header; + // The rest of the structure depends on the flags in the header. + __le32 fs_count; + __le32 hs_count; + __le32 ss_count; + __le32 os_count; + struct func_desc fs_descs, hs_descs; + struct ss_func_desc ss_descs; + struct usb_os_desc_header os_header; + struct usb_ext_compat_desc os_desc; +} __attribute__((packed)); + +// OS descriptor contents should not be changed. See b/64790536. +static_assert(sizeof(struct desc_v2) == sizeof(usb_functionfs_descs_head_v2) + + 16 + 2 * sizeof(struct func_desc) + sizeof(struct ss_func_desc) + + sizeof(usb_os_desc_header) + sizeof(usb_ext_compat_desc), + "Size of mtp descriptor is incorrect!"); + +#define STR_INTERFACE "MTP" +struct functionfs_lang { + __le16 code; + char str1[sizeof(STR_INTERFACE)]; +} __attribute__((packed)); + +struct functionfs_strings { + struct usb_functionfs_strings_head header; + struct functionfs_lang lang0; +} __attribute__((packed)); + +extern const struct desc_v2 mtp_desc_v2; +extern const struct desc_v2 ptp_desc_v2; +extern const struct desc_v1 mtp_desc_v1; +extern const struct desc_v1 ptp_desc_v1; +extern const struct functionfs_strings mtp_strings; + +bool writeDescriptors(int fd, bool ptp); + +#endif // MTP_DESCRIPTORS_H |