Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 025b239f authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge changes Ic2af40b8,I9c8cfebe am: 824f0095

Change-Id: I239af47affe95ebbf3f019e579cbe050e1d5766d
parents 670c58db 824f0095
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -528,14 +528,16 @@ struct UsbFfsConnection : public Connection {
            }

            if (id.direction == TransferDirection::READ) {
                HandleRead(id, event.res);
                if (!HandleRead(id, event.res)) {
                    return;
                }
            } else {
                HandleWrite(id);
            }
        }
    }

    void HandleRead(TransferId id, int64_t size) {
    bool HandleRead(TransferId id, int64_t size) {
        uint64_t read_idx = id.id % kUsbReadQueueDepth;
        IoReadBlock* block = &read_requests_[read_idx];
        block->pending = false;
@@ -545,7 +547,7 @@ struct UsbFfsConnection : public Connection {
        if (block->id().id != needed_read_id_) {
            LOG(VERBOSE) << "read " << block->id().id << " completed while waiting for "
                         << needed_read_id_;
            return;
            return true;
        }

        for (uint64_t id = needed_read_id_;; ++id) {
@@ -554,15 +556,22 @@ struct UsbFfsConnection : public Connection {
            if (current_block->pending) {
                break;
            }
            ProcessRead(current_block);
            if (!ProcessRead(current_block)) {
                return false;
            }
            ++needed_read_id_;
        }

        return true;
    }

    void ProcessRead(IoReadBlock* block) {
    bool ProcessRead(IoReadBlock* block) {
        if (!block->payload.empty()) {
            if (!incoming_header_.has_value()) {
                CHECK_EQ(sizeof(amessage), block->payload.size());
                if (block->payload.size() != sizeof(amessage)) {
                    HandleError("received packet of unexpected length while reading header");
                    return false;
                }
                amessage& msg = incoming_header_.emplace();
                memcpy(&msg, block->payload.data(), sizeof(msg));
                LOG(DEBUG) << "USB read:" << dump_header(&msg);
@@ -570,7 +579,10 @@ struct UsbFfsConnection : public Connection {
            } else {
                size_t bytes_left = incoming_header_->data_length - incoming_payload_.size();
                Block payload = std::move(block->payload);
                CHECK_LE(payload.size(), bytes_left);
                if (block->payload.size() > bytes_left) {
                    HandleError("received too many bytes while waiting for payload");
                    return false;
                }
                incoming_payload_.append(std::move(payload));
            }

@@ -593,6 +605,7 @@ struct UsbFfsConnection : public Connection {

        PrepareReadBlock(block, block->id().id + kUsbReadQueueDepth);
        SubmitRead(block);
        return true;
    }

    bool SubmitRead(IoReadBlock* block) {
+1 −1
Original line number Diff line number Diff line
@@ -299,6 +299,7 @@ bool open_functionfs(android::base::unique_fd* out_control, android::base::uniqu
        }
        // Signal only when writing the descriptors to ffs
        android::base::SetProperty("sys.usb.ffs.ready", "1");
        *out_control = std::move(control);
    }

    bulk_out.reset(adb_open(USB_FFS_ADB_OUT, O_RDONLY));
@@ -313,7 +314,6 @@ bool open_functionfs(android::base::unique_fd* out_control, android::base::uniqu
        return false;
    }

    *out_control = std::move(control);
    *out_bulk_in = std::move(bulk_in);
    *out_bulk_out = std::move(bulk_out);
    return true;