fastbootd: hacks for legacy

* Use different endpoint addresses for sinks and sources
 * Consider locked only explicitely `green` devices
 * [npjohnson] Updated for 12's logic

Change-Id: If093556e8e839cadf29f9e8f995f09ed3f188ed1
This commit is contained in:
Alessandro Astone 2020-02-26 20:10:35 +01:00 committed by zlewchan
parent ad1ae89d08
commit d12491d840
2 changed files with 44 additions and 4 deletions

View file

@ -156,6 +156,46 @@ static struct SsFuncDesc ss_descriptors = {
},
};
static struct FuncDesc fs_descriptors_v1 = {
.intf = fastboot_interface,
.source =
{
.bLength = sizeof(fs_descriptors_v1.source),
.bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = 1 | USB_DIR_OUT,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.wMaxPacketSize = kMaxPacketSizeFs,
},
.sink =
{
.bLength = sizeof(fs_descriptors_v1.sink),
.bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = 2 | USB_DIR_IN,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.wMaxPacketSize = kMaxPacketSizeFs,
},
};
static struct FuncDesc hs_descriptors_v1 = {
.intf = fastboot_interface,
.source =
{
.bLength = sizeof(hs_descriptors_v1.source),
.bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = 1 | USB_DIR_OUT,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.wMaxPacketSize = kMaxPacketSizeHs,
},
.sink =
{
.bLength = sizeof(hs_descriptors_v1.sink),
.bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = 2 | USB_DIR_IN,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.wMaxPacketSize = kMaxPacketSizeHs,
},
};
#define STR_INTERFACE_ "fastbootd"
static const struct {
@ -186,8 +226,8 @@ static struct DescV1 v1_descriptor = {
.fs_count = 3,
.hs_count = 3,
},
.fs_descs = fs_descriptors,
.hs_descs = hs_descriptors,
.fs_descs = fs_descriptors_v1,
.hs_descs = hs_descriptors_v1,
};
static struct DescV2 v2_descriptor = {
@ -226,7 +266,7 @@ static bool InitFunctionFs(usb_handle* h) {
auto ret = write(h->control.get(), &v2_descriptor, sizeof(v2_descriptor));
if (ret < 0) {
// fallback to v1 descriptor
// fallback to v1 descriptor, with different endpoint addresses for source and sink
ret = write(h->control.get(), &v1_descriptor, sizeof(v1_descriptor));
if (ret < 0) {
PLOG(ERROR) << "cannot write descriptors " << kUsbFfsFastbootEp0;

View file

@ -195,7 +195,7 @@ std::vector<std::string> ListPartitions(FastbootDevice* device) {
}
bool GetDeviceLockStatus() {
return android::base::GetProperty("ro.boot.verifiedbootstate", "") != "orange";
return android::base::GetProperty("ro.boot.verifiedbootstate", "") == "green";
}
bool UpdateAllPartitionMetadata(FastbootDevice* device, const std::string& super_name,